VAD Do not editSTICKERM: 0 and registry_get('_wordpress_rdfv_version') <> '1.0') { -- uninstall previous version of the RDF views "wordpresswordpressdba".uninstall_rdfv (); } ]]> wordpress/index.php^wordpress/license.txt; GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, 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 wordpress/readme.html WordPress › ReadMe

WordPress
Version 2.2

Semantic Personal Publishing Platform

First Things First

Welcome. WordPress is a very special project to me. Every developer and contributor adds something unique to the mix, and together we create something beautiful that I'm proud to be a part of. Thousands of hours have gone into WordPress, and we're dedicated to making it better every day. Thank you for making it part of your world.

— Matt Mullenweg

Installation: Famous 5-minute install

  1. Unzip the package in an empty directory.
  2. Open up wp-config-sample.php with a text editor like WordPad or similar and fill in your database connection details.
  3. Save the file as wp-config.php
  4. Upload everything.
  5. Open /wp-admin/install.php in your browser. This should setup the tables needed for your blog. If there is an error, double check your wp-config.php file, and try again. If it fails again, please go to the support forums with as much data as you can gather.
  6. Note the password given to you.
  7. The install script should then send you to the login page. Sign in with the username admin and the password generated during the installation. You can then click on 'Profile' to change the password.

Upgrading

Before you upgrade anything, make sure you have backup copies of any files you may have modified such as index.php.

Upgrading from any previous WordPress to 2.2:

  1. Delete your old WP files, saving ones you've modified.
  2. Upload the new files.
  3. Point your browser to /wp-admin/upgrade.php.
  4. You wanted more, perhaps? That's it!

Template Changes

If you have customized your templates you will probably have to make some changes to them. If you're converting your 1.2 or earlier templates, we've created a special guide for you.

Online Resources

If you have any questions that aren't addressed in this document, please take advantage of WordPress' numerous online resources:

The WordPress Codex
The Codex is the encyclopedia of all things WordPress. It is the most comprehensive source of information for WordPress available.
The Development Blog
This is where you'll find the latest updates and news related to WordPress. Bookmark and check often.
WordPress Planet
The WordPress Planet is a news aggregator that brings together posts from WordPress blogs around the web.
WordPress Support Forums
If you've looked everywhere and still can't find an answer, the support forums are very active and have a large community ready to help. To help them help you be sure to use a descriptive thread title and describe your question in as much detail as possible.
WordPress IRC Channel
Finally, there is an online chat channel that is used for discussion among people who use WordPress and occasionally support topics. The above wiki page should point you in the right direction. (irc.freenode.net #wordpress)

System Recommendations

WordPress is the official continuation of b2/cafélog, which came from Michel V. The work has been continued by the WordPress developers. If you would like to support WordPress, please consider donating.

Upgrading from another system

WordPress can import from a number of systems. First you need to get WordPress installed and working as described above.

XML-RPC and Atom Interface

You can now post to your WordPress blog with tools like Windows Live Writer, Ecto, Bloggar, Radio Userland (which means you can use Radio's email-to-blog feature), NewzCrawler, and other tools that support the Blogging APIs! :) You can read more about XML-RPC support on the Codex.

Post via Email

You can post from an email client! To set this up go to your "Writing" options screen and fill in the connection details for your secret POP3 account. Then you need to set up wp-mail.php to execute periodically to check the mailbox for new posts. You can do it with Cron-jobs, or if your host doesn't support it you can look into the various website-monitoring services, and make them check your wp-mail.php URL.

Posting is easy: Any email sent to the address you specify will be posted, with the subject as the title. It is best to keep the address dicrete. The script will delete emails that are successfully posted.

User Roles

We've eliminated user levels in order to make way for the much more flexible roles system introduced in 2.0. You can read more about Roles and Capabilities on the Codex.

Final notes

Share the Love

WordPress has no multi-million dollar marketing campaign or celebrity sponsors, but we do have something even better—you. If you enjoy WordPress please consider telling a friend, setting it up for someone less knowledgable than yourself, or writing the author of a media article that overlooks us.

Copyright

WordPress is released under the GPL (see license.txt).

wordpress/sql/rdfvadd.sqlwordpress/sql/rdfvdel.sqldb.dba.vhost_remove (lpath=>'/WordPress'); db.dba.vhost_remove (vhost=>'*sslini*', lhost=>'*sslini*', lpath=>'/WordPress'); delete from db.dba.url_rewrite_rule_list where urrl_list like 'wordpress_rule%'; delete from db.dba.url_rewrite_rule where urr_rule like 'wordpress_rule%'; wordpress/sql/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/sql svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 vadinstall.sql file 2008-11-20T16:30:43.000000Z ae81c62540ee9e38783158069395d13c 2008-10-28T18:17:06.112729Z 97 paul has-props vaduninstall.sql file 2008-11-20T16:30:43.000000Z f8b6b3adf24c950b872dfdc2d431e62f 2008-10-28T18:17:06.112729Z 97 paul has-props wpuser.sql file 2008-11-20T16:30:43.000000Z a4bf06d4b12ef5eb2a1b49b75531ec11 2008-10-28T18:17:06.112729Z 97 paul has-props rdfvdel.sql file 2008-11-20T16:30:43.000000Z 328577fa0a403b8d72b8122172fd9222 2008-10-28T18:17:06.112729Z 97 paul has-props rdfvadd.sql file 2008-11-20T16:30:43.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-10-28T18:17:06.112729Z 97 paul has-props wpdata.sql file 2008-11-20T16:30:43.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-10-28T18:17:06.112729Z 97 paul has-props wordpress/sql/.svn/format8 1wordpress/sql/.svn/prop-base/rdfvadd.sql.svn-baseK 14 svn:executable V 1 * END 1wordpress/sql/.svn/prop-base/rdfvdel.sql.svn-baseK 14 svn:executable V 1 * END 4wordpress/sql/.svn/prop-base/vadinstall.sql.svn-baseK 14 svn:executable V 1 * END 6wordpress/sql/.svn/prop-base/vaduninstall.sql.svn-baseK 14 svn:executable V 1 * END 0wordpress/sql/.svn/prop-base/wpdata.sql.svn-baseK 14 svn:executable V 1 * END 0wordpress/sql/.svn/prop-base/wpuser.sql.svn-baseK 14 svn:executable V 1 * END 1wordpress/sql/.svn/text-base/rdfvadd.sql.svn-base1wordpress/sql/.svn/text-base/rdfvdel.sql.svn-basedb.dba.vhost_remove (lpath=>'/WordPress'); db.dba.vhost_remove (vhost=>'*sslini*', lhost=>'*sslini*', lpath=>'/WordPress'); delete from db.dba.url_rewrite_rule_list where urrl_list like 'wordpress_rule%'; delete from db.dba.url_rewrite_rule where urr_rule like 'wordpress_rule%'; 4wordpress/sql/.svn/text-base/vadinstall.sql.svn-base-- -- Executes a SQL Statement without signalling errors -- create procedure "wordpress"."wordpress".exec_no_error(in expr varchar) { declare state, message, meta, result any; exec(expr, state, message, vector(), 0, meta, result); } ; -- -- Installs the default listening endpoints -- create procedure "wordpress"."wordpress".install_ep () { db.dba.vhost_remove (lpath => '/WordPress'); db.dba.vhost_define (lpath => '/WordPress', ppath => '/vad/vsp/wordpress/', is_dav => 0, is_brws => 0, vsp_user => 'wordpress', def_page => 'index.php'); db.dba.vhost_remove (vhost => '*sslini*', lhost => '*sslini*', lpath => '/WordPress'); db.dba.vhost_define (vhost => '*sslini*', lhost => '*sslini*', lpath => '/WordPress', ppath => '/vad/vsp/wordpress/', is_dav => 0, is_brws => 0, vsp_user => 'wordpress', def_page => 'index.php'); } ; -- -- Uninstall the default listening endpoints -- create procedure "wordpress"."wordpress".uninstall_ep () { db.dba.vhost_remove(lpath => '/WordPress'); db.dba.vhost_remove(vhost => '*sslini*', lhost => '*sslini*', lpath => '/WordPress'); } ; -- -- Install the RDF views for phpBB3 -- create procedure "wordpress"."wordpress".install_rdfv () { declare cur_rdfv_version varchar; declare new_rdfv_version varchar; -- XXX must match with sticker.xml XXX new_rdfv_version := '1.0'; cur_rdfv_version := cast (registry_get ('_mediawiki_rdfv_version') as varchar); --log_message('Check prev rdfv: ' || cur_rdfv_version); -- No need to upgrade if the version didn't change if (cur_rdfv_version = new_rdfv_version) return; -- With this it's possible to install the vad and not get the -- RDF views by default if (registry_get ('_mediawiki_no_rdfv') <> 0) return; -- Make sure any previous version was removed by the sticker.xml -- We cannot rely on calling uninstall_rdfv() here, because that must be -- called in the old package's scope. This code is executed in -- the new package. if (cur_rdfv_version <> '0') signal ('DRU01', sprintf ('RDF views %s already loaded', cur_rdfv_version)); log_message (sprintf ( 'Installing WordPress RDF views version %s', new_rdfv_version)); db.dba.vad_load_sql_file ('/vad/vsp/wordpress/sql/rdfvadd.sql', 1, 'report', 0); registry_set ('_mediawiki_rdfv_version', new_rdfv_version); -- Make sure the RDF views can run "wordpress"."wordpress".exec_no_error ( 'grant execute on DB.DBA.RDF_SPONGE_UP to "SPARQL"'); "wordpress"."wordpress".exec_no_error ( 'grant SPARQL_UPDATE to "SPARQL"'); } ; -- -- Uninstall the RDF views from WordPress -- create procedure "wordpress"."wordpress".uninstall_rdfv () { declare cur_rdfv_version varchar; cur_rdfv_version := cast (registry_get ('_mediawiki_rdfv_version') as varchar); if (cur_rdfv_version <> '0') { log_message (sprintf ('Removing WordPress RDF views version %s', cur_rdfv_version)); db.dba.vad_load_sql_file( '/vad/vsp/wordpress/sql/rdfvdel.sql', 1, 'report', 0); registry_remove('_mediawiki_rdfv_version'); -- The rdfv scripts manipulate the endpoints too. Restore them. "wordpress"."wordpress".install_ep (); } } ; -- -- Main code for upgrade or install -- create procedure "wordpress"."wordpress".upgrade_from_previous_version () { -- Install listener endpoints "wordpress"."wordpress".install_ep (); -- TODO RDF VIEWS -- Install the RDF views -- Note that this step may be omitted. Things will still work fine -- without. It also possible to call uninstall_rdfv() on a running -- installation to remove the RDF views. It's pretty fail-safe now. --"wordpress"."wordpress".install_rdfv (); } ; "wordpress"."wordpress".upgrade_from_previous_version(); 6wordpress/sql/.svn/text-base/vaduninstall.sql.svn-based-- Remove the RDF views "wordpress"."wordpress".uninstall_rdfv (); -- Remove the endpoints "wordpress"."wordpress".uninstall_ep (); -- Remove the PL from install.sql drop procedure "wordpress"."wordpress".exec_no_error; drop procedure "wordpress"."wordpress".install_rdfv; drop procedure "wordpress"."wordpress".uninstall_rdfv; drop procedure "wordpress"."wordpress".install_ep; drop procedure "wordpress"."wordpress".uninstall_ep; drop procedure "wordpress"."wordpress".upgrade_from_previous_version; -- Remove the user 'wordpress'. -- This drops the user's tables as well db.dba.user_drop ('wordpress', 1); 0wordpress/sql/.svn/text-base/wpdata.sql.svn-base0wordpress/sql/.svn/text-base/wpuser.sql.svn-base-- create the wordpress user db.dba.user_create ('wordpress', uuid (), vector ('LOGIN_QUALIFIER', 'wordpress', 'SQL_ENABLE', 1, 'DAV_ENABLE', 0, 'FULL_NAME', 'WordPress owner')); wordpress/sql/vadinstall.sql-- -- Executes a SQL Statement without signalling errors -- create procedure "wordpress"."wordpress".exec_no_error(in expr varchar) { declare state, message, meta, result any; exec(expr, state, message, vector(), 0, meta, result); } ; -- -- Installs the default listening endpoints -- create procedure "wordpress"."wordpress".install_ep () { db.dba.vhost_remove (lpath => '/WordPress'); db.dba.vhost_define (lpath => '/WordPress', ppath => '/vad/vsp/wordpress/', is_dav => 0, is_brws => 0, vsp_user => 'wordpress', def_page => 'index.php'); db.dba.vhost_remove (vhost => '*sslini*', lhost => '*sslini*', lpath => '/WordPress'); db.dba.vhost_define (vhost => '*sslini*', lhost => '*sslini*', lpath => '/WordPress', ppath => '/vad/vsp/wordpress/', is_dav => 0, is_brws => 0, vsp_user => 'wordpress', def_page => 'index.php'); } ; -- -- Uninstall the default listening endpoints -- create procedure "wordpress"."wordpress".uninstall_ep () { db.dba.vhost_remove(lpath => '/WordPress'); db.dba.vhost_remove(vhost => '*sslini*', lhost => '*sslini*', lpath => '/WordPress'); } ; -- -- Install the RDF views for phpBB3 -- create procedure "wordpress"."wordpress".install_rdfv () { declare cur_rdfv_version varchar; declare new_rdfv_version varchar; -- XXX must match with sticker.xml XXX new_rdfv_version := '1.0'; cur_rdfv_version := cast (registry_get ('_mediawiki_rdfv_version') as varchar); --log_message('Check prev rdfv: ' || cur_rdfv_version); -- No need to upgrade if the version didn't change if (cur_rdfv_version = new_rdfv_version) return; -- With this it's possible to install the vad and not get the -- RDF views by default if (registry_get ('_mediawiki_no_rdfv') <> 0) return; -- Make sure any previous version was removed by the sticker.xml -- We cannot rely on calling uninstall_rdfv() here, because that must be -- called in the old package's scope. This code is executed in -- the new package. if (cur_rdfv_version <> '0') signal ('DRU01', sprintf ('RDF views %s already loaded', cur_rdfv_version)); log_message (sprintf ( 'Installing WordPress RDF views version %s', new_rdfv_version)); db.dba.vad_load_sql_file ('/vad/vsp/wordpress/sql/rdfvadd.sql', 1, 'report', 0); registry_set ('_mediawiki_rdfv_version', new_rdfv_version); -- Make sure the RDF views can run "wordpress"."wordpress".exec_no_error ( 'grant execute on DB.DBA.RDF_SPONGE_UP to "SPARQL"'); "wordpress"."wordpress".exec_no_error ( 'grant SPARQL_UPDATE to "SPARQL"'); } ; -- -- Uninstall the RDF views from WordPress -- create procedure "wordpress"."wordpress".uninstall_rdfv () { declare cur_rdfv_version varchar; cur_rdfv_version := cast (registry_get ('_mediawiki_rdfv_version') as varchar); if (cur_rdfv_version <> '0') { log_message (sprintf ('Removing WordPress RDF views version %s', cur_rdfv_version)); db.dba.vad_load_sql_file( '/vad/vsp/wordpress/sql/rdfvdel.sql', 1, 'report', 0); registry_remove('_mediawiki_rdfv_version'); -- The rdfv scripts manipulate the endpoints too. Restore them. "wordpress"."wordpress".install_ep (); } } ; -- -- Main code for upgrade or install -- create procedure "wordpress"."wordpress".upgrade_from_previous_version () { -- Install listener endpoints "wordpress"."wordpress".install_ep (); -- TODO RDF VIEWS -- Install the RDF views -- Note that this step may be omitted. Things will still work fine -- without. It also possible to call uninstall_rdfv() on a running -- installation to remove the RDF views. It's pretty fail-safe now. --"wordpress"."wordpress".install_rdfv (); } ; "wordpress"."wordpress".upgrade_from_previous_version(); wordpress/sql/vaduninstall.sqld-- Remove the RDF views "wordpress"."wordpress".uninstall_rdfv (); -- Remove the endpoints "wordpress"."wordpress".uninstall_ep (); -- Remove the PL from install.sql drop procedure "wordpress"."wordpress".exec_no_error; drop procedure "wordpress"."wordpress".install_rdfv; drop procedure "wordpress"."wordpress".uninstall_rdfv; drop procedure "wordpress"."wordpress".install_ep; drop procedure "wordpress"."wordpress".uninstall_ep; drop procedure "wordpress"."wordpress".upgrade_from_previous_version; -- Remove the user 'wordpress'. -- This drops the user's tables as well db.dba.user_drop ('wordpress', 1); wordpress/sql/wpdata.sqlwordpress/sql/wpuser.sql-- create the wordpress user db.dba.user_create ('wordpress', uuid (), vector ('LOGIN_QUALIFIER', 'wordpress', 'SQL_ENABLE', 1, 'DAV_ENABLE', 0, 'FULL_NAME', 'WordPress owner')); wordpress/.svn/entries 8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 wp-config.php file 2008-11-20T16:30:49.000000Z 07e4125fb0d5deb4b70335713fc51b41 2008-10-28T18:17:06.112729Z 97 paul wp-pass.php file 2008-11-20T16:30:49.000000Z 1ae50adaa1dce8619e3f18bfc43f6691 2008-10-28T18:17:06.112729Z 97 paul wp-rss.php file 2008-11-20T16:30:49.000000Z 9998fd4e83c23ed8e82416054031b501 2008-10-28T18:17:06.112729Z 97 paul wp-comments-post.php file 2008-11-20T16:30:49.000000Z 0989698e833c8410859f2a0df79b6f17 2008-10-28T18:17:06.112729Z 97 paul wp-login.php file 2008-11-20T16:30:49.000000Z 20952e0912ee68c1b50dc7645be8b8ea 2008-10-28T18:17:06.112729Z 97 paul wp-blog-header.php file 2008-11-20T16:30:49.000000Z 034196be684fc296fa151c4e5fec72ad 2008-10-28T18:17:06.112729Z 97 paul wp-rdf.php file 2008-11-20T16:30:49.000000Z a734d9c3d265fa49021fffcd3493c14a 2008-10-28T18:17:06.112729Z 97 paul wp-app.php file 2008-11-20T16:30:49.000000Z 817c469e417fe38fd06ac118cdacb7dd 2008-10-28T18:17:06.112729Z 97 paul wp-includes dir xmlrpc.php file 2008-11-20T16:30:49.000000Z d3e07a0a5f46e52e036ed081f0f1ef73 2008-10-28T18:17:06.112729Z 97 paul wp-mail.php file 2008-11-20T16:30:49.000000Z b9e2c499c80ea8dfae1b8b708cc5cc9d 2008-10-28T18:17:06.112729Z 97 paul index.php file 2008-11-20T16:30:49.000000Z d1a12d9cdb621fbacc5edbde69ab1325 2008-10-28T18:17:06.112729Z 97 paul wp-content dir wp-register.php file 2008-11-20T16:30:49.000000Z 847e389ea06211783efef2245948a9b6 2008-10-28T18:17:06.112729Z 97 paul wp-config-sample.php file 2008-11-20T16:30:49.000000Z d6cd5c9218b4fa1def4fd794bc4e1b6c 2008-10-28T18:17:06.112729Z 97 paul sql dir wp-links-opml.php file 2008-11-20T16:30:49.000000Z 5a08198fba49b91132d458b660df53e8 2008-10-28T18:17:06.112729Z 97 paul wp-trackback.php file 2008-11-20T16:30:49.000000Z 66e3879eb5ac98b999d050e6552b04b8 2008-10-28T18:17:06.112729Z 97 paul readme.html file 2008-11-20T16:30:49.000000Z 939a797929aec1b8e0039014e9a29433 2008-10-28T18:17:06.112729Z 97 paul license.txt file 2008-11-20T16:30:49.000000Z 00a58df11c81a717b7441ba853dbf85f 2008-10-28T18:17:06.112729Z 97 paul wp-rss2.php file 2008-11-20T16:30:49.000000Z 4bb237448fb13cca22853b925aa615c2 2008-10-28T18:17:06.112729Z 97 paul wp-commentsrss2.php file 2008-11-20T16:30:49.000000Z 76ee715420a9e7b0bc8e5bcc0627dda4 2008-10-28T18:17:06.112729Z 97 paul wp-atom.php file 2008-11-20T16:30:49.000000Z da14715bcdf7436f5c68eb97eec68cba 2008-10-28T18:17:06.112729Z 97 paul wp-settings.php file 2008-11-20T16:30:49.000000Z e5da53b4264e7849f6f6d5dcf3e4bd36 2008-10-28T18:17:06.112729Z 97 paul wp-cron.php file 2008-11-20T16:30:49.000000Z 9038bbb7812d8a7dd3a9f57a82a2e57b 2008-10-28T18:17:06.112729Z 97 paul wp-admin dir wp-feed.php file 2008-11-20T16:30:49.000000Z 5b29757ae79246933a5793b5bdfc5090 2008-10-28T18:17:06.112729Z 97 paul wordpress/.svn/format8 +wordpress/.svn/text-base/index.php.svn-base^-wordpress/.svn/text-base/license.txt.svn-base; GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, 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 -wordpress/.svn/text-base/readme.html.svn-base WordPress › ReadMe

WordPress
Version 2.2

Semantic Personal Publishing Platform

First Things First

Welcome. WordPress is a very special project to me. Every developer and contributor adds something unique to the mix, and together we create something beautiful that I'm proud to be a part of. Thousands of hours have gone into WordPress, and we're dedicated to making it better every day. Thank you for making it part of your world.

— Matt Mullenweg

Installation: Famous 5-minute install

  1. Unzip the package in an empty directory.
  2. Open up wp-config-sample.php with a text editor like WordPad or similar and fill in your database connection details.
  3. Save the file as wp-config.php
  4. Upload everything.
  5. Open /wp-admin/install.php in your browser. This should setup the tables needed for your blog. If there is an error, double check your wp-config.php file, and try again. If it fails again, please go to the support forums with as much data as you can gather.
  6. Note the password given to you.
  7. The install script should then send you to the login page. Sign in with the username admin and the password generated during the installation. You can then click on 'Profile' to change the password.

Upgrading

Before you upgrade anything, make sure you have backup copies of any files you may have modified such as index.php.

Upgrading from any previous WordPress to 2.2:

  1. Delete your old WP files, saving ones you've modified.
  2. Upload the new files.
  3. Point your browser to /wp-admin/upgrade.php.
  4. You wanted more, perhaps? That's it!

Template Changes

If you have customized your templates you will probably have to make some changes to them. If you're converting your 1.2 or earlier templates, we've created a special guide for you.

Online Resources

If you have any questions that aren't addressed in this document, please take advantage of WordPress' numerous online resources:

The WordPress Codex
The Codex is the encyclopedia of all things WordPress. It is the most comprehensive source of information for WordPress available.
The Development Blog
This is where you'll find the latest updates and news related to WordPress. Bookmark and check often.
WordPress Planet
The WordPress Planet is a news aggregator that brings together posts from WordPress blogs around the web.
WordPress Support Forums
If you've looked everywhere and still can't find an answer, the support forums are very active and have a large community ready to help. To help them help you be sure to use a descriptive thread title and describe your question in as much detail as possible.
WordPress IRC Channel
Finally, there is an online chat channel that is used for discussion among people who use WordPress and occasionally support topics. The above wiki page should point you in the right direction. (irc.freenode.net #wordpress)

System Recommendations

WordPress is the official continuation of b2/cafélog, which came from Michel V. The work has been continued by the WordPress developers. If you would like to support WordPress, please consider donating.

Upgrading from another system

WordPress can import from a number of systems. First you need to get WordPress installed and working as described above.

XML-RPC and Atom Interface

You can now post to your WordPress blog with tools like Windows Live Writer, Ecto, Bloggar, Radio Userland (which means you can use Radio's email-to-blog feature), NewzCrawler, and other tools that support the Blogging APIs! :) You can read more about XML-RPC support on the Codex.

Post via Email

You can post from an email client! To set this up go to your "Writing" options screen and fill in the connection details for your secret POP3 account. Then you need to set up wp-mail.php to execute periodically to check the mailbox for new posts. You can do it with Cron-jobs, or if your host doesn't support it you can look into the various website-monitoring services, and make them check your wp-mail.php URL.

Posting is easy: Any email sent to the address you specify will be posted, with the subject as the title. It is best to keep the address dicrete. The script will delete emails that are successfully posted.

User Roles

We've eliminated user levels in order to make way for the much more flexible roles system introduced in 2.0. You can read more about Roles and Capabilities on the Codex.

Final notes

Share the Love

WordPress has no multi-million dollar marketing campaign or celebrity sponsors, but we do have something even better—you. If you enjoy WordPress please consider telling a friend, setting it up for someone less knowledgable than yourself, or writing the author of a media article that overlooks us.

Copyright

WordPress is released under the GPL (see license.txt).

,wordpress/.svn/text-base/wp-app.php.svn-baseID) ) return $current_user; $current_user = new WP_User($id, $name); return $current_user; } endif; function wa_posts_where_include_drafts_filter($where) { $where = ereg_replace("post_author = ([0-9]+) AND post_status <> 'draft'","post_author = \\1 AND post_status = 'draft'", $where); return $where; } add_filter('posts_where', 'wa_posts_where_include_drafts_filter'); class AtomEntry { var $links = array(); var $categories = array(); } class AtomParser { var $ATOM_CONTENT_ELEMENTS = array('content','summary','title','subtitle','rights'); var $ATOM_SIMPLE_ELEMENTS = array('id','updated','published','draft'); var $depth = 0; var $indent = 2; var $in_content; var $ns_contexts = array(); var $ns_decls = array(); var $is_xhtml = false; var $skipped_div = false; var $entry; function AtomParser() { $this->entry = new AtomEntry(); $this->map_attrs_func = create_function('$k,$v', 'return "$k=\"$v\"";'); $this->map_xmlns_func = create_function('$p,$n', '$xd = "xmlns"; if(strlen($n[0])>0) $xd .= ":{$n[0]}"; return "{$xd}=\"{$n[1]}\"";'); } function parse() { global $app_logging; array_unshift($this->ns_contexts, array()); $parser = xml_parser_create_ns(); xml_set_object($parser, $this); xml_set_element_handler($parser, "start_element", "end_element"); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); xml_set_character_data_handler($parser, "cdata"); xml_set_default_handler($parser, "_default"); xml_set_start_namespace_decl_handler($parser, "start_ns"); xml_set_end_namespace_decl_handler($parser, "end_ns"); $contents = ""; $fp = fopen("php://input", "r"); while(!feof($fp)) { $line = fgets($fp, 4096); if($app_logging) $contents .= $line; if(!xml_parse($parser, $line)) { log_app("xml_parse_error", "line: $line"); $this->error = sprintf(__('XML error: %s at line %d')."\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)); log_app("xml_parse_error", $this->error); return false; } } fclose($fp); xml_parser_free($parser); log_app("AtomParser->parse()",trim($contents)); return true; } function start_element($parser, $name, $attrs) { $tag = array_pop(split(":", $name)); array_unshift($this->ns_contexts, $this->ns_decls); $this->depth++; #print str_repeat(" ", $this->depth * $this->indent) . "start_element('$name')" ."\n"; #print str_repeat(" ", $this->depth+1 * $this->indent) . print_r($this->ns_contexts,true) ."\n"; if(!empty($this->in_content)) { $attrs_prefix = array(); // resolve prefixes for attributes foreach($attrs as $key => $value) { $attrs_prefix[$this->ns_to_prefix($key)] = $this->xml_escape($value); } $attrs_str = join(' ', array_map($this->map_attrs_func, array_keys($attrs_prefix), array_values($attrs_prefix))); if(strlen($attrs_str) > 0) { $attrs_str = " " . $attrs_str; } $xmlns_str = join(' ', array_map($this->map_xmlns_func, array_keys($this->ns_contexts[0]), array_values($this->ns_contexts[0]))); if(strlen($xmlns_str) > 0) { $xmlns_str = " " . $xmlns_str; } // handle self-closing tags (case: a new child found right-away, no text node) if(count($this->in_content) == 2) { array_push($this->in_content, ">"); } array_push($this->in_content, "<". $this->ns_to_prefix($name) ."{$xmlns_str}{$attrs_str}"); } else if(in_array($tag, $this->ATOM_CONTENT_ELEMENTS) || in_array($tag, $this->ATOM_SIMPLE_ELEMENTS)) { $this->in_content = array(); $this->is_xhtml = $attrs['type'] == 'xhtml'; array_push($this->in_content, array($tag,$this->depth)); } else if($tag == 'link') { array_push($this->entry->links, $attrs); } else if($tag == 'category') { array_push($this->entry->categories, $attrs); } $this->ns_decls = array(); } function end_element($parser, $name) { $tag = array_pop(split(":", $name)); if(!empty($this->in_content)) { if($this->in_content[0][0] == $tag && $this->in_content[0][1] == $this->depth) { array_shift($this->in_content); if($this->is_xhtml) { $this->in_content = array_slice($this->in_content, 2, count($this->in_content)-3); } $this->entry->$tag = join('',$this->in_content); $this->in_content = array(); } else { $endtag = $this->ns_to_prefix($name); if (strpos($this->in_content[count($this->in_content)-1], '<' . $endtag) != false) { array_push($this->in_content, "/>"); } else { array_push($this->in_content, ""); } } } array_shift($this->ns_contexts); #print str_repeat(" ", $this->depth * $this->indent) . "end_element('$name')" ."\n"; $this->depth--; } function start_ns($parser, $prefix, $uri) { #print str_repeat(" ", $this->depth * $this->indent) . "starting: " . $prefix . ":" . $uri . "\n"; array_push($this->ns_decls, array($prefix,$uri)); } function end_ns($parser, $prefix) { #print str_repeat(" ", $this->depth * $this->indent) . "ending: #" . $prefix . "#\n"; } function cdata($parser, $data) { #print str_repeat(" ", $this->depth * $this->indent) . "data: #" . $data . "#\n"; if(!empty($this->in_content)) { // handle self-closing tags (case: text node found, need to close element started) if (strpos($this->in_content[count($this->in_content)-1], '<') != false) { array_push($this->in_content, ">"); } array_push($this->in_content, $this->xml_escape($data)); } } function _default($parser, $data) { # when does this gets called? } function ns_to_prefix($qname) { $components = split(":", $qname); $name = array_pop($components); if(!empty($components)) { $ns = join(":",$components); foreach($this->ns_contexts as $context) { foreach($context as $mapping) { if($mapping[1] == $ns && strlen($mapping[0]) > 0) { return "$mapping[0]:$name"; } } } } return $name; } function xml_escape($string) { return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $string ); } } class AtomServer { var $ATOM_CONTENT_TYPE = 'application/atom+xml'; var $CATEGORIES_CONTENT_TYPE = 'application/atomcat+xml'; var $INTROSPECTION_CONTENT_TYPE = 'application/atomserv+xml'; var $ENTRIES_PATH = "posts"; var $CATEGORIES_PATH = "categories"; var $MEDIA_PATH = "attachments"; var $ENTRY_PATH = "post"; var $MEDIA_SINGLE_PATH = "attachment"; var $params = array(); var $script_name = "wp-app.php"; var $media_content_types = array('image/*','audio/*','video/*'); var $atom_content_types = array('application/atom+xml'); var $selectors = array(); // support for head var $do_output = true; function AtomServer() { $this->script_name = array_pop(explode('/',$_SERVER['SCRIPT_NAME'])); $this->selectors = array( '@/service@' => array('GET' => 'get_service'), '@/categories@' => array('GET' => 'get_categories_xml'), '@/post/(\d+)@' => array('GET' => 'get_post', 'PUT' => 'put_post', 'DELETE' => 'delete_post'), '@/posts/?([^/]+)?@' => array('GET' => 'get_posts', 'POST' => 'create_post'), '@/attachments/?(\d+)?@' => array('GET' => 'get_attachment', 'POST' => 'create_attachment'), '@/attachment/file/(\d+)@' => array('GET' => 'get_file', 'PUT' => 'put_file', 'DELETE' => 'delete_file'), '@/attachment/(\d+)@' => array('GET' => 'get_attachment', 'PUT' => 'put_attachment', 'DELETE' => 'delete_attachment'), ); } function handle_request() { $path = $_SERVER['PATH_INFO']; $method = $_SERVER['REQUEST_METHOD']; log_app('REQUEST',"$method $path\n"); //$this->process_conditionals(); // exception case for HEAD (treat exactly as GET, but don't output) if($method == 'HEAD') { $this->do_output = false; $method = 'GET'; } // lame. if(strlen($path) == 0 || $path == '/') { $path = '/service'; } // authenticate regardless of the operation and set the current // user. each handler will decide if auth is required or not. $this->authenticate(); // dispatch foreach($this->selectors as $regex => $funcs) { if(preg_match($regex, $path, $matches)) { if(isset($funcs[$method])) { array_shift($matches); call_user_func_array(array(&$this,$funcs[$method]), $matches); exit(); } else { // only allow what we have handlers for... $this->not_allowed(array_keys($funcs)); } } } // oops, nothing found $this->not_found(); } function get_service() { log_app('function','get_service()'); $entries_url = $this->get_entries_url(); $categories_url = $this->get_categories_url(); $media_url = $this->get_attachments_url(); $accepted_content_types = join(',',$this->media_content_types); $introspection = << WordPress Posts entry WordPress Media $accepted_content_types EOD; $this->output($introspection, $this->INTROSPECTION_CONTENT_TYPE); } function get_categories_xml() { log_app('function','get_categories_xml()'); $home = get_bloginfo_rss('home'); $categories = ""; $cats = get_categories("hierarchical=0&hide_empty=0"); foreach ((array) $cats as $cat) { $categories .= " cat_name) . "\" />\n"; } $output = << $categories EOD; $this->output($output, $this->CATEGORIES_CONTENT_TYPE); } /* * Create Post (No arguments) */ function create_post() { global $blog_id; $this->get_accepted_content_type($this->atom_content_types); $parser = new AtomParser(); if(!$parser->parse()) { $this->client_error(); } $entry = $parser->entry; $publish = (isset($entry->draft) && trim($entry->draft) == 'yes') ? false : true; $cap = ($publish) ? 'publish_posts' : 'edit_posts'; if(!current_user_can($cap)) $this->auth_required('Sorry, you do not have the right to edit/publish new posts.'); $blog_ID = (int ) $blog_id; $post_status = ($publish) ? 'publish' : 'draft'; $post_author = (int) $user->ID; $post_title = $entry->title; $post_content = $entry->content; $post_excerpt = $entry->summary; $post_date = current_time('mysql'); $post_date_gmt = current_time('mysql', 1); $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); log_app('Inserting Post. Data:', print_r($post_data,true)); $postID = wp_insert_post($post_data); if (!$postID) { $this->internal_error('Sorry, your entry could not be posted. Something wrong happened.'); } $output = $this->get_entry($postID); log_app('function',"create_post($postID)"); $this->created($postID, $output); } function get_post($postID) { global $entry; $this->set_current_entry($postID); $output = $this->get_entry($postID); log_app('function',"get_post($postID)"); $this->output($output); } function put_post($postID) { // checked for valid content-types (atom+xml) // quick check and exit $this->get_accepted_content_type($this->atom_content_types); $parser = new AtomParser(); if(!$parser->parse()) { $this->bad_request(); } $parsed = $parser->entry; // check for not found global $entry; $entry = $GLOBALS['entry']; $this->set_current_entry($postID); $this->escape($GLOBALS['entry']); if(!current_user_can('edit_post', $entry['ID'])) $this->auth_required('Sorry, you do not have the right to edit this post.'); $publish = (isset($parsed->draft) && trim($parsed->draft) == 'yes') ? false : true; extract($entry); $post_title = $parsed->title; $post_content = $parsed->content; $post_excerpt = $parsed->summary; // let's not go backwards and make something draft again. if(!$publish && $post_status == 'draft') { $post_status = ($publish) ? 'publish' : 'draft'; } $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); $result = wp_update_post($postdata); if (!$result) { $this->internal_error('For some strange yet very annoying reason, this post could not be edited.'); } log_app('function',"put_post($postID)"); $this->ok(); } function delete_post($postID) { // check for not found global $entry; $this->set_current_entry($postID); if(!current_user_can('edit_post', $postID)) { $this->auth_required('Sorry, you do not have the right to delete this post.'); } if ($entry['post_type'] == 'attachment') { $this->delete_attachment($postID); } else { $result = wp_delete_post($postID); if (!$result) { $this->internal_error('For some strange yet very annoying reason, this post could not be deleted.'); } log_app('function',"delete_post($postID)"); $this->ok(); } } function get_attachment($postID = NULL) { global $entry; if (!isset($postID)) { $this->get_attachments(); } else { $this->set_current_entry($postID); $output = $this->get_entry($postID, 'attachment'); log_app('function',"get_attachment($postID)"); $this->output($output); } } function create_attachment() { global $wp, $wpdb, $wp_query, $blog_id; $type = $this->get_accepted_content_type(); if(!current_user_can('upload_files')) $this->auth_required('You do not have permission to upload files.'); $fp = fopen("php://input", "rb"); $bits = NULL; while(!feof($fp)) { $bits .= fread($fp, 4096); } fclose($fp); $slug = ''; if ( isset( $_SERVER['HTTP_SLUG'] ) ) $slug = sanitize_file_name( $_SERVER['HTTP_SLUG'] ); elseif ( isset( $_SERVER['HTTP_TITLE'] ) ) $slug = sanitize_file_name( $_SERVER['HTTP_TITLE'] ); elseif ( empty( $slug ) ) // just make a random name $slug = substr( md5( uniqid( microtime() ) ), 0, 7); $ext = preg_replace( '|.*/([a-z]+)|', '$1', $_SERVER['CONTENT_TYPE'] ); $slug = "$slug.$ext"; $file = wp_upload_bits( $slug, NULL, $bits); log_app('wp_upload_bits returns:',print_r($file,true)); $url = $file['url']; $file = $file['file']; $filename = basename($file); $header = apply_filters('wp_create_file_in_uploads', $file); // replicate // Construct the attachment array $attachment = array( 'post_title' => $slug, 'post_content' => $slug, 'post_status' => 'attachment', 'post_parent' => 0, 'post_mime_type' => $type, 'guid' => $url ); // Save the data $postID = wp_insert_attachment($attachment, $file, $post); if (!$postID) { $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); } $output = $this->get_entry($postID, 'attachment'); $this->created($postID, $output, 'attachment'); log_app('function',"create_attachment($postID)"); } function put_attachment($postID) { // checked for valid content-types (atom+xml) // quick check and exit $this->get_accepted_content_type($this->atom_content_types); $parser = new AtomParser(); if(!$parser->parse()) { $this->bad_request(); } $parsed = $parser->entry; // check for not found global $entry; $this->set_current_entry($postID); $this->escape($entry); if(!current_user_can('edit_post', $entry['ID'])) $this->auth_required(__('Sorry, you do not have the right to edit this post.')); $publish = (isset($parsed->draft) && trim($parsed->draft) == 'yes') ? false : true; extract($entry); $post_title = $parsed->title; $post_content = $parsed->content; $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); $result = wp_update_post($postdata); if (!$result) { $this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.')); } log_app('function',"put_attachment($postID)"); $this->ok(); } function delete_attachment($postID) { log_app('function',"delete_attachment($postID). File '$location' deleted."); // check for not found global $entry; $this->set_current_entry($postID); if(!current_user_can('edit_post', $postID)) { $this->auth_required(__('Sorry, you do not have the right to delete this post.')); } $location = get_post_meta($entry['ID'], '_wp_attached_file', true); // delete file @unlink($location); // delete attachment $result = wp_delete_post($postID); if (!$result) { $this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.')); } log_app('function',"delete_attachment($postID). File '$location' deleted."); $this->ok(); } function get_file($postID) { // check for not found global $entry; $this->set_current_entry($postID); // then whether user can edit the specific post if(!current_user_can('edit_post', $postID)) { $this->auth_required(__('Sorry, you do not have the right to edit this post.')); } $location = get_post_meta($entry['ID'], '_wp_attached_file', true); $filetype = wp_check_filetype($location); if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext'])) $this->internal_error(__('Error ocurred while accessing post metadata for file location.')); header('Content-Type: ' . $entry['post_mime_type']); $fp = fopen($location, "rb"); while(!feof($fp)) { echo fread($fp, 4096); } fclose($fp); log_app('function',"get_file($postID)"); $this->ok(); } function put_file($postID) { $type = $this->get_accepted_content_type(); // first check if user can upload if(!current_user_can('upload_files')) $this->auth_required(__('You do not have permission to upload files.')); // check for not found global $entry; $this->set_current_entry($postID); // then whether user can edit the specific post if(!current_user_can('edit_post', $postID)) { $this->auth_required(__('Sorry, you do not have the right to edit this post.')); } $location = get_post_meta($entry['ID'], '_wp_attached_file', true); $filetype = wp_check_filetype($location); if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext'])) $this->internal_error(__('Error ocurred while accessing post metadata for file location.')); $fp = fopen("php://input", "rb"); $localfp = fopen($location, "w+"); while(!feof($fp)) { fwrite($localfp,fread($fp, 4096)); } fclose($fp); fclose($localfp); log_app('function',"put_file($postID)"); $this->ok(); } function get_entries_url($page = NULL) { global $use_querystring; $url = get_bloginfo('url') . '/' . $this->script_name; if ($use_querystring) { $url .= '?action=/' . $this->ENTRIES_PATH; if(isset($page) && is_int($page)) { $url .= "&eid=$page"; } } else { $url .= '/' . $this->ENTRIES_PATH; if(isset($page) && is_int($page)) { $url .= "/$page"; } } return $url; } function the_entries_url($page = NULL) { $url = $this->get_entries_url($page); echo $url; } function get_categories_url($page = NULL) { global $use_querystring; $url = get_bloginfo('url') . '/' . $this->script_name; if ($use_querystring) { $url .= '?action=/' . $this->CATEGORIES_PATH; } else { $url .= '/' . $this->CATEGORIES_PATH; } return $url; } function the_categories_url() { $url = $this->get_categories_url(); echo $url; } function get_attachments_url($page = NULL) { global $use_querystring; $url = get_bloginfo('url') . '/' . $this->script_name; if ($use_querystring) { $url .= '?action=/' . $this->MEDIA_PATH; if(isset($page) && is_int($page)) { $url .= "&eid=$page"; } } else { $url .= '/' . $this->MEDIA_PATH; if(isset($page) && is_int($page)) { $url .= "/$page"; } } return $url; } function the_attachments_url($page = NULL) { $url = $this->get_attachments_url($page); echo $url; } function get_entry_url($postID = NULL) { global $use_querystring; if(!isset($postID)) { global $post; $postID = (int) $GLOBALS['post']->ID; } if ($use_querystring) { $url = get_bloginfo('url') . '/' . $this->script_name . '?action=/' . $this->ENTRY_PATH . "&eid=$postID"; } else { $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->ENTRY_PATH . "/$postID"; } log_app('function',"get_entry_url() = $url"); return $url; } function the_entry_url($postID = NULL) { $url = $this->get_entry_url($postID); echo $url; } function get_media_url($postID = NULL) { global $use_querystring; if(!isset($postID)) { global $post; $postID = (int) $GLOBALS['post']->ID; } if ($use_querystring) { $url = get_bloginfo('url') . '/' . $this->script_name . '?action=/' . $this->MEDIA_SINGLE_PATH ."&eid=$postID"; } else { $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->MEDIA_SINGLE_PATH ."/$postID"; } log_app('function',"get_media_url() = $url"); return $url; } function the_media_url($postID = NULL) { $url = $this->get_media_url($postID); echo $url; } function set_current_entry($postID) { global $entry; log_app('function',"set_current_entry($postID)"); if(!isset($postID)) { // $this->bad_request(); $this->not_found(); } $entry = wp_get_single_post($postID,ARRAY_A); if(!isset($entry) || !isset($entry['ID'])) $this->not_found(); return; } function get_posts_count() { global $wpdb; log_app('function',"get_posts_count()"); return $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_date_gmt < '" . gmdate("Y-m-d H:i:s",time()) . "'"); } function get_posts($page = 1, $post_type = 'post') { log_app('function',"get_posts($page, '$post_type')"); $feed = $this->get_feed($page, $post_type); $this->output($feed); } function get_attachments($page = 1, $post_type = 'attachment') { log_app('function',"get_attachments($page, '$post_type')"); $feed = $this->get_feed($page, $post_type); $this->output($feed); } function get_feed($page = 1, $post_type = 'post') { global $post, $wp, $wp_query, $posts, $wpdb, $blog_id, $post_cache; log_app('function',"get_feed($page, '$post_type')"); ob_start(); if(!isset($page)) { $page = 1; } $page = (int) $page; $count = get_option('posts_per_rss'); $query = "paged=$page&posts_per_page=$count&order=DESC"; if($post_type == 'attachment') { $query .= "&post_type=$post_type"; } query_posts($query); $post = $GLOBALS['post']; $posts = $GLOBALS['posts']; $wp = $GLOBALS['wp']; $wp_query = $GLOBALS['wp_query']; $wpdb = $GLOBALS['wpdb']; $blog_id = (int) $GLOBALS['blog_id']; $post_cache = $GLOBALS['post_cache']; $total_count = $this->get_posts_count(); $last_page = (int) ceil($total_count / $count); $next_page = (($page + 1) > $last_page) ? NULL : $page + 1; $prev_page = ($page - 1) < 1 ? NULL : $page - 1; $last_page = ((int)$last_page == 1 || (int)$last_page == 0) ? NULL : (int) $last_page; ?> the_entries_url() ?> <?php bloginfo_rss('name') ?> Copyright WordPress.com Atom API ID); ?> <![CDATA[<?php the_title() ?>]]> post_status == 'draft' ? 'yes' : 'no') ?> post_status == 'attachment') { ?> ]]> post_content ) ) : ?> ]]> ID); ?> <![CDATA[<?php the_title_rss() ?>]]> post_status == 'draft' ? 'yes' : 'no') ?> post_type == 'attachment') { ?> ]]> post_content ) ) : ?> ]]> auth_required(__("Access Denied.")); endif; ob_end_clean(); log_app('get_entry returning:',$entry); return $entry; } function ok() { log_app('Status','200: OK'); header('Content-Type: text/plain'); status_header('200'); exit; } function no_content() { log_app('Status','204: No Content'); header('Content-Type: text/plain'); status_header('204'); echo "Deleted."; exit; } function internal_error($msg = 'Internal Server Error') { log_app('Status','500: Server Error'); header('Content-Type: text/plain'); status_header('500'); echo $msg; exit; } function bad_request() { log_app('Status','400: Bad Request'); header('Content-Type: text/plain'); status_header('400'); exit; } function length_required() { log_app('Status','411: Length Required'); header("HTTP/1.1 411 Length Required"); header('Content-Type: text/plain'); status_header('411'); exit; } function invalid_media() { log_app('Status','415: Unsupported Media Type'); header("HTTP/1.1 415 Unsupported Media Type"); header('Content-Type: text/plain'); exit; } function not_found() { log_app('Status','404: Not Found'); header('Content-Type: text/plain'); status_header('404'); exit; } function not_allowed($allow) { log_app('Status','405: Not Allowed'); header('Allow: ' . join(',', $allow)); status_header('405'); exit; } function client_error($msg = 'Client Error') { log_app('Status','400: Client Errir'); header('Content-Type: text/plain'); status_header('400'); exit; } function created($post_ID, $content, $post_type = 'post') { global $use_querystring; log_app('created()::$post_ID',"$post_ID, $post_type"); $edit = $this->get_entry_url($post_ID); switch($post_type) { case 'post': $ctloc = $this->get_entry_url($post_ID); break; case 'attachment': if ($use_querystring) { $edit = get_bloginfo('url') . '/' . $this->script_name . "?action=/attachments&eid=$post_ID"; } else { $edit = get_bloginfo('url') . '/' . $this->script_name . "/attachments/$post_ID"; } break; } header('Content-Type: application/atom+xml'); if(isset($ctloc)) header('Content-Location: ' . $ctloc); header('Location: ' . $edit); status_header('201'); echo $content; exit; } function auth_required($msg) { log_app('Status','401: Auth Required'); nocache_headers(); header('WWW-Authenticate: Basic realm="WordPress Atom Protocol"'); header('WWW-Authenticate: Form action="' . get_option('siteurl') . '/wp-login.php"', false); header("HTTP/1.1 401 $msg"); header('Status: ' . $msg); header('Content-Type: plain/text'); echo $msg; exit; } function output($xml, $ctype = "application/atom+xml") { status_header('200'); $xml = ''."\n".$xml; header('Connection: close'); header('Content-Length: '. strlen($xml)); header('Content-Type: ' . $ctype); header('Content-Disposition: attachment; filename=atom.xml'); header('Date: '. date('r')); if($this->do_output) echo $xml; log_app('function', "output:\n$xml"); exit; } function escape(&$array) { global $wpdb; foreach ($array as $k => $v) { if (is_array($v)) { $this->escape($array[$k]); } else if (is_object($v)) { //skip } else { $array[$k] = $wpdb->escape($v); } } } /* * Access credential through various methods and perform login */ function authenticate() { $login_data = array(); $already_md5 = false; log_app("authenticate()",print_r($_ENV, true)); // if using mod_rewrite/ENV hack // http://www.besthostratings.com/articles/http-auth-php-cgi.html if(isset($_SERVER['HTTP_AUTHORIZATION'])) { list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); } // If Basic Auth is working... if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { $login_data = array('login' => $_SERVER['PHP_AUTH_USER'], 'password' => $_SERVER['PHP_AUTH_PW']); } else { // else, do cookie-based authentication if (function_exists('wp_get_cookie_login')) { $login_data = wp_get_cookie_login(); $already_md5 = true; } } // call wp_login and set current user if (!empty($login_data) && wp_login($login_data['login'], $login_data['password'], $already_md5)) { $current_user = new WP_User(0, $login_data['login']); wp_set_current_user($current_user->ID); log_app("authenticate()",$login_data['login']); } } function get_accepted_content_type($types = NULL) { if(!isset($types)) { $types = $this->media_content_types; } if(!isset($_SERVER['CONTENT_LENGTH']) || !isset($_SERVER['CONTENT_TYPE'])) { $this->length_required(); } $type = $_SERVER['CONTENT_TYPE']; list($type,$subtype) = explode('/',$type); list($subtype) = explode(";",$subtype); // strip MIME parameters log_app("get_accepted_content_type", "type=$type, subtype=$subtype"); foreach($types as $t) { list($acceptedType,$acceptedSubtype) = explode('/',$t); if($acceptedType == '*' || $acceptedType == $type) { if($acceptedSubtype == '*' || $acceptedSubtype == $subtype) return $type; } } $this->invalid_media(); } function process_conditionals() { if(empty($this->params)) return; if($_SERVER['REQUEST_METHOD'] == 'DELETE') return; switch($this->params[0]) { case $this->ENTRY_PATH: global $post; $post = wp_get_single_post($this->params[1]); $wp_last_modified = get_post_modified_time('D, d M Y H:i:s', true); $post = NULL; break; case $this->ENTRIES_PATH: $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; break; default: return; } $wp_etag = md5($wp_last_modified); @header("Last-Modified: $wp_last_modified"); @header("ETag: $wp_etag"); // Support for Conditional GET if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) $client_etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']); else $client_etag = false; $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']); // If string is empty, return 0. If not, attempt to parse into a timestamp $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; // Make a timestamp for our most recent modification... $wp_modified_timestamp = strtotime($wp_last_modified); if ( ($client_last_modified && $client_etag) ? (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { status_header( 304 ); exit; } } } $server = new AtomServer(); $server->handle_request(); ?> -wordpress/.svn/text-base/wp-atom.php.svn-base4wordpress/.svn/text-base/wp-blog-header.php.svn-basewp-config.php file. I need this before we can get started. Need more help? We got it. You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file.", "WordPress › Error"); } $wp_did_header = true; require_once( dirname(__FILE__) . '/wp-config.php'); wp(); gzip_compression(); require_once(ABSPATH . WPINC . '/template-loader.php'); endif; ?> 6wordpress/.svn/text-base/wp-comments-post.php.svn-base Yget_row("SELECT post_status, comment_status FROM $wpdb->posts WHERE ID = ". $comment_post_ID); if ( empty($status->comment_status) ) { do_action('comment_id_not_found', $comment_post_ID); exit; } elseif ( 'closed' == $status->comment_status ) { do_action('comment_closed', $comment_post_ID); wp_die( __('Sorry, comments are closed for this item.') ); } elseif ( 'draft' == $status->post_status ) { do_action('comment_on_draft', $comment_post_ID); exit; } $comment_author = trim(strip_tags($_POST['author'])); $comment_author_email = trim($_POST['email']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['comment']); // If the user is logged in $user = wp_get_current_user(); if ( $user->ID ) { $comment_author = $wpdb->escape($user->display_name); $comment_author_email = $wpdb->escape($user->user_email); $comment_author_url = $wpdb->escape($user->user_url); if ( current_user_can('unfiltered_html') ) { if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) { kses_remove_filters(); // start with a clean slate kses_init_filters(); // set up the filters } } } else { if ( get_option('comment_registration') ) wp_die( __('Sorry, you must be logged in to post a comment.') ); } $comment_type = ''; if ( get_option('require_name_email') && !$user->ID ) { if ( 6 > strlen($comment_author_email) || '' == $comment_author ) wp_die( __('Error: please fill the required fields (name, email).') ); elseif ( !is_email($comment_author_email)) wp_die( __('Error: please enter a valid email address.') ); } if ( '' == $comment_content ) wp_die( __('Error: please type a comment.') ); $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID'); $comment_id = wp_new_comment( $commentdata ); $comment = get_comment($comment_id); if ( !$user->ID ) : setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_url_' . COOKIEHASH, clean_url($comment->comment_author_url), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); endif; $location = ( empty($_POST['redirect_to']) ? get_permalink($comment_post_ID) : $_POST['redirect_to'] ) . '#comment-' . $comment_id; $location = apply_filters('comment_post_redirect', $location, $comment); wp_redirect($location); ?> 5wordpress/.svn/text-base/wp-commentsrss2.php.svn-base/wordpress/.svn/text-base/wp-config.php.svn-baseY 6wordpress/.svn/text-base/wp-config-sample.php.svn-base -wordpress/.svn/text-base/wp-cron.php.svn-baseQ time() ) exit; update_option('doing_cron', time() + 30); $crons = _get_cron_array(); $keys = array_keys($crons); if (!is_array($crons) || $keys[0] > time()) return; foreach ($crons as $timestamp => $cronhooks) { if ($timestamp > time()) break; foreach ($cronhooks as $hook => $keys) { foreach ($keys as $key => $args) { $schedule = $args['schedule']; if ($schedule != false) { $new_args = array($timestamp, $schedule, $hook, $args['args']); call_user_func_array('wp_reschedule_event', $new_args); } wp_unschedule_event($timestamp, $hook, $args['args']); do_action_ref_array($hook, $args['args']); } } } update_option('doing_cron', 0); ?> -wordpress/.svn/text-base/wp-feed.php.svn-basex 3wordpress/.svn/text-base/wp-links-opml.php.svn-base\n"; ?> Links for <?php echo attribute_escape(get_bloginfo('name').$cat_name); ?> GMT cat_name); ?> cat_ID}"); foreach ((array) $bookmarks as $bookmark) { $title = attribute_escape(apply_filters('link_title', $bookmark->link_name)); ?> .wordpress/.svn/text-base/wp-login.php.svn-base> > <?php bloginfo('name'); ?> › <?php echo $title; ?> text_direction) ) : ?>

\n"; $errors = $newerrors; } echo '
' . apply_filters('login_errors', $errors) . "
\n"; } } // End of login_header() switch ($action) { case 'logout' : wp_clearcookie(); do_action('wp_logout'); $redirect_to = 'wp-login.php?loggedout=true'; if ( isset( $_REQUEST['redirect_to'] ) ) $redirect_to = $_REQUEST['redirect_to']; wp_redirect($redirect_to); exit(); break; case 'lostpassword' : case 'retrievepassword' : $user_login = ''; $user_pass = ''; if ( $_POST ) { if ( empty( $_POST['user_login'] ) ) $errors['user_login'] = __('ERROR: The username field is empty.'); if ( empty( $_POST['user_email'] ) ) $errors['user_email'] = __('ERROR: The e-mail field is empty.'); do_action('lostpassword_post'); if ( empty( $errors ) ) { $user_data = get_userdatabylogin(trim($_POST['user_login'])); // redefining user_login ensures we return the right case in the email $user_login = $user_data->user_login; $user_email = $user_data->user_email; if (!$user_email || $user_email != $_POST['user_email']) { $errors['invalidcombo'] = __('ERROR: Invalid username / e-mail combination.'); } else { do_action('retreive_password', $user_login); // Misspelled and deprecated do_action('retrieve_password', $user_login); // Generate something random for a password... md5'ing current time with a rand salt $key = substr( md5( uniqid( microtime() ) ), 0, 8); // Now insert the new pass md5'd into the db $wpdb->query("UPDATE $wpdb->users SET user_activation_key = '$key' WHERE user_login = '$user_login'"); $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n"; $message .= get_option('siteurl') . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= get_option('siteurl') . "/wp-login.php?action=rp&key=$key\r\n"; if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message)) { die('

' . __('The e-mail could not be sent.') . "
\n" . __('Possible reason: your host may have disabled the mail() function...') . '

'); } else { wp_redirect('wp-login.php?checkemail=confirm'); exit(); } } } } if ( 'invalidkey' == $_GET['error'] ) $errors['invalidkey'] = __('Sorry, that key does not appear to be valid.'); do_action('lost_password'); login_header(__('Lost Password'), '

' . __('Please enter your username and e-mail address. You will receive a new password via e-mail.') . '

'); ?>

get_row("SELECT * FROM $wpdb->users WHERE user_activation_key = '$key'"); if ( empty( $user ) ) { wp_redirect('wp-login.php?action=lostpassword&error=invalidkey'); exit(); } do_action('password_reset'); // Generate something random for a password... md5'ing current time with a rand salt $new_pass = substr( md5( uniqid( microtime() ) ), 0, 7); $wpdb->query("UPDATE $wpdb->users SET user_pass = MD5('$new_pass'), user_activation_key = '' WHERE user_login = '$user->user_login'"); wp_cache_delete($user->ID, 'users'); wp_cache_delete($user->user_login, 'userlogins'); $message = sprintf(__('Username: %s'), $user->user_login) . "\r\n"; $message .= sprintf(__('Password: %s'), $new_pass) . "\r\n"; $message .= get_option('siteurl') . "/wp-login.php\r\n"; if (FALSE == wp_mail($user->user_email, sprintf(__('[%s] Your new password'), get_option('blogname')), $message)) { die('

' . __('The e-mail could not be sent.') . "
\n" . __('Possible reason: your host may have disabled the mail() function...') . '

'); } else { // send a copy of password change notification to the admin // but check to see if it's the admin whose password we're changing, and skip this if ($user->user_email != get_option('admin_email')) { $message = sprintf(__('Password Lost and Changed for user: %s'), $user->user_login) . "\r\n"; wp_mail(get_option('admin_email'), sprintf(__('[%s] Password Lost/Changed'), get_option('blogname')), $message); } wp_redirect('wp-login.php?checkemail=newpass'); exit(); } break; case 'register' : if ( FALSE == get_option('users_can_register') ) { wp_redirect('wp-login.php?registration=disabled'); exit(); } if ( $_POST ) { require_once( ABSPATH . WPINC . '/registration.php'); $user_login = sanitize_user( $_POST['user_login'] ); $user_email = apply_filters( 'user_registration_email', $_POST['user_email'] ); // Check the username if ( $user_login == '' ) $errors['user_login'] = __('ERROR: Please enter a username.'); elseif ( !validate_username( $user_login ) ) { $errors['user_login'] = __('ERROR: This username is invalid. Please enter a valid username.'); $user_login = ''; } elseif ( username_exists( $user_login ) ) $errors['user_login'] = __('ERROR: This username is already registered, please choose another one.'); // Check the e-mail address if ($user_email == '') { $errors['user_email'] = __('ERROR: Please type your e-mail address.'); } elseif ( !is_email( $user_email ) ) { $errors['user_email'] = __('ERROR: The email address isn’t correct.'); $user_email = ''; } elseif ( email_exists( $user_email ) ) $errors['user_email'] = __('ERROR: This email is already registered, please choose another one.'); do_action('register_post'); $errors = apply_filters( 'registration_errors', $errors ); if ( empty( $errors ) ) { $user_pass = substr( md5( uniqid( microtime() ) ), 0, 7); $user_id = wp_create_user( $user_login, $user_pass, $user_email ); if ( !$user_id ) $errors['registerfail'] = sprintf(__('ERROR: Couldn’t register you... please contact the webmaster !'), get_option('admin_email')); else { wp_new_user_notification($user_id, $user_pass); wp_redirect('wp-login.php?checkemail=registered'); exit(); } } } login_header(__('Registration Form'), '

' . __('Register For This Site') . '

'); ?>

has_cap('edit_posts') && ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' ) ) $redirect_to = get_option('siteurl') . '/wp-admin/profile.php'; if ( wp_login($user_login, $user_pass, $using_cookie) ) { if ( !$using_cookie ) wp_setcookie($user_login, $user_pass, false, '', '', $rememberme); do_action('wp_login', $user_login); // printf (__FILE__ . "Point last ". $redirect_to."\n"); wp_redirect($redirect_to); exit(); } else { if ( $using_cookie ) $errors['expiredsession'] = __('Your session has expired.'); } } if ( $_POST && empty( $user_login ) ) $errors['user_login'] = __('ERROR: The username field is empty.'); if ( $_POST && empty( $user_pass ) ) $errors['user_pass'] = __('ERROR: The password field is empty.'); // Some parts of this script use the main login form to display a message if ( TRUE == $_GET['loggedout'] ) $errors['loggedout'] = __('Successfully logged you out.'); elseif ( 'disabled' == $_GET['registration'] ) $errors['registerdiabled'] = __('User registration is currently not allowed.'); elseif ( 'confirm' == $_GET['checkemail'] ) $errors['confirm'] = __('Check your e-mail for the confirmation link.'); elseif ( 'newpass' == $_GET['checkemail'] ) $errors['newpass'] = __('Check your e-mail for your new password.'); elseif ( 'registered' == $_GET['checkemail'] ) $errors['registered'] = __('Registration complete. Please check your e-mail.'); login_header(__('Login')); ?>

-wordpress/.svn/text-base/wp-mail.php.svn-base4connect(get_option('mailserver_url'), get_option('mailserver_port'))) wp_die($pop3->ERROR); $count = $pop3->login(get_option('mailserver_login'), get_option('mailserver_pass')); if (0 == $count) wp_die(__('There doesn’t seem to be any new mail.')); for ($i=1; $i <= $count; $i++) : $message = $pop3->get($i); $content = ''; $content_type = ''; $content_transfer_encoding = ''; $boundary = ''; $bodysignal = 0; $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); foreach ($message as $line) : if (strlen($line) < 3) $bodysignal = 1; if ($bodysignal) { $content .= $line; } else { if (preg_match('/Content-Type: /i', $line)) { $content_type = trim($line); $content_type = substr($content_type, 14, strlen($content_type)-14); $content_type = explode(';', $content_type); $content_type = $content_type[0]; } if (preg_match('/Content-Transfer-Encoding: /i', $line)) { $content_transfer_encoding = trim($line); $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding)-14); $content_transfer_encoding = explode(';', $content_transfer_encoding); $content_transfer_encoding = $content_transfer_encoding[0]; } if (($content_type == 'multipart/alternative') && (preg_match('/boundary="/', $line)) && ($boundary == '')) { $boundary = trim($line); $boundary = explode('"', $boundary); $boundary = $boundary[1]; } if (preg_match('/Subject: /i', $line)) { $subject = trim($line); $subject = substr($subject, 9, strlen($subject)-9); $subject = wp_iso_descrambler($subject); // Captures any text in the subject before $phone_delim as the subject $subject = explode($phone_delim, $subject); $subject = $subject[0]; } // Set the author using the email address (To or Reply-To, the last used) // otherwise use the site admin if (preg_match('/From: /', $line) | preg_match('/Reply-To: /', $line)) { $author=trim($line); if ( ereg("([a-zA-Z0-9\_\-\.]+@[\a-zA-z0-9\_\-\.]+)", $author , $regs) ) { $author = $regs[1]; echo "Author = {$author}

"; $author = $wpdb->escape($author); $result = $wpdb->get_row("SELECT ID FROM $wpdb->users WHERE user_email='$author' LIMIT 1"); if (!$result) $post_author = 1; else $post_author = $result->ID; } else $post_author = 1; } if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37' $ddate = trim($line); $ddate = str_replace('Date: ', '', $ddate); if (strpos($ddate, ',')) { $ddate = trim(substr($ddate, strpos($ddate, ',')+1, strlen($ddate))); } $date_arr = explode(' ', $ddate); $date_time = explode(':', $date_arr[3]); $ddate_H = $date_time[0]; $ddate_i = $date_time[1]; $ddate_s = $date_time[2]; $ddate_m = $date_arr[1]; $ddate_d = $date_arr[0]; $ddate_Y = $date_arr[2]; for ($j=0; $j<12; $j++) { if ($ddate_m == $dmonths[$j]) { $ddate_m = $j+1; } } $time_zn = intval($date_arr[4]) * 36; $ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y); $ddate_U = $ddate_U - $time_zn; $post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference); $post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U); } } endforeach; $subject = trim(str_replace(get_option('subjectprefix'), '', $subject)); if ($content_type == 'multipart/alternative') { $content = explode('--'.$boundary, $content); $content = $content[2]; $content = explode('Content-Transfer-Encoding: quoted-printable', $content); $content = strip_tags($content[1], '


'); } $content = trim($content); if (stripos($content_transfer_encoding, "quoted-printable") != false) { $content = quoted_printable_decode($content); } // Captures any text in the body after $phone_delim as the body $content = explode($phone_delim, $content); $content[1] ? $content = $content[1] : $content = $content[0]; echo "

Content-type: $content_type, Content-Transfer-Encoding: $content_transfer_encoding, boundary: $boundary

\n"; echo "

Raw content:

".$content.'

'; $content = trim($content); $post_content = apply_filters('phone_content', $content); $post_title = xmlrpc_getposttitle($content); if ($post_title == '') $post_title = $subject; if (empty($post_categories)) $post_categories[] = get_option('default_email_category'); $post_category = $post_categories; // or maybe we should leave the choice to email drafts? propose a way $post_status = 'publish'; $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status'); $post_data = add_magic_quotes($post_data); $post_ID = wp_insert_post($post_data); if (!$post_ID) { // we couldn't post, for whatever reason. better move forward to the next email continue; } do_action('publish_phone', $post_ID); echo "\n

Author: $post_author

"; echo "\n

Posted title: $post_title
"; echo "\nPosted content:

".$content.'

'; if(!$pop3->delete($i)) { echo '

Oops '.$pop3->ERROR.'

'; $pop3->reset(); exit; } else { echo "

Mission complete, message $i deleted.

"; } endfor; $pop3->quit(); ?> -wordpress/.svn/text-base/wp-pass.php.svn-base#,wordpress/.svn/text-base/wp-rdf.php.svn-base1wordpress/.svn/text-base/wp-register.php.svn-base-wordpress/.svn/text-base/wp-rss2.php.svn-base,wordpress/.svn/text-base/wp-rss.php.svn-base}1wordpress/.svn/text-base/wp-settings.php.svn-base$X $v ) if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) { $GLOBALS[$k] = NULL; unset($GLOBALS[$k]); } } wp_unregister_GLOBALS(); unset( $wp_filter, $cache_userdata, $cache_lastcommentmodified, $cache_lastpostdate, $cache_settings, $category_cache, $cache_categories ); if ( ! isset($blog_id) ) $blog_id = 1; // Fix for IIS, which doesn't set REQUEST_URI if ( empty( $_SERVER['REQUEST_URI'] ) ) { $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME']; // Does this work under CGI? // Append the query string if it exists and isn't null if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; } } // Fix for PHP as CGI hosts that set SCRIPT_FILENAME to something ending in php.cgi for all requests if ( isset($_SERVER['SCRIPT_FILENAME']) && ( strpos($_SERVER['SCRIPT_FILENAME'], 'php.cgi') == strlen($_SERVER['SCRIPT_FILENAME']) - 7 ) ) $_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED']; // Fix for Dreamhost and other PHP as CGI hosts if (strpos($_SERVER['SCRIPT_NAME'], 'php.cgi') != false) unset($_SERVER['PATH_INFO']); // Fix empty PHP_SELF $PHP_SELF = $_SERVER['PHP_SELF']; if ( empty($PHP_SELF) ) $_SERVER['PHP_SELF'] = $PHP_SELF = preg_replace("/(\?.*)?$/",'',$_SERVER["REQUEST_URI"]); if ( !(phpversion() >= '4.2') ) die( 'Your server is running PHP version ' . phpversion() . ' but WordPress requires at least 4.2.' ); if ( !extension_loaded('mysql') && !extension_loaded('odbc') && !file_exists(ABSPATH . 'wp-content/db.php') ) die( 'Your PHP installation appears to be missing the MySQL which is required for WordPress.' ); function timer_start() { global $timestart; $mtime = explode(' ', microtime() ); $mtime = $mtime[1] + $mtime[0]; $timestart = $mtime; return true; } function timer_stop($display = 0, $precision = 3) { //if called like timer_stop(1), will echo $timetotal global $timestart, $timeend; $mtime = microtime(); $mtime = explode(' ',$mtime); $mtime = $mtime[1] + $mtime[0]; $timeend = $mtime; $timetotal = $timeend-$timestart; $r = number_format($timetotal, $precision); if ( $display ) echo $r; return $r; } timer_start(); // Change to E_ALL for development/debugging error_reporting(E_ALL ^ E_NOTICE); // For an advanced caching plugin to use, static because you would only want one if ( defined('WP_CACHE') ) @include ABSPATH . 'wp-content/advanced-cache.php'; define('WPINC', 'wp-includes'); if ( !defined('LANGDIR') ) { if ( file_exists(ABSPATH . 'wp-content/languages') && @is_dir(ABSPATH . 'wp-content/languages') ) define('LANGDIR', 'wp-content/languages'); // no leading slash, no trailing slash else define('LANGDIR', WPINC . '/languages'); // no leading slash, no trailing slash } if ( !defined('PLUGINDIR') ) define('PLUGINDIR', 'wp-content/plugins'); // no leading slash, no trailing slash if ( file_exists(ABSPATH . 'wp-content/db.php') ) require (ABSPATH . 'wp-content/db.php'); else require_once (ABSPATH . WPINC . '/wp-db.php'); // $table_prefix is deprecated as of 2.1 $wpdb->prefix = $table_prefix; if ( preg_match('|[^a-z0-9_.]|i', $wpdb->prefix) && !file_exists(ABSPATH . 'wp-content/db.php') ) die("ERROR: $table_prefix in wp-config.php can only contain numbers, letters, and underscores."); // Table names $wpdb->posts = $wpdb->prefix . 'posts'; $wpdb->users = $wpdb->prefix . 'users'; $wpdb->categories = $wpdb->prefix . 'categories'; $wpdb->post2cat = $wpdb->prefix . 'post2cat'; $wpdb->comments = $wpdb->prefix . 'comments'; $wpdb->link2cat = $wpdb->prefix . 'link2cat'; $wpdb->links = $wpdb->prefix . 'links'; $wpdb->options = $wpdb->prefix . 'options'; $wpdb->postmeta = $wpdb->prefix . 'postmeta'; $wpdb->usermeta = $wpdb->prefix . 'usermeta'; if ( defined('CUSTOM_USER_TABLE') ) $wpdb->users = CUSTOM_USER_TABLE; if ( defined('CUSTOM_USER_META_TABLE') ) $wpdb->usermeta = CUSTOM_USER_META_TABLE; if ( file_exists(ABSPATH . 'wp-content/object-cache.php') ) require (ABSPATH . 'wp-content/object-cache.php'); else require (ABSPATH . WPINC . '/cache.php'); wp_cache_init(); require (ABSPATH . WPINC . '/functions.php'); require (ABSPATH . WPINC . '/classes.php'); require (ABSPATH . WPINC . '/plugin.php'); require (ABSPATH . WPINC . '/default-filters.php'); include_once(ABSPATH . WPINC . '/streams.php'); include_once(ABSPATH . WPINC . '/gettext.php'); require_once (ABSPATH . WPINC . '/l10n.php'); if ( !is_blog_installed() && (strpos($_SERVER['PHP_SELF'], 'install.php') == false && !defined('WP_INSTALLING')) ) { if (strpos($_SERVER['PHP_SELF'], 'wp-admin') != false) $link = 'install.php'; else $link = 'wp-admin/install.php'; wp_die(sprintf("It doesn't look like you've installed WP yet. Try running install.php.", $link)); } require (ABSPATH . WPINC . '/formatting.php'); require (ABSPATH . WPINC . '/capabilities.php'); require (ABSPATH . WPINC . '/query.php'); require (ABSPATH . WPINC . '/theme.php'); require (ABSPATH . WPINC . '/user.php'); require (ABSPATH . WPINC . '/general-template.php'); require (ABSPATH . WPINC . '/link-template.php'); require (ABSPATH . WPINC . '/author-template.php'); require (ABSPATH . WPINC . '/post.php'); require (ABSPATH . WPINC . '/post-template.php'); require (ABSPATH . WPINC . '/category.php'); require (ABSPATH . WPINC . '/category-template.php'); require (ABSPATH . WPINC . '/comment.php'); require (ABSPATH . WPINC . '/comment-template.php'); require (ABSPATH . WPINC . '/rewrite.php'); require (ABSPATH . WPINC . '/feed.php'); require (ABSPATH . WPINC . '/bookmark.php'); require (ABSPATH . WPINC . '/bookmark-template.php'); require (ABSPATH . WPINC . '/kses.php'); require (ABSPATH . WPINC . '/cron.php'); require (ABSPATH . WPINC . '/version.php'); require (ABSPATH . WPINC . '/deprecated.php'); require (ABSPATH . WPINC . '/script-loader.php'); if (strpos($_SERVER['PHP_SELF'], 'install.php') == false) { // Used to guarantee unique hash cookies $cookiehash = md5(get_option('siteurl')); define('COOKIEHASH', $cookiehash); } if ( !defined('USER_COOKIE') ) define('USER_COOKIE', 'wordpressuser_'. COOKIEHASH); if ( !defined('PASS_COOKIE') ) define('PASS_COOKIE', 'wordpresspass_'. COOKIEHASH); if ( !defined('COOKIEPATH') ) define('COOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('home') . '/' ) ); if ( !defined('SITECOOKIEPATH') ) define('SITECOOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl') . '/' ) ); if ( !defined('COOKIE_DOMAIN') ) define('COOKIE_DOMAIN', false); require (ABSPATH . WPINC . '/vars.php'); // Check for hacks file if the option is enabled if (get_option('hack_file')) { if (file_exists(ABSPATH . '/my-hacks.php')) require(ABSPATH . '/my-hacks.php'); } if ( get_option('active_plugins') ) { $current_plugins = get_option('active_plugins'); if ( is_array($current_plugins) ) { foreach ($current_plugins as $plugin) { if ('' != $plugin && file_exists(ABSPATH . PLUGINDIR . '/' . $plugin)) include_once(ABSPATH . PLUGINDIR . '/' . $plugin); } } } require (ABSPATH . WPINC . '/pluggable.php'); if ( defined('WP_CACHE') && function_exists('wp_cache_postload') ) wp_cache_postload(); do_action('plugins_loaded'); // If already slashed, strip. if ( get_magic_quotes_gpc() ) { $_GET = stripslashes_deep($_GET ); $_POST = stripslashes_deep($_POST ); $_COOKIE = stripslashes_deep($_COOKIE); } // Escape with wpdb. $_GET = add_magic_quotes($_GET ); $_POST = add_magic_quotes($_POST ); $_COOKIE = add_magic_quotes($_COOKIE); $_SERVER = add_magic_quotes($_SERVER); do_action('sanitize_comment_cookies'); $wp_the_query =& new WP_Query(); $wp_query =& $wp_the_query; $wp_rewrite =& new WP_Rewrite(); $wp =& new WP(); validate_current_theme(); define('TEMPLATEPATH', get_template_directory()); define('STYLESHEETPATH', get_stylesheet_directory()); // Load the default text localization domain. load_default_textdomain(); $locale = get_locale(); $locale_file = ABSPATH . LANGDIR . "/$locale.php"; if ( is_readable($locale_file) ) require_once($locale_file); // Pull in locale data after loading text domain. require_once(ABSPATH . WPINC . '/locale.php'); $wp_locale =& new WP_Locale(); // Load functions for active theme. if ( TEMPLATEPATH != STYLESHEETPATH && file_exists(STYLESHEETPATH . '/functions.php') ) include(STYLESHEETPATH . '/functions.php'); if ( file_exists(TEMPLATEPATH . '/functions.php') ) include(TEMPLATEPATH . '/functions.php'); function shutdown_action_hook() { do_action('shutdown'); wp_cache_close(); } register_shutdown_function('shutdown_action_hook'); // Everything is loaded and initialized. do_action('init'); ?> 2wordpress/.svn/text-base/wp-trackback.php.svn-base \n"; echo "\n"; echo "1\n"; echo "$error_message\n"; echo ""; die(); } else { echo '\n"; echo "\n"; echo "0\n"; echo ""; } } // trackback is done by a POST $request_array = 'HTTP_POST_VARS'; if ( !$_GET['tb_id'] ) { $tb_id = explode('/', $_SERVER['REQUEST_URI']); $tb_id = intval( $tb_id[ count($tb_id) - 1 ] ); } $tb_url = $_POST['url']; $charset = $_POST['charset']; // These three are stripslashed here so that they can be properly escaped after mb_convert_encoding() $title = stripslashes($_POST['title']); $excerpt = stripslashes($_POST['excerpt']); $blog_name = stripslashes($_POST['blog_name']); if ($charset) $charset = strtoupper( trim($charset) ); else $charset = 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS'; if ( function_exists('mb_convert_encoding') ) { // For international trackbacks $title = mb_convert_encoding($title, get_option('blog_charset'), $charset); $excerpt = mb_convert_encoding($excerpt, get_option('blog_charset'), $charset); $blog_name = mb_convert_encoding($blog_name, get_option('blog_charset'), $charset); } // Now that mb_convert_encoding() has been given a swing, we need to escape these three $title = $wpdb->escape($title); $excerpt = $wpdb->escape($excerpt); $blog_name = $wpdb->escape($blog_name); if ( is_single() || is_page() ) $tb_id = $posts[0]->ID; if ( !intval( $tb_id ) ) trackback_response(1, 'I really need an ID for this to work.'); if (empty($title) && empty($tb_url) && empty($blog_name)) { // If it doesn't look like a trackback at all... wp_redirect(get_permalink($tb_id)); exit; } if ( !empty($tb_url) && !empty($title) ) { header('Content-Type: text/xml; charset=' . get_option('blog_charset') ); $pingstatus = $wpdb->get_var("SELECT ping_status FROM $wpdb->posts WHERE ID = " . $tb_id); if ( 'open' != $pingstatus ) trackback_response(1, 'Sorry, trackbacks are closed for this item.'); $title = wp_specialchars( strip_tags( $title ) ); $excerpt = strip_tags($excerpt); if ( function_exists('mb_strcut') ) { // For international trackbacks $excerpt = mb_strcut($excerpt, 0, 252, get_option('blog_charset')) . '...'; $title = mb_strcut($title, 0, 250, get_option('blog_charset')) . '...'; } else { $excerpt = (strlen($excerpt) > 255) ? substr($excerpt, 0, 252) . '...' : $excerpt; $title = (strlen($title) > 250) ? substr($title, 0, 250) . '...' : $title; } $comment_post_ID = (int) $tb_id; $comment_author = $blog_name; $comment_author_email = ''; $comment_author_url = $tb_url; $comment_content = "$title\n\n$excerpt"; $comment_type = 'trackback'; $dupe = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $comment_post_ID . " AND comment_author_url = '$comment_author_url'"); if ( $dupe ) trackback_response(1, 'We already have a ping from that URL for this post.'); $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type'); wp_new_comment($commentdata); do_action('trackback_post', $wpdb->insert_id); trackback_response(0); } ?>,wordpress/.svn/text-base/xmlrpc.php.svn-baseG '; ?> WordPress http://wordpress.org/ methods = array( // WordPress API 'wp.getPage' => 'this:wp_getPage', 'wp.getPages' => 'this:wp_getPages', 'wp.newPage' => 'this:wp_newPage', 'wp.deletePage' => 'this:wp_deletePage', 'wp.editPage' => 'this:wp_editPage', 'wp.getPageList' => 'this:wp_getPageList', 'wp.getAuthors' => 'this:wp_getAuthors', 'wp.getCategories' => 'this:mw_getCategories', // Alias 'wp.newCategory' => 'this:wp_newCategory', 'wp.suggestCategories' => 'this:wp_suggestCategories', 'wp.uploadFile' => 'this:mw_newMediaObject', // Alias // Blogger API 'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs', 'blogger.getUserInfo' => 'this:blogger_getUserInfo', 'blogger.getPost' => 'this:blogger_getPost', 'blogger.getRecentPosts' => 'this:blogger_getRecentPosts', 'blogger.getTemplate' => 'this:blogger_getTemplate', 'blogger.setTemplate' => 'this:blogger_setTemplate', 'blogger.newPost' => 'this:blogger_newPost', 'blogger.editPost' => 'this:blogger_editPost', 'blogger.deletePost' => 'this:blogger_deletePost', // MetaWeblog API (with MT extensions to structs) 'metaWeblog.newPost' => 'this:mw_newPost', 'metaWeblog.editPost' => 'this:mw_editPost', 'metaWeblog.getPost' => 'this:mw_getPost', 'metaWeblog.getRecentPosts' => 'this:mw_getRecentPosts', 'metaWeblog.getCategories' => 'this:mw_getCategories', 'metaWeblog.newMediaObject' => 'this:mw_newMediaObject', // MetaWeblog API aliases for Blogger API // see http://www.xmlrpc.com/stories/storyReader$2460 'metaWeblog.deletePost' => 'this:blogger_deletePost', 'metaWeblog.getTemplate' => 'this:blogger_getTemplate', 'metaWeblog.setTemplate' => 'this:blogger_setTemplate', 'metaWeblog.getUsersBlogs' => 'this:blogger_getUsersBlogs', // MovableType API 'mt.getCategoryList' => 'this:mt_getCategoryList', 'mt.getRecentPostTitles' => 'this:mt_getRecentPostTitles', 'mt.getPostCategories' => 'this:mt_getPostCategories', 'mt.setPostCategories' => 'this:mt_setPostCategories', 'mt.supportedMethods' => 'this:mt_supportedMethods', 'mt.supportedTextFilters' => 'this:mt_supportedTextFilters', 'mt.getTrackbackPings' => 'this:mt_getTrackbackPings', 'mt.publishPost' => 'this:mt_publishPost', // PingBack 'pingback.ping' => 'this:pingback_ping', 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', 'demo.sayHello' => 'this:sayHello', 'demo.addTwoNumbers' => 'this:addTwoNumbers' ); $this->methods = apply_filters('xmlrpc_methods', $this->methods); $this->IXR_Server($this->methods); } function sayHello($args) { return 'Hello!'; } function addTwoNumbers($args) { $number1 = $args[0]; $number2 = $args[1]; return $number1 + $number2; } function login_pass_ok($user_login, $user_pass) { if (!user_pass_ok($user_login, $user_pass)) { $this->error = new IXR_Error(403, __('Bad login/pass combination.')); return false; } return true; } function escape(&$array) { global $wpdb; if(!is_array($array)) { return($wpdb->escape($array)); } else { foreach ( (array) $array as $k => $v ) { if (is_array($v)) { $this->escape($array[$k]); } else if (is_object($v)) { //skip } else { $array[$k] = $wpdb->escape($v); } } } } /** * WordPress XML-RPC API * wp_getPage */ function wp_getPage($args) { $this->escape($args); $blog_id = (int) $args[0]; $page_id = (int) $args[1]; $username = $args[2]; $password = $args[3]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Lookup page info. $page = get_page($page_id); // If we found the page then format the data. if($page->ID && ($page->post_type == "page")) { // Get all of the page content and link. $full_page = get_extended($page->post_content); $link = post_permalink($page->ID); // Get info the page parent if there is one. $parent_title = ""; if(!empty($page->post_parent)) { $parent = get_page($page->post_parent); $parent_title = $parent->post_title; } // Determine comment and ping settings. $allow_comments = ("open" == $page->comment_status) ? 1 : 0; $allow_pings = ("open" == $page->ping_status) ? 1 : 0; // Format page date. $page_date = mysql2date("Ymd\TH:i:s\Z", $page->post_date_gmt); // Pull the categories info together. $categories = array(); foreach(wp_get_post_categories($page->ID) as $cat_id) { $categories[] = get_cat_name($cat_id); } // Get the author info. $author = get_userdata($page->post_author); $page_struct = array( "dateCreated" => new IXR_Date($page_date), "userid" => $page->post_author, "page_id" => $page->ID, "page_status" => $page->post_status, "description" => $full_page["main"], "title" => $page->post_title, "link" => $link, "permaLink" => $link, "categories" => $categories, "excerpt" => $page->post_excerpt, "text_more" => $full_page["extended"], "mt_allow_comments" => $allow_comments, "mt_allow_pings" => $allow_pings, "wp_slug" => $page->post_name, "wp_password" => $page->post_password, "wp_author" => $author->display_name, "wp_page_parent_id" => $page->post_parent, "wp_page_parent_title" => $parent_title, "wp_page_order" => $page->menu_order, "wp_author_id" => $author->ID, "wp_author_display_name" => $author->display_name ); return($page_struct); } // If the page doesn't exist indicate that. else { return(new IXR_Error(404, __("Sorry, no such page."))); } } /** * WordPress XML-RPC API * wp_getPages */ function wp_getPages($args) { $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Lookup info on pages. $pages = get_pages(); $num_pages = count($pages); // If we have pages, put together their info. if($num_pages >= 1) { $pages_struct = array(); for($i = 0; $i < $num_pages; $i++) { $page = wp_xmlrpc_server::wp_getPage(array( $blog_id, $pages[$i]->ID, $username, $password )); $pages_struct[] = $page; } return($pages_struct); } // If no pages were found return an error. else { return(array()); } } /** * WordPress XML-RPC API * wp_newPage */ function wp_newPage($args) { // Items not escaped here will be escaped in newPost. $username = $this->escape($args[1]); $password = $this->escape($args[2]); $page = $args[3]; $publish = $args[4]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Set the user context and check if they are allowed // to add new pages. $user = set_current_user(0, $username); if(!current_user_can("publish_pages")) { return(new IXR_Error(401, __("Sorry, you can not add new pages."))); } // Mark this as content for a page. $args[3]["post_type"] = "page"; // Let mw_newPost do all of the heavy lifting. return($this->mw_newPost($args)); } /** * WordPress XML-RPC API * wp_deletePage */ function wp_deletePage($args) { $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; $page_id = (int) $args[3]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Get the current page based on the page_id and // make sure it is a page and not a post. $actual_page = wp_get_single_post($page_id, ARRAY_A); if( !$actual_page || ($actual_page["post_type"] != "page") ) { return(new IXR_Error(404, __("Sorry, no such page."))); } // Set the user context and make sure they can delete pages. set_current_user(0, $username); if(!current_user_can("delete_page", $page_id)) { return(new IXR_Error(401, __("Sorry, you do not have the right to delete this page."))); } // Attempt to delete the page. $result = wp_delete_post($page_id); if(!$result) { return(new IXR_Error(500, __("Failed to delete the page."))); } return(true); } /** * WordPress XML-RPC API * wp_editPage */ function wp_editPage($args) { // Items not escaped here will be escaped in editPost. $blog_id = (int) $args[0]; $page_id = (int) $this->escape($args[1]); $username = $this->escape($args[2]); $password = $this->escape($args[3]); $content = $args[4]; $publish = $args[5]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Get the page data and make sure it is a page. $actual_page = wp_get_single_post($page_id, ARRAY_A); if( !$actual_page || ($actual_page["post_type"] != "page") ) { return(new IXR_Error(404, __("Sorry, no such page."))); } // Set the user context and make sure they are allowed to edit pages. set_current_user(0, $username); if(!current_user_can("edit_page", $page_id)) { return(new IXR_Error(401, __("Sorry, you do not have the right to edit this page."))); } // Mark this as content for a page. $content["post_type"] = "page"; // Arrange args in the way mw_editPost understands. $args = array( $page_id, $username, $password, $content, $publish ); // Let mw_editPost do all of the heavy lifting. return($this->mw_editPost($args)); } /** * WordPress XML-RPC API * wp_getPageList */ function wp_getPageList($args) { global $wpdb; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Get list of pages ids and titles $page_list = $wpdb->get_results(" SELECT ID page_id, post_title page_title, post_parent page_parent_id, post_date_gmt FROM {$wpdb->posts} WHERE post_type = 'page' ORDER BY ID "); // The date needs to be formated properly. $num_pages = count($page_list); for($i = 0; $i < $num_pages; $i++) { $post_date = mysql2date("Ymd\TH:i:s\Z", $page_list[$i]->post_date_gmt); $page_list[$i]->dateCreated = new IXR_Date($post_date); unset($page_list[$i]->post_date_gmt); } return($page_list); } /** * WordPress XML-RPC API * wp_getAuthors */ function wp_getAuthors($args) { global $wpdb; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } return(get_users_of_blog()); } /** * WordPress XML-RPC API * wp_newCategory */ function wp_newCategory($args) { $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; $category = $args[3]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Set the user context and make sure they are // allowed to add a category. set_current_user(0, $username); if(!current_user_can("manage_categories", $page_id)) { return(new IXR_Error(401, __("Sorry, you do not have the right to add a category."))); } // We need this to make use of the wp_insert_category() // funciton. require_once(ABSPATH . "wp-admin/admin-db.php"); // If no slug was provided make it empty so that // WordPress will generate one. if(empty($category["slug"])) { $category["slug"] = ""; } // If no parent_id was provided make it empty // so that it will be a top level page (no parent). if ( !isset($category["parent_id"]) ) $category["parent_id"] = ""; // If no description was provided make it empty. if(empty($category["description"])) { $category["description"] = ""; } $new_category = array( "cat_name" => $category["name"], "category_nicename" => $category["slug"], "category_parent" => $category["parent_id"], "category_description" => $category["description"] ); $cat_id = wp_insert_category($new_category); if(!$cat_id) { return(new IXR_Error(500, __("Sorry, the new category failed."))); } return($cat_id); } /** * WordPress XML-RPC API * wp_suggestCategories */ function wp_suggestCategories($args) { global $wpdb; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; $category = $args[3]; $max_results = (int) $args[4]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Only set a limit if one was provided. $limit = ""; if(!empty($max_results)) { $limit = "LIMIT {$max_results}"; } $category_suggestions = $wpdb->get_results(" SELECT cat_ID category_id, cat_name category_name FROM {$wpdb->categories} WHERE cat_name LIKE '{$category}%' "); return($category_suggestions); } /* Blogger API functions * specs on http://plant.blogger.com/api and http://groups.yahoo.com/group/bloggerDev/ */ /* blogger.getUsersBlogs will make more sense once we support multiple blogs */ function blogger_getUsersBlogs($args) { $this->escape($args); $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); $is_admin = current_user_can('level_8'); $struct = array( 'isAdmin' => $is_admin, 'url' => get_option('home') . '/', 'blogid' => '1', 'blogName' => get_option('blogname') ); return array($struct); } /* blogger.getUsersInfo gives your client some info about you, so you don't have to */ function blogger_getUserInfo($args) { $this->escape($args); $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $user_data = get_userdatabylogin($user_login); $struct = array( 'nickname' => $user_data->nickname, 'userid' => $user_data->ID, 'url' => $user_data->user_url, 'email' => $user_data->user_email, 'lastname' => $user_data->last_name, 'firstname' => $user_data->first_name ); return $struct; } /* blogger.getPost ...gets a post */ function blogger_getPost($args) { $this->escape($args); $post_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $user_data = get_userdatabylogin($user_login); $post_data = wp_get_single_post($post_ID, ARRAY_A); $categories = implode(',', wp_get_post_categories($post_ID)); $content = ''.stripslashes($post_data['post_title']).''; $content .= ''.$categories.''; $content .= stripslashes($post_data['post_content']); $struct = array( 'userid' => $post_data['post_author'], 'dateCreated' => new IXR_Date(mysql2date('Ymd\TH:i:s', $post_data['post_date'])), 'content' => $content, 'postid' => $post_data['ID'] ); return $struct; } /* blogger.getRecentPosts ...gets recent posts */ function blogger_getRecentPosts($args) { global $wpdb; $this->escape($args); $blog_ID = (int) $args[1]; /* though we don't use it yet */ $user_login = $args[2]; $user_pass = $args[3]; $num_posts = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $posts_list = wp_get_recent_posts($num_posts); if (!$posts_list) { $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); return $this->error; } foreach ($posts_list as $entry) { $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date']); $categories = implode(',', wp_get_post_categories($entry['ID'])); $content = ''.stripslashes($entry['post_title']).''; $content .= ''.$categories.''; $content .= stripslashes($entry['post_content']); $struct[] = array( 'userid' => $entry['post_author'], 'dateCreated' => new IXR_Date($post_date), 'content' => $content, 'postid' => $entry['ID'], ); } $recent_posts = array(); for ($j=0; $jescape($args); $blog_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $template = $args[4]; /* could be 'main' or 'archiveIndex', but we don't use it */ if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_themes') ) { return new IXR_Error(401, __('Sorry, this user can not edit the template.')); } /* warning: here we make the assumption that the weblog's URL is on the same server */ $filename = get_option('home') . '/'; $filename = preg_replace('#https?://.+?/#', $_SERVER['DOCUMENT_ROOT'].'/', $filename); $f = fopen($filename, 'r'); $content = fread($f, filesize($filename)); fclose($f); /* so it is actually editable with a windows/mac client */ // FIXME: (or delete me) do we really want to cater to bad clients at the expense of good ones by BEEPing up their line breaks? commented. $content = str_replace("\n", "\r\n", $content); return $content; } /* blogger.setTemplate updates the content of blog_filename */ function blogger_setTemplate($args) { $this->escape($args); $blog_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $content = $args[4]; $template = $args[5]; /* could be 'main' or 'archiveIndex', but we don't use it */ if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_themes') ) { return new IXR_Error(401, __('Sorry, this user can not edit the template.')); } /* warning: here we make the assumption that the weblog's URL is on the same server */ $filename = get_option('home') . '/'; $filename = preg_replace('#https?://.+?/#', $_SERVER['DOCUMENT_ROOT'].'/', $filename); if ($f = fopen($filename, 'w+')) { fwrite($f, $content); fclose($f); } else { return new IXR_Error(500, __('Either the file is not writable, or something wrong happened. The file has not been updated.')); } return true; } /* blogger.newPost ...creates a new post */ function blogger_newPost($args) { global $wpdb; $this->escape($args); $blog_ID = (int) $args[1]; /* though we don't use it yet */ $user_login = $args[2]; $user_pass = $args[3]; $content = $args[4]; $publish = $args[5]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $cap = ($publish) ? 'publish_posts' : 'edit_posts'; $user = set_current_user(0, $user_login); if ( !current_user_can($cap) ) return new IXR_Error(401, __('Sorry, you can not post on this weblog or category.')); $post_status = ($publish) ? 'publish' : 'draft'; $post_author = $user->ID; $post_title = xmlrpc_getposttitle($content); $post_category = xmlrpc_getpostcategory($content); $post_content = xmlrpc_removepostdata($content); $post_date = current_time('mysql'); $post_date_gmt = current_time('mysql', 1); $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status'); $post_ID = wp_insert_post($post_data); if (!$post_ID) { return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); } $this->attach_uploads( $post_ID, $post_content ); logIO('O', "Posted ! ID: $post_ID"); return $post_ID; } /* blogger.editPost ...edits a post */ function blogger_editPost($args) { global $wpdb; $this->escape($args); $post_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $content = $args[4]; $publish = $args[5]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $actual_post = wp_get_single_post($post_ID,ARRAY_A); if (!$actual_post) { return new IXR_Error(404, __('Sorry, no such post.')); } $this->escape($actual_post); set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you do not have the right to edit this post.')); extract($actual_post, EXTR_SKIP); if ( ('publish' == $post_status) && !current_user_can('publish_posts') ) return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.')); $post_title = xmlrpc_getposttitle($content); $post_category = xmlrpc_getpostcategory($content); $post_content = xmlrpc_removepostdata($content); $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); $result = wp_update_post($postdata); if (!$result) { return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be edited.')); } $this->attach_uploads( $ID, $post_content ); return true; } /* blogger.deletePost ...deletes a post */ function blogger_deletePost($args) { global $wpdb; $this->escape($args); $post_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $publish = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $actual_post = wp_get_single_post($post_ID,ARRAY_A); if (!$actual_post) { return new IXR_Error(404, __('Sorry, no such post.')); } set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you do not have the right to delete this post.')); $result = wp_delete_post($post_ID); if (!$result) { return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be deleted.')); } return true; } /* MetaWeblog API functions * specs on wherever Dave Winer wants them to be */ /* metaweblog.newPost creates a post */ function mw_newPost($args) { global $wpdb, $post_default_category; $this->escape($args); $blog_ID = (int) $args[0]; // we will support this in the near future $user_login = $args[1]; $user_pass = $args[2]; $content_struct = $args[3]; $publish = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $cap = ($publish) ? 'publish_posts' : 'edit_posts'; $user = set_current_user(0, $user_login); if ( !current_user_can($cap) ) return new IXR_Error(401, __('Sorry, you can not post on this weblog or category.')); // The post_type defaults to post, but could also be page. $post_type = "post"; if( !empty($content_struct["post_type"]) && ($content_struct["post_type"] == "page") ) { $post_type = "page"; } // Let WordPress generate the post_name (slug) unless // one has been provided. $post_name = ""; if(isset($content_struct["wp_slug"])) { $post_name = $content_struct["wp_slug"]; } // Only use a password if one was given. if(isset($content_struct["wp_password"])) { $post_password = $content_struct["wp_password"]; } // Only set a post parent if one was provided. if(isset($content_struct["wp_page_parent_id"])) { $post_parent = $content_struct["wp_page_parent_id"]; } // Only set the menu_order if it was provided. if(isset($content_struct["wp_page_order"])) { $menu_order = $content_struct["wp_page_order"]; } $post_author = $user->ID; // If an author id was provided then use it instead. if( isset($content_struct["wp_author_id"]) && ($user->ID != $content_struct["wp_author_id"]) ) { switch($post_type) { case "post": if(!current_user_can("edit_others_posts")) { return(new IXR_Error(401, "You are not allowed to " . "post as this user")); } break; case "page": if(!current_user_can("edit_others_pages")) { return(new IXR_Error(401, "You are not allowed to " . "create pages as this user")); } break; default: return(new IXR_Error(401, __("Invalid post type."))); break; } $post_author = $content_struct["wp_author_id"]; } $post_title = $content_struct['title']; $post_content = apply_filters( 'content_save_pre', $content_struct['description'] ); $post_status = $publish ? 'publish' : 'draft'; $post_excerpt = $content_struct['mt_excerpt']; $post_more = $content_struct['mt_text_more']; if(isset($content_struct["mt_allow_comments"])) { if(!is_numeric($content_struct["mt_allow_comments"])) { switch($content_struct["mt_allow_comments"]) { case "closed": $comment_status = "closed"; break; case "open": $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } else { switch((int) $content_struct["mt_allow_comments"]) { case 0: $comment_status = "closed"; break; case 1: $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } } else { $comment_status = get_option("default_comment_status"); } if(isset($content_struct["mt_allow_pings"])) { if(!is_numeric($content_struct["mt_allow_pings"])) { switch($content_struct["mt_allow_pings"]) { case "closed": $ping_status = "closed"; break; case "open": $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } else { switch((int) $content_struct["mt_allow_pings"]) { case 0: $ping_status = "closed"; break; case 1: $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } } else { $ping_status = get_option("default_ping_status"); } if ($post_more) { $post_content = $post_content . "\n\n" . $post_more; } $to_ping = $content_struct['mt_tb_ping_urls']; if ( is_array($to_ping) ) $to_ping = implode(' ', $to_ping); // Do some timestamp voodoo $dateCreatedd = $content_struct['dateCreated']; if (!empty($dateCreatedd)) { $dateCreated = $dateCreatedd->getIso(); $post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); $post_date_gmt = iso8601_to_datetime($dateCreated. "Z", GMT); } else { $post_date = current_time('mysql'); $post_date_gmt = current_time('mysql', 1); } $catnames = $content_struct['categories']; logIO('O', 'Post cats: ' . printr($catnames,true)); $post_category = array(); if (is_array($catnames)) { foreach ($catnames as $cat) { $post_category[] = get_cat_ID($cat); } } // We've got all the data -- post it: $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'to_ping', 'post_type', 'post_name', 'post_password', 'post_parent', 'menu_order'); $post_ID = wp_insert_post($postdata); if (!$post_ID) { return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); } $this->attach_uploads( $post_ID, $post_content ); logIO('O', "Posted ! ID: $post_ID"); return strval($post_ID); } function attach_uploads( $post_ID, $post_content ) { global $wpdb; // find any unattached files $attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '-1' AND post_type = 'attachment'" ); if( is_array( $attachments ) ) { foreach( $attachments as $file ) { if( strpos( $post_content, $file->guid ) != false ) { $wpdb->query( "UPDATE {$wpdb->posts} SET post_parent = " . $post_ID . " WHERE ID = " . $file->ID ); } } } } /* metaweblog.editPost ...edits a post */ function mw_editPost($args) { global $wpdb, $post_default_category; $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $content_struct = $args[3]; $publish = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $user = set_current_user(0, $user_login); // The post_type defaults to post, but could also be page. $post_type = "post"; if( !empty($content_struct["post_type"]) && ($content_struct["post_type"] == "page") ) { $post_type = "page"; } // Edit page caps are checked in editPage. Just check post here. if ( ( 'post' == $post_type ) && !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you can not edit this post.')); $postdata = wp_get_single_post($post_ID, ARRAY_A); // If there is no post data for the give post id, stop // now and return an error. Other wise a new post will be // created (which was the old behavior). if(empty($postdata["ID"])) { return(new IXR_Error(404, __("Invalid post id."))); } $this->escape($postdata); extract($postdata, EXTR_SKIP); // Let WordPress manage slug if none was provided. $post_name = ""; if(isset($content_struct["wp_slug"])) { $post_name = $content_struct["wp_slug"]; } // Only use a password if one was given. if(isset($content_struct["wp_password"])) { $post_password = $content_struct["wp_password"]; } // Only set a post parent if one was given. if(isset($content_struct["wp_page_parent_id"])) { $post_parent = $content_struct["wp_page_parent_id"]; } // Only set the menu_order if it was given. if(isset($content_struct["wp_page_order"])) { $menu_order = $content_struct["wp_page_order"]; } $post_author = $postdata["post_author"]; // Only set the post_author if one is set. if( isset($content_struct["wp_author_id"]) && ($user->ID != $content_struct["wp_author_id"]) ) { switch($post_type) { case "post": if(!current_user_can("edit_others_posts")) { return(new IXR_Error(401, "You are not allowed to " . "change the post author as this user.")); } break; case "page": if(!current_user_can("edit_others_pages")) { return(new IXR_Error(401, "You are not allowed to " . "change the page author as this user.")); } break; default: return(new IXR_Error(401, __("Invalid post type."))); break; } $post_author = $content_struct["wp_author_id"]; } if(isset($content_struct["mt_allow_comments"])) { if(!is_numeric($content_struct["mt_allow_comments"])) { switch($content_struct["mt_allow_comments"]) { case "closed": $comment_status = "closed"; break; case "open": $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } else { switch((int) $content_struct["mt_allow_comments"]) { case 0: $comment_status = "closed"; break; case 1: $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } } if(isset($content_struct["mt_allow_pings"])) { if(!is_numeric($content_struct["mt_allow_pings"])) { switch($content_struct["mt_allow_pings"]) { case "closed": $ping_status = "closed"; break; case "open": $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } else { switch((int) $content_struct["mt_allow_pings"]) { case 0: $ping_status = "closed"; break; case 1: $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } } $post_title = $content_struct['title']; $post_content = apply_filters( 'content_save_pre', $content_struct['description'] ); $catnames = $content_struct['categories']; $post_category = array(); if (is_array($catnames)) { foreach ($catnames as $cat) { $post_category[] = get_cat_ID($cat); } } $post_excerpt = $content_struct['mt_excerpt']; $post_more = $content_struct['mt_text_more']; $post_status = $publish ? 'publish' : 'draft'; if ( ('publish' == $post_status) ) { if ( ( 'page' == $post_type ) && !current_user_can('publish_pages') ) return new IXR_Error(401, __('Sorry, you do not have the right to publish this page.')); else if ( !current_user_can('publish_posts') ) return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.')); } if ($post_more) { $post_content = $post_content . "\n\n" . $post_more; } $to_ping = $content_struct['mt_tb_ping_urls']; if ( is_array($to_ping) ) $to_ping = implode(' ', $to_ping); // Do some timestamp voodoo $dateCreatedd = $content_struct['dateCreated']; if (!empty($dateCreatedd)) { $dateCreated = $dateCreatedd->getIso(); $post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); $post_date_gmt = iso8601_to_datetime($dateCreated . "Z", GMT); } else { $post_date = $postdata['post_date']; $post_date_gmt = $postdata['post_date_gmt']; } // We've got all the data -- post it: $newpost = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'post_date', 'post_date_gmt', 'to_ping', 'post_name', 'post_password', 'post_parent', 'menu_order', 'post_author'); $result = wp_update_post($newpost); if (!$result) { return new IXR_Error(500, __('Sorry, your entry could not be edited. Something wrong happened.')); } $this->attach_uploads( $ID, $post_content ); logIO('O',"(MW) Edited ! ID: $post_ID"); return true; } /* metaweblog.getPost ...returns a post */ function mw_getPost($args) { global $wpdb; $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $postdata = wp_get_single_post($post_ID, ARRAY_A); if ($postdata['post_date'] != '') { $post_date = mysql2date('Ymd\TH:i:s\Z', $postdata['post_date_gmt']); $categories = array(); $catids = wp_get_post_categories($post_ID); foreach($catids as $catid) { $categories[] = get_cat_name($catid); } $post = get_extended($postdata['post_content']); $link = post_permalink($postdata['ID']); // Get the author info. $author = get_userdata($postdata['post_author']); $allow_comments = ('open' == $postdata['comment_status']) ? 1 : 0; $allow_pings = ('open' == $postdata['ping_status']) ? 1 : 0; $resp = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $postdata['post_author'], 'postid' => $postdata['ID'], 'description' => $post['main'], 'title' => $postdata['post_title'], 'link' => $link, 'permaLink' => $link, // commented out because no other tool seems to use this // 'content' => $entry['post_content'], 'categories' => $categories, 'mt_excerpt' => $postdata['post_excerpt'], 'mt_text_more' => $post['extended'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'wp_slug' => $postdata['post_name'], 'wp_password' => $postdata['post_password'], 'wp_author_id' => $author->ID, 'wp_author_display_name' => $author->display_name ); return $resp; } else { return new IXR_Error(404, __('Sorry, no such post.')); } } /* metaweblog.getRecentPosts ...returns recent posts */ function mw_getRecentPosts($args) { $this->escape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $num_posts = (int) $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $posts_list = wp_get_recent_posts($num_posts); if (!$posts_list) { $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); return $this->error; } foreach ($posts_list as $entry) { $post_date = mysql2date('Ymd\TH:i:s\Z', $entry['post_date_gmt']); $categories = array(); $catids = wp_get_post_categories($entry['ID']); foreach($catids as $catid) { $categories[] = get_cat_name($catid); } $post = get_extended($entry['post_content']); $link = post_permalink($entry['ID']); // Get the post author info. $author = get_userdata($entry['post_author']); $allow_comments = ('open' == $entry['comment_status']) ? 1 : 0; $allow_pings = ('open' == $entry['ping_status']) ? 1 : 0; $struct[] = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $entry['post_author'], 'postid' => $entry['ID'], 'description' => $post['main'], 'title' => $entry['post_title'], 'link' => $link, 'permaLink' => $link, // commented out because no other tool seems to use this // 'content' => $entry['post_content'], 'categories' => $categories, 'mt_excerpt' => $entry['post_excerpt'], 'mt_text_more' => $post['extended'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'wp_slug' => $entry['post_name'], 'wp_password' => $entry['post_password'], 'wp_author_id' => $author->ID, 'wp_author_display_name' => $author->display_name ); } $recent_posts = array(); for ($j=0; $jescape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $categories_struct = array(); // FIXME: can we avoid using direct SQL there? if ($cats = $wpdb->get_results("SELECT cat_ID,cat_name,category_parent FROM $wpdb->categories", ARRAY_A)) { foreach ($cats as $cat) { $struct['categoryId'] = $cat['cat_ID']; $struct['parentId'] = $cat['category_parent']; $struct['description'] = $cat['cat_name']; $struct['categoryName'] = $cat['cat_name']; $struct['htmlUrl'] = wp_specialchars(get_category_link($cat['cat_ID'])); $struct['rssUrl'] = wp_specialchars(get_category_rss_link(false, $cat['cat_ID'], $cat['cat_name'])); $categories_struct[] = $struct; } } return $categories_struct; } /* metaweblog.newMediaObject uploads a file, following your settings */ function mw_newMediaObject($args) { // adapted from a patch by Johann Richard // http://mycvs.org/archives/2004/06/30/file-upload-to-wordpress-in-ecto/ global $wpdb; $blog_ID = (int) $args[0]; $user_login = $wpdb->escape($args[1]); $user_pass = $wpdb->escape($args[2]); $data = $args[3]; $name = sanitize_file_name( $data['name'] ); $type = $data['type']; $bits = $data['bits']; logIO('O', '(MW) Received '.strlen($bits).' bytes'); if ( !$this->login_pass_ok($user_login, $user_pass) ) return $this->error; set_current_user(0, $user_login); if ( !current_user_can('upload_files') ) { logIO('O', '(MW) User does not have upload_files capability'); $this->error = new IXR_Error(401, __('You are not allowed to upload files to this site.')); return $this->error; } if ( $upload_err = apply_filters( "pre_upload_error", false ) ) return new IXR_Error(500, $upload_err); if(!empty($data["overwrite"]) && ($data["overwrite"] == true)) { // Get postmeta info on the object. $old_file = $wpdb->get_row(" SELECT ID FROM {$wpdb->posts} WHERE post_title = '{$name}' AND post_type = 'attachment' "); // Delete previous file. wp_delete_attachment($old_file->ID); // Make sure the new name is different by pre-pending the // previous post id. $filename = preg_replace("/^wpid\d+-/", "", $name); $name = "wpid{$old_file->ID}-{$filename}"; } $upload = wp_upload_bits($name, $type, $bits, $overwrite); if ( ! empty($upload['error']) ) { $errorString = 'Could not write file ' . $name . ' (' . $upload['error'] . ')'; logIO('O', '(MW) ' . $errorString); return new IXR_Error(500, $errorString); } // Construct the attachment array // attach to post_id -1 $post_id = -1; $attachment = array( 'post_title' => $name, 'post_content' => '', 'post_type' => 'attachment', 'post_parent' => $post_id, 'post_mime_type' => $type, 'guid' => $upload[ 'url' ] ); // Save the data $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id ); wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) ); return apply_filters( 'wp_handle_upload', array( 'file' => $name, 'url' => $upload[ 'url' ], 'type' => $type ) ); } /* MovableType API functions * specs on http://www.movabletype.org/docs/mtmanual_programmatic.html */ /* mt.getRecentPostTitles ...returns recent posts' titles */ function mt_getRecentPostTitles($args) { $this->escape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $num_posts = (int) $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $posts_list = wp_get_recent_posts($num_posts); if (!$posts_list) { $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); return $this->error; } foreach ($posts_list as $entry) { $post_date = mysql2date('Ymd\TH:i:s\Z', $entry['post_date_gmt']); $struct[] = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $entry['post_author'], 'postid' => $entry['ID'], 'title' => $entry['post_title'], ); } $recent_posts = array(); for ($j=0; $jescape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $categories_struct = array(); // FIXME: can we avoid using direct SQL there? if ($cats = $wpdb->get_results("SELECT cat_ID, cat_name FROM $wpdb->categories", ARRAY_A)) { foreach ($cats as $cat) { $struct['categoryId'] = $cat['cat_ID']; $struct['categoryName'] = $cat['cat_name']; $categories_struct[] = $struct; } } return $categories_struct; } /* mt.getPostCategories ...returns a post's categories */ function mt_getPostCategories($args) { $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $categories = array(); $catids = wp_get_post_categories(intval($post_ID)); // first listed category will be the primary category $isPrimary = true; foreach($catids as $catid) { $categories[] = array( 'categoryName' => get_cat_name($catid), 'categoryId' => (string) $catid, 'isPrimary' => $isPrimary ); $isPrimary = false; } return $categories; } /* mt.setPostCategories ...sets a post's categories */ function mt_setPostCategories($args) { $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $categories = $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you can not edit this post.')); foreach($categories as $cat) { $catids[] = $cat['categoryId']; } wp_set_post_categories($post_ID, $catids); return true; } /* mt.supportedMethods ...returns an array of methods supported by this server */ function mt_supportedMethods($args) { $supported_methods = array(); foreach($this->methods as $key=>$value) { $supported_methods[] = $key; } return $supported_methods; } /* mt.supportedTextFilters ...returns an empty array because we don't support per-post text filters yet */ function mt_supportedTextFilters($args) { return apply_filters('xmlrpc_text_filters', array()); } /* mt.getTrackbackPings ...returns trackbacks sent to a given post */ function mt_getTrackbackPings($args) { global $wpdb; $post_ID = intval($args); $actual_post = wp_get_single_post($post_ID, ARRAY_A); if (!$actual_post) { return new IXR_Error(404, __('Sorry, no such post.')); } $comments = $wpdb->get_results("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = " . $post_ID ); if (!$comments) { return array(); } $trackback_pings = array(); foreach($comments as $comment) { if ( 'trackback' == $comment->comment_type ) { $content = $comment->comment_content; $title = substr($content, 8, (strpos($content, '
') - 8)); $trackback_pings[] = array( 'pingTitle' => $title, 'pingURL' => $comment->comment_author_url, 'pingIP' => $comment->comment_author_IP ); } } return $trackback_pings; } /* mt.publishPost ...sets a post's publish status to 'publish' */ function mt_publishPost($args) { $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you can not edit this post.')); $postdata = wp_get_single_post($post_ID,ARRAY_A); $postdata['post_status'] = 'publish'; // retain old cats $cats = wp_get_post_categories($post_ID); $postdata['post_category'] = $cats; $this->escape($postdata); $result = wp_update_post($postdata); return $result; } /* PingBack functions * specs on www.hixie.ch/specs/pingback/pingback */ /* pingback.ping gets a pingback and registers it */ function pingback_ping($args) { global $wpdb, $wp_version; $this->escape($args); $pagelinkedfrom = $args[0]; $pagelinkedto = $args[1]; $title = ''; $pagelinkedfrom = str_replace('&', '&', $pagelinkedfrom); $pagelinkedto = preg_replace('#&([^amp\;])#is', '&$1', $pagelinkedto); $error_code = -1; // Check if the page linked to is in our site $pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_option('home'))); if( !$pos1 ) return new IXR_Error(0, __('Is there no link to us?')); // let's find which post is linked to // FIXME: does url_to_postid() cover all these cases already? // if so, then let's use it and drop the old code. $urltest = parse_url($pagelinkedto); if ($post_ID = url_to_postid($pagelinkedto)) { $way = 'url_to_postid()'; } elseif (preg_match('#p/[0-9]{1,}#', $urltest['path'], $match)) { // the path defines the post_ID (archives/p/XXXX) $blah = explode('/', $match[0]); $post_ID = (int) $blah[1]; $way = 'from the path'; } elseif (preg_match('#p=[0-9]{1,}#', $urltest['query'], $match)) { // the querystring defines the post_ID (?p=XXXX) $blah = explode('=', $match[0]); $post_ID = (int) $blah[1]; $way = 'from the querystring'; } elseif (isset($urltest['fragment'])) { // an #anchor is there, it's either... if (intval($urltest['fragment'])) { // ...an integer #XXXX (simpliest case) $post_ID = (int) $urltest['fragment']; $way = 'from the fragment (numeric)'; } elseif (preg_match('/post-[0-9]+/',$urltest['fragment'])) { // ...a post id in the form 'post-###' $post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']); $way = 'from the fragment (post-###)'; } elseif (is_string($urltest['fragment'])) { // ...or a string #title, a little more complicated $title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']); $sql = "SELECT ID FROM $wpdb->posts WHERE post_title RLIKE '$title'"; if (! ($post_ID = $wpdb->get_var($sql)) ) { // returning unknown error '0' is better than die()ing return new IXR_Error(0, ''); } $way = 'from the fragment (title)'; } } else { // TODO: Attempt to extract a post ID from the given URL return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); } $post_ID = (int) $post_ID; logIO("O","(PB) URL='$pagelinkedto' ID='$post_ID' Found='$way'"); $post = get_post($post_ID); if ( !$post ) // Post_ID not found return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); if ( $post_ID == url_to_postid($pagelinkedfrom) ) return new IXR_Error(0, __('The source URL and the target URL cannot both point to the same resource.')); // Check if pings are on if ( 'closed' == $post->ping_status ) return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); // Let's check that the remote site didn't already pingback this entry $result = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post_ID . " AND comment_author_url = '$pagelinkedfrom'"); if ( $wpdb->num_rows ) // We already have a Pingback from this URL return new IXR_Error(48, __('The pingback has already been registered.')); // very stupid, but gives time to the 'from' server to publish ! sleep(1); // Let's check the remote site $linea = wp_remote_fopen( $pagelinkedfrom ); if ( !$linea ) return new IXR_Error(16, __('The source URL does not exist.')); // Work around bug in strip_tags(): $linea = str_replace(']*>/", "\n\n", $linea ); preg_match('|([^<]*?)|is', $linea, $matchtitle); $title = $matchtitle[1]; if ( empty( $title ) ) return new IXR_Error(32, __('We cannot find a title on that page.')); $linea = strip_tags( $linea, '' ); // just keep the tag we need $p = explode( "\n\n", $linea ); $preg_target = preg_quote($pagelinkedto); foreach ( $p as $para ) { if ( strpos($para, $pagelinkedto) != false ) { // it exists, but is it a link? preg_match("|]+?".$preg_target."[^>]*>([^>]+?)|", $para, $context); // If the URL isn't in a link context, keep looking if ( empty($context) ) continue; // We're going to use this fake tag to mark the context in a bit // the marker is needed in case the link text appears more than once in the paragraph $excerpt = preg_replace('|\|', '', $para); // prevent really long link text if ( strlen($context[1]) > 100 ) $context[1] = substr($context[1], 0, 100) . '...'; $marker = ''.$context[1].''; // set up our marker $excerpt= str_replace($context[0], $marker, $excerpt); // swap out the link for our marker $excerpt = strip_tags($excerpt, ''); // strip all tags but our context marker $excerpt = trim($excerpt); $preg_marker = preg_quote($marker); $excerpt = preg_replace("|.*?\s(.{0,100}$preg_marker.{0,100})\s.*|s", '$1', $excerpt); $excerpt = strip_tags($excerpt); // YES, again, to remove the marker wrapper break; } } if ( empty($context) ) // Link to target not found return new IXR_Error(17, __('The source URL does not contain a link to the target URL, and so cannot be used as a source.')); $pagelinkedfrom = preg_replace('#&([^amp\;])#is', '&$1', $pagelinkedfrom); $context = '[...] ' . wp_specialchars( $excerpt ) . ' [...]'; $original_pagelinkedfrom = $pagelinkedfrom; $pagelinkedfrom = $wpdb->escape( $pagelinkedfrom ); $original_title = $title; $comment_post_ID = (int) $post_ID; $comment_author = $title; $this->escape($comment_author); $comment_author_url = $pagelinkedfrom; $comment_content = $context; $this->escape($comment_content); $comment_type = 'pingback'; $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_content', 'comment_type'); $comment_ID = wp_new_comment($commentdata); do_action('pingback_post', $comment_ID); return "Pingback from $pagelinkedfrom to $pagelinkedto registered. Keep the web talking! :-)"; } /* pingback.extensions.getPingbacks returns an array of URLs that pingbacked the given URL specs on http://www.aquarionics.com/misc/archives/blogite/0198.html */ function pingback_extensions_getPingbacks($args) { global $wpdb; $this->escape($args); $url = $args; $post_ID = url_to_postid($url); if (!$post_ID) { // We aren't sure that the resource is available and/or pingback enabled return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); } $actual_post = wp_get_single_post($post_ID, ARRAY_A); if (!$actual_post) { // No such post = resource not found return new IXR_Error(32, __('The specified target URL does not exist.')); } $comments = $wpdb->get_results("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = " . $post_ID); if (!$comments) { return array(); } $pingbacks = array(); foreach($comments as $comment) { if ( 'pingback' == $comment->comment_type ) $pingbacks[] = $comment->comment_author_url; } return $pingbacks; } } $wp_xmlrpc_server = new wp_xmlrpc_server(); ?> !wordpress/wp-admin/admin-ajax.php#3"; $r .= ""; $r .= ""; $r .= "
"; $r .= ""; return $r; } $id = (int) $_POST['id']; switch ( $_POST['action'] ) : case 'delete-comment' : if ( !$comment = get_comment( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) die('-1'); if ( wp_delete_comment( $comment->comment_ID ) ) die('1'); else die('0'); break; case 'delete-comment-as-spam' : if ( !$comment = get_comment( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) die('-1'); if ( wp_set_comment_status( $comment->comment_ID, 'spam' ) ) die('1'); else die('0'); break; case 'delete-cat' : if ( !current_user_can( 'manage_categories' ) ) die('-1'); if ( wp_delete_category( $id ) ) die('1'); else die('0'); break; case 'delete-link' : if ( !current_user_can( 'manage_links' ) ) die('-1'); if ( wp_delete_link( $id ) ) die('1'); else die('0'); break; case 'delete-meta' : if ( !$meta = get_post_meta_by_id( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $meta->post_id ) ) die('-1'); if ( delete_meta( $meta->meta_id ) ) die('1'); die('0'); break; case 'delete-post' : if ( !current_user_can( 'delete_post', $id ) ) die('-1'); if ( wp_delete_post( $id ) ) die('1'); else die('0'); break; case 'delete-page' : if ( !current_user_can( 'delete_page', $id ) ) die('-1'); if ( wp_delete_post( $id ) ) die('1'); else die('0'); break; case 'dim-comment' : if ( !$comment = get_comment( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) die('-1'); if ( !current_user_can( 'moderate_comments' ) ) die('-1'); if ( 'unapproved' == wp_get_comment_status($comment->comment_ID) ) { if ( wp_set_comment_status( $comment->comment_ID, 'approve' ) ) die('1'); } else { if ( wp_set_comment_status( $comment->comment_ID, 'hold' ) ) die('1'); } die('0'); break; case 'add-category' : // On the Fly if ( !current_user_can( 'manage_categories' ) ) die('-1'); $names = explode(',', $_POST['newcat']); $x = new WP_Ajax_Response(); foreach ( $names as $cat_name ) { $cat_name = trim($cat_name); if ( !$category_nicename = sanitize_title($cat_name) ) die('0'); if ( !$cat_id = category_exists( $cat_name ) ) $cat_id = wp_create_category( $cat_name ); $cat_name = wp_specialchars(stripslashes($cat_name)); $x->add( array( 'what' => 'category', 'id' => $cat_id, 'data' => "
  • " ) ); } $x->send(); break; case 'add-cat' : // From Manage->Categories if ( !current_user_can( 'manage_categories' ) ) die('-1'); if ( !$cat = wp_insert_category( $_POST ) ) die('0'); if ( !$cat = get_category( $cat ) ) die('0'); $level = 0; $cat_full_name = $cat->cat_name; $_cat = $cat; while ( $_cat->category_parent ) { $_cat = get_category( $_cat->category_parent ); $cat_full_name = $_cat->cat_name . ' — ' . $cat_full_name; $level++; } $cat_full_name = attribute_escape($cat_full_name); $x = new WP_Ajax_Response( array( 'what' => 'cat', 'id' => $cat->cat_ID, 'data' => _cat_row( $cat, $level, $cat_full_name ), 'supplemental' => array('name' => $cat_full_name, 'show-link' => sprintf(__( 'Category %s added' ), "cat-$cat->cat_ID", $cat_full_name)) ) ); $x->send(); break; case 'add-comment' : if ( !current_user_can( 'edit_post', $id ) ) die('-1'); $search = isset($_POST['s']) ? $_POST['s'] : false; $start = isset($_POST['page']) ? intval($_POST['page']) * 25 : 25; list($comments, $total) = _wp_get_comment_list( $search, $start, 1 ); if ( !$comments ) die('1'); $x = new WP_Ajax_Response(); foreach ( (array) $comments as $comment ) { get_comment( $comment ); ob_start(); _wp_comment_list_item( $comment->comment_ID ); $comment_list_item = ob_get_contents(); ob_end_clean(); $x->add( array( 'what' => 'comment', 'id' => $comment->comment_ID, 'data' => $comment_list_item ) ); } $x->send(); break; case 'add-meta' : if ( !current_user_can( 'edit_post', $id ) ) die('-1'); if ( $id < 0 ) { $now = current_time('timestamp', 1); if ( $pid = wp_insert_post( array( 'post_title' => sprintf('Draft created on %s at %s', date(get_option('date_format'), $now), date(get_option('time_format'), $now)) ) ) ) $mid = add_meta( $pid ); else die('0'); } else if ( !$mid = add_meta( $id ) ) { die('0'); } $meta = get_post_meta_by_id( $mid ); $key = $meta->meta_key; $value = $meta->meta_value; $pid = (int) $meta->post_id; $x = new WP_Ajax_Response( array( 'what' => 'meta', 'id' => $mid, 'data' => wp_ajax_meta_row( $pid, $mid, $key, $value ), 'supplemental' => array('postid' => $pid) ) ); $x->send(); break; case 'update-meta' : $mid = (int) array_pop(array_keys($_POST['meta'])); $key = $_POST['meta'][$mid]['key']; $value = $_POST['meta'][$mid]['value']; if ( !$meta = get_post_meta_by_id( $mid ) ) die('0'); // if meta doesn't exist if ( !current_user_can( 'edit_post', $meta->post_id ) ) die('-1'); if ( $u = update_meta( $mid, $key, $value ) ) { $key = stripslashes($key); $value = stripslashes($value); $x = new WP_Ajax_Response( array( 'what' => 'meta', 'id' => $mid, 'data' => wp_ajax_meta_row( $meta->post_id, $mid, $key, $value ), 'supplemental' => array('postid' => $meta->post_id) ) ); $x->send(); } die('1'); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). break; case 'add-user' : if ( !current_user_can('edit_users') ) die('-1'); require_once(ABSPATH . WPINC . '/registration.php'); if ( !$user_id = add_user() ) die('0'); elseif ( is_wp_error( $user_id ) ) { foreach( $user_id->get_error_messages() as $message ) echo "

    $message

    "; exit; } $user_object = new WP_User( $user_id ); $x = new WP_Ajax_Response( array( 'what' => 'user', 'id' => $user_id, 'data' => user_row( $user_object ), 'supplemental' => array('show-link' => sprintf(__( 'User %s added' ), "user-$user_id", $user_object->user_login)) ) ); $x->send(); break; case 'autosave' : // The name of this action is hardcoded in edit_post() $_POST['post_content'] = $_POST['content']; $_POST['post_excerpt'] = $_POST['excerpt']; $_POST['post_status'] = 'draft'; $_POST['post_category'] = explode(",", $_POST['catslist']); if($_POST['post_type'] == 'page' || empty($_POST['post_category'])) unset($_POST['post_category']); if($_POST['post_ID'] < 0) { $_POST['temp_ID'] = $_POST['post_ID']; $id = wp_write_post(); if( is_wp_error($id) ) die($id->get_error_message()); else die("$id"); } else { $post_ID = (int) $_POST['post_ID']; $_POST['ID'] = $post_ID; $post = get_post($post_ID); if ( 'page' == $post->post_type ) { if ( !current_user_can('edit_page', $post_ID) ) die(__('You are not allowed to edit this page.')); } else { if ( !current_user_can('edit_post', $post_ID) ) die(__('You are not allowed to edit this post.')); } wp_update_post($_POST); } die('0'); break; case 'autosave-generate-nonces' : $ID = (int) $_POST['post_ID']; if($_POST['post_type'] == 'post') { if(current_user_can('edit_post', $ID)) die(wp_create_nonce('update-post_' . $ID)); } if($_POST['post_type'] == 'page') { if(current_user_can('edit_page', $ID)) { die(wp_create_nonce('update-page_' . $ID)); } } die('0'); break; default : do_action( 'wp_ajax_' . $_POST['action'] ); die('0'); break; endswitch; ?> wordpress/wp-admin/admin-db.php:posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author = " . $user_id . " ORDER BY ID DESC"; $query = apply_filters('get_users_drafts', $query); return $wpdb->get_results( $query ); } function get_others_drafts( $user_id ) { global $wpdb; $user = get_userdata( $user_id ); $level_key = $wpdb->prefix . 'user_level'; $editable = get_editable_user_ids( $user_id ); if( !$editable ) { $other_drafts = ''; } else { $editable = join(',', $editable); $other_drafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author IN ($editable) AND post_author <> " . $user_id); } return apply_filters('get_others_drafts', $other_drafts); } function get_editable_authors( $user_id ) { global $wpdb; $editable = get_editable_user_ids( $user_id ); if( !$editable ) { return false; } else { $editable = join(',', $editable); $authors = $wpdb->get_results( "SELECT * FROM $wpdb->users WHERE ID IN ($editable) ORDER BY display_name" ); } return apply_filters('get_editable_authors', $authors); } function get_editable_user_ids( $user_id, $exclude_zeros = true ) { global $wpdb; $user = new WP_User( $user_id ); if ( ! $user->has_cap('edit_others_posts') ) { if ( $user->has_cap('edit_posts') || $exclude_zeros == false ) return array($user->id); else return false; } $level_key = $wpdb->prefix . 'user_level'; $query = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key'"; if ( $exclude_zeros ) $query .= " AND NOT meta_value LIKE '0'"; return $wpdb->get_col( $query ); } function get_author_user_ids() { global $wpdb; $level_key = $wpdb->prefix . 'user_level'; $query = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key' AND NOT meta_value LIKE '0'"; return $wpdb->get_col( $query ); } function get_nonauthor_user_ids() { global $wpdb; $level_key = $wpdb->prefix . 'user_level'; $query = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key' AND meta_value = '0'"; return $wpdb->get_col( $query ); } function wp_insert_category($catarr) { global $wpdb; extract($catarr, EXTR_SKIP); if( trim( $cat_name ) == '' ) return 0; $cat_ID = (int) $cat_ID; // Are we updating or creating? if (!empty ($cat_ID)) $update = true; else $update = false; $cat_name = apply_filters('pre_category_name', $cat_name); if (empty ($category_nicename)) $category_nicename = sanitize_title($cat_name); else $category_nicename = sanitize_title($category_nicename); $category_nicename = apply_filters('pre_category_nicename', $category_nicename); if (empty ($category_description)) $category_description = ''; $category_description = apply_filters('pre_category_description', $category_description); $category_parent = (int) $category_parent; if ( empty($category_parent) || !get_category( $category_parent ) || ($cat_ID && cat_is_ancestor_of($cat_ID, $category_parent) ) ) $category_parent = 0; if ( isset($posts_private) ) $posts_private = (int) $posts_private; else $posts_private = 0; if ( isset($links_private) ) $links_private = (int) $links_private; else $links_private = 0; if (!$update) { $wpdb->insert("INSERT INTO $wpdb->categories (cat_name, category_nicename, category_description, category_parent) VALUES ('$cat_name', '$category_nicename', '$category_description', $category_parent)",$wpdb->categories,"cat_ID"); $cat_ID = (int) $wpdb->insert_id; } else { $wpdb->query ("UPDATE $wpdb->categories SET cat_name = '$cat_name', category_nicename = '$category_nicename', category_description = '$category_description', category_parent = $category_parent, links_private = '$links_private', posts_private = '$posts_private' WHERE cat_ID = " . $cat_ID); } if ( $category_nicename == '' ) { $category_nicename = sanitize_title($cat_name, $cat_ID ); $wpdb->query( "UPDATE $wpdb->categories SET category_nicename = '$category_nicename' WHERE cat_ID = " . $cat_ID ); } // Keep in mind when using this filter and altering the cat_ID that the two queries above // have already taken place with the OLD cat_ID // Also note that you may have post2cat entries with the old cat_ID if this is an update if ($update) { do_action('edit_category', $cat_ID); } else { do_action('create_category', $cat_ID); do_action('add_category', $cat_ID); } $cat_ID = apply_filters('cat_id_filter', $cat_ID, $update); clean_category_cache($cat_ID); if ($update) do_action('edited_category', $cat_ID); else do_action('created_category', $cat_ID); return $cat_ID; } function wp_update_category($catarr) { global $wpdb; $cat_ID = (int) $catarr['cat_ID']; if( $cat_ID == $catarr['category_parent'] ) return false; // First, get all of the original fields $category = get_category($cat_ID, ARRAY_A); // Escape data pulled from DB. $category = add_magic_quotes($category); // Merge old and new fields with new fields overwriting old ones. $catarr = array_merge($category, $catarr); return wp_insert_category($catarr); } function wp_delete_category($cat_ID) { global $wpdb; $cat_ID = (int) $cat_ID; $default_cat = get_option('default_category'); $default_link_cat = get_option('default_link_category'); // Don't delete either of the default cats if ( $cat_ID == $default_cat || $cat_ID == $default_link_cat ) return 0; $category = get_category($cat_ID); $parent = $category->category_parent; // Delete the category if ( !$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = " . $cat_ID) ) return 0; // Update children to point to new parent $wpdb->query("UPDATE $wpdb->categories SET category_parent = " . $parent . " WHERE category_parent = " . $cat_ID); // Only set posts and links to the default category if they're not in another category already $posts = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id = " . $cat_ID); foreach ( (array) $posts as $post_id ) { $cats = wp_get_post_categories($post_id); if ( 1 == count($cats) ) $cats = array($default_cat); else $cats = array_diff($cats, array($cat_ID)); wp_set_post_categories($post_id, $cats); } $links = $wpdb->get_col("SELECT link_id FROM $wpdb->link2cat WHERE category_id = " . $cat_ID); foreach ( (array) $links as $link_id ) { $cats = wp_get_link_cats($link_id); if ( 1 == count($cats) ) $cats = array($default_link_cat); else $cats = array_diff($cats, array($cat_ID)); wp_set_link_cats($link_id, $cats); } clean_category_cache($cat_ID); do_action('delete_category', $cat_ID); return 1; } function wp_create_category($cat_name) { $cat_array = compact('cat_name'); return wp_insert_category($cat_array); } function wp_create_categories($categories, $post_id = '') { $cat_ids = array (); foreach ($categories as $category) { if ($id = category_exists($category)) $cat_ids[] = $id; else if ($id = wp_create_category($category)) $cat_ids[] = $id; } if ($post_id) wp_set_post_categories($post_id, $cat_ids); return $cat_ids; } function category_exists($cat_name) { global $wpdb; if (!$category_nicename = sanitize_title($cat_name)) return 0; return (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE category_nicename = '$category_nicename'"); } function wp_delete_user($id, $reassign = 'novalue') { global $wpdb; $id = (int) $id; $user = get_userdata($id); if ($reassign == 'novalue') { $post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_author = " . $id); if ($post_ids) { foreach ($post_ids as $post_id) wp_delete_post($post_id); } // Clean links $wpdb->query("DELETE FROM $wpdb->links WHERE link_owner = " . $id); } else { $reassign = (int) $reassign; $wpdb->query("UPDATE $wpdb->posts SET post_author = {$reassign} WHERE post_author = {".$id."}"); $wpdb->query("UPDATE $wpdb->links SET link_owner = {$reassign} WHERE link_owner = {".$id."}"); } // FINALLY, delete user do_action('delete_user', $id); $wpdb->query("DELETE FROM $wpdb->users WHERE ID = " . $id); $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = " . $id); wp_cache_delete($id, 'users'); wp_cache_delete($user->user_login, 'userlogins'); return true; } function wp_revoke_user($id) { $id = (int) $id; $user = new WP_User($id); $user->remove_all_caps(); } function wp_insert_link($linkdata) { global $wpdb, $current_user; extract($linkdata, EXTR_SKIP); $update = false; if ( !empty($link_id) ) $update = true; $link_id = (int) $link_id; if( trim( $link_name ) == '' ) return 0; $link_name = apply_filters('pre_link_name', $link_name); if( trim( $link_url ) == '' ) return 0; $link_url = apply_filters('pre_link_url', $link_url); if ( empty($link_rating) ) $link_rating = 0; else $link_rating = (int) $link_rating; if ( empty($link_image) ) $link_image = ''; $link_image = apply_filters('pre_link_image', $link_image); if ( empty($link_target) ) $link_target = ''; $link_target = apply_filters('pre_link_target', $link_target); if ( empty($link_visible) ) $link_visible = 'Y'; $link_visibile = preg_replace('/[^YNyn]/', '', $link_visible); if ( empty($link_owner) ) $link_owner = $current_user->id; else $link_owner = (int) $link_owner; if ( empty($link_notes) ) $link_notes = ''; $link_notes = apply_filters('pre_link_notes', $link_notes); if ( empty($link_description) ) $link_description = ''; $link_description = apply_filters('pre_link_description', $link_description); if ( empty($link_rss) ) $link_rss = ''; $link_rss = apply_filters('pre_link_rss', $link_rss); if ( empty($link_rel) ) $link_rel = ''; $link_rel = apply_filters('pre_link_rel', $link_rel); // Make sure we set a valid category // if (0 == count($link_category) || !is_array($link_category)) { $link_category = get_option('default_link_category'); // } // printf ("AAAAAAAAAAAAAAAAAAAAaa"); //print_r ($link_category); if ( $update ) { $wpdb->query("UPDATE $wpdb->links SET link_url='$link_url', link_name='$link_name', link_image='$link_image', link_target='$link_target', link_visible='$link_visible', link_description='$link_description', link_rating=$link_rating, link_rel='$link_rel', link_notes='$link_notes', link_rss = '$link_rss' WHERE link_id = " . $link_id); } else { $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_image, link_target, link_category, link_description, link_visible, link_owner, link_rating, link_rel, link_notes, link_rss) VALUES('$link_url','$link_name', '$link_image', '$link_target', '$link_category', '$link_description', '$link_visible', $link_owner, $link_rating, '$link_rel', '$link_notes', '$link_rss')",$wpdb->links,"link_id"); $link_id = (int) $wpdb->insert_id; } wp_set_link_cats($link_id, $link_category); if ( $update ) do_action('edit_link', $link_id); else do_action('add_link', $link_id); return $link_id; } function wp_update_link($linkdata) { global $wpdb; $link_id = (int) $linkdata['link_id']; $link = get_link($link_id, ARRAY_A); // Escape data pulled from DB. $link = add_magic_quotes($link); // Passed link category list overwrites existing category list if not empty. if ( isset($linkdata['link_category']) && is_array($linkdata['link_category']) && 0 != count($linkdata['link_category']) ) $link_cats = $linkdata['link_category']; else $link_cats = $link['link_category']; // Merge old and new fields with new fields overwriting old ones. $linkdata = array_merge($link, $linkdata); $linkdata['link_category'] = $link_cats; return wp_insert_link($linkdata); } function wp_delete_link($link_id) { global $wpdb; do_action('delete_link', $link_id); $categories = wp_get_link_cats($link_id); if( is_array( $categories ) ) { foreach ( $categories as $category ) { $wpdb->query("UPDATE $wpdb->categories SET link_count = link_count - 1 WHERE cat_ID = " . $category); wp_cache_delete($category, 'category'); do_action('edit_category', $cat_id); } } $wpdb->query("DELETE FROM $wpdb->link2cat WHERE link_id = " . $link_id); $wpdb->query("DELETE FROM $wpdb->links WHERE link_id = " . $link_id); do_action('deleted_link', $link_id); return true; } function wp_get_link_cats($link_ID = 0) { global $wpdb; $sql = "SELECT category_id FROM $wpdb->link2cat WHERE link_id = $link_ID ORDER BY category_id"; $result = $wpdb->get_col($sql); if ( !$result ) $result = array(); return array_unique($result); } function wp_set_link_cats($link_ID = 0, $link_categories = array()) { global $wpdb; // If $link_categories isn't already an array, make it one: if (!is_array($link_categories) || 0 == count($link_categories)) $link_categories = array(get_option('default_link_category')); $link_categories = array_unique($link_categories); // First the old categories $old_categories = $wpdb->get_col(" SELECT category_id FROM $wpdb->link2cat WHERE link_id = " . $link_ID); if (!$old_categories) { $old_categories = array(); } else { $old_categories = array_unique($old_categories); } // Delete any? $delete_cats = array_diff($old_categories,$link_categories); if ($delete_cats) { foreach ($delete_cats as $del) { $del = (int) $del; $wpdb->query("DELETE FROM $wpdb->link2cat WHERE category_id = " . $del . " AND link_id = " . $link_ID ); } } // Add any? $add_cats = array_diff($link_categories, $old_categories); if ($add_cats) { foreach ($add_cats as $new_cat) { $new_cat = (int) $new_cat; if ( !empty($new_cat) ) $wpdb->query("INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES (" . $link_ID. ",". $new_cat. ")"); } } // Update category counts. $all_affected_cats = array_unique(array_merge($link_categories, $old_categories)); foreach ( $all_affected_cats as $cat_id ) { $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->link2cat, $wpdb->links WHERE $wpdb->links.link_id = $wpdb->link2cat.link_id AND category_id = " . $cat_id); $wpdb->query("UPDATE $wpdb->categories SET link_count = " . $count . " WHERE cat_ID = " . $cat_id); wp_cache_delete($cat_id, 'category'); do_action('edit_category', $cat_id); } } // wp_set_link_cats() function post_exists($title, $content = '', $post_date = '') { global $wpdb; if (!empty ($post_date)) $post_date = "AND post_date = '$post_date'"; if (!empty ($title)) return $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$title' $post_date"); else if (!empty ($content)) return $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_content = '$content' $post_date"); return 0; } function comment_exists($comment_author, $comment_date) { global $wpdb; return $wpdb->get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_author = '$comment_author' AND comment_date = '$comment_date'"); } ?> #wordpress/wp-admin/admin-footer.php8

    &wordpress/wp-admin/admin-functions.php7get_error_message() ); else return $result; } // Creates a new post from the "Write Post" form using $_POST information. function wp_write_post() { global $user_ID; if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_pages' ) ) return new WP_Error( 'edit_pages', __( 'You are not allowed to create pages on this blog.' ) ); } else { if ( !current_user_can( 'edit_posts' ) ) return new WP_Error( 'edit_posts', __( 'You are not allowed to create posts or drafts on this blog.' ) ); } // Check for autosave collisions $temp_id = false; if ( isset($_POST['temp_ID']) ) { $temp_id = (int) $_POST['temp_ID']; if ( !$draft_ids = get_user_option( 'autosave_draft_ids' ) ) $draft_ids = array(); foreach ( $draft_ids as $temp => $real ) if ( time() + $temp > 86400 ) // 1 day: $temp is equal to -1 * time( then ) unset($draft_ids[$temp]); if ( isset($draft_ids[$temp_id]) ) { // Edit, don't write $_POST['post_ID'] = $draft_ids[$temp_id]; unset($_POST['temp_ID']); update_user_option( $user_ID, 'autosave_draft_ids', $draft_ids ); return edit_post(); } } // Rename. $_POST['post_content'] = $_POST['content']; $_POST['post_excerpt'] = $_POST['excerpt']; $_POST['post_parent'] = $_POST['parent_id']; $_POST['to_ping'] = $_POST['trackback_url']; if (!empty ( $_POST['post_author_override'] ) ) { $_POST['post_author'] = (int) $_POST['post_author_override']; } else { if (!empty ( $_POST['post_author'] ) ) { $_POST['post_author'] = (int) $_POST['post_author']; } else { $_POST['post_author'] = (int) $_POST['user_ID']; } } if ( $_POST['post_author'] != $_POST['user_ID'] ) { if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_others_pages' ) ) return new WP_Error( 'edit_others_pages', __( 'You are not allowed to create pages as this user.' ) ); } else { if ( !current_user_can( 'edit_others_posts' ) ) return new WP_Error( 'edit_others_posts', __( 'You are not allowed to post as this user.' ) ); } } // What to do based on which button they pressed if ('' != $_POST['saveasdraft'] ) $_POST['post_status'] = 'draft'; if ('' != $_POST['saveasprivate'] ) $_POST['post_status'] = 'private'; if ('' != $_POST['publish'] ) $_POST['post_status'] = 'publish'; if ('' != $_POST['advanced'] ) $_POST['post_status'] = 'draft'; if ( 'page' == $_POST['post_type'] ) { if ('publish' == $_POST['post_status'] && !current_user_can( 'publish_pages' ) ) $_POST['post_status'] = 'draft'; } else { if ('publish' == $_POST['post_status'] && !current_user_can( 'publish_posts' ) ) $_POST['post_status'] = 'draft'; } if (!isset( $_POST['comment_status'] )) $_POST['comment_status'] = 'closed'; if (!isset( $_POST['ping_status'] )) $_POST['ping_status'] = 'closed'; if (!empty ( $_POST['edit_date'] ) ) { $aa = $_POST['aa']; $mm = $_POST['mm']; $jj = $_POST['jj']; $hh = $_POST['hh']; $mn = $_POST['mn']; $ss = $_POST['ss']; $jj = ($jj > 31 ) ? 31 : $jj; $hh = ($hh > 23 ) ? $hh -24 : $hh; $mn = ($mn > 59 ) ? $mn -60 : $mn; $ss = ($ss > 59 ) ? $ss -60 : $ss; $_POST['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss ); $_POST['post_date_gmt'] = get_gmt_from_date( $_POST['post_date'] ); } unset($_POST['no_filter']); // Create the post. $post_ID = wp_insert_post( $_POST ); add_meta( $post_ID ); // Reunite any orphaned attachments with their parent if ( !$draft_ids = get_user_option( 'autosave_draft_ids' ) ) $draft_ids = array(); if ( $draft_temp_id = (int) array_search( $post_ID, $draft_ids ) ) relocate_children( $draft_temp_id, $post_ID ); if ( $temp_id && $temp_id != $draft_temp_id ) relocate_children( $temp_id, $post_ID ); // Update autosave collision detection if ( $temp_id ) { $draft_ids[$temp_id] = $post_ID; update_user_option( $user_ID, 'autosave_draft_ids', $draft_ids ); } // Now that we have an ID we can fix any attachment anchor hrefs fix_attachment_links( $post_ID ); return $post_ID; } // Move child posts to a new parent function relocate_children( $old_ID, $new_ID ) { global $wpdb; $old_ID = (int) $old_ID; $new_ID = (int) $new_ID; return $wpdb->query( "UPDATE $wpdb->posts SET post_parent = ". $new_ID . " WHERE post_parent = " . $old_ID ); } // Replace hrefs of attachment anchors with up-to-date permalinks. function fix_attachment_links( $post_ID ) { global $wp_rewrite; $post = & get_post( $post_ID, ARRAY_A ); $search = "#]+rel=('|\")[^'\"]*attachment[^>]*>#ie"; // See if we have any rel="attachment" links if ( 0 == preg_match_all( $search, $post['post_content'], $anchor_matches, PREG_PATTERN_ORDER ) ) return; $i = 0; $search = "#[\s]+rel=(\"|')(.*?)wp-att-(\d+)\\1#i"; foreach ( $anchor_matches[0] as $anchor ) { if ( 0 == preg_match( $search, $anchor, $id_matches ) ) continue; $id = (int) $id_matches[3]; // While we have the attachment ID, let's adopt any orphans. $attachment = & get_post( $id, ARRAY_A ); if ( ! empty( $attachment) && ! is_object( get_post( $attachment['post_parent'] ) ) ) { $attachment['post_parent'] = $post_ID; // Escape data pulled from DB. $attachment = add_magic_quotes( $attachment); wp_update_post( $attachment); } $post_search[$i] = $anchor; $post_replace[$i] = preg_replace( "#href=(\"|')[^'\"]*\\1#e", "stripslashes( 'href=\\1' ).get_attachment_link( $id ).stripslashes( '\\1' )", $anchor ); ++$i; } $post['post_content'] = str_replace( $post_search, $post_replace, $post['post_content'] ); // Escape data pulled from DB. $post = add_magic_quotes( $post); return wp_update_post( $post); } // Update an existing post with values provided in $_POST. function edit_post() { global $user_ID; $post_ID = (int) $_POST['post_ID']; if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_ID ) ) wp_die( __('You are not allowed to edit this page.' )); } else { if ( !current_user_can( 'edit_post', $post_ID ) ) wp_die( __('You are not allowed to edit this post.' )); } // Autosave shouldn't save too soon after a real save if ( 'autosave' == $_POST['action'] ) { $post =& get_post( $post_ID ); $now = time(); $then = strtotime($post->post_date_gmt . ' +0000'); // Keep autosave_interval in sync with autosave-js.php. $delta = apply_filters( 'autosave_interval', 120 ) / 2; if ( ($now - $then) < $delta ) return $post_ID; } // Rename. $_POST['ID'] = (int) $_POST['post_ID']; $_POST['post_content'] = $_POST['content']; $_POST['post_excerpt'] = $_POST['excerpt']; $_POST['post_parent'] = $_POST['parent_id']; $_POST['to_ping'] = $_POST['trackback_url']; if (!empty ( $_POST['post_author_override'] ) ) { $_POST['post_author'] = (int) $_POST['post_author_override']; } else if (!empty ( $_POST['post_author'] ) ) { $_POST['post_author'] = (int) $_POST['post_author']; } else { $_POST['post_author'] = (int) $_POST['user_ID']; } if ( $_POST['post_author'] != $_POST['user_ID'] ) { if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_others_pages' ) ) wp_die( __('You are not allowed to edit pages as this user.' )); } else { if ( !current_user_can( 'edit_others_posts' ) ) wp_die( __('You are not allowed to edit posts as this user.' )); } } // What to do based on which button they pressed if ('' != $_POST['saveasdraft'] ) $_POST['post_status'] = 'draft'; if ('' != $_POST['saveasprivate'] ) $_POST['post_status'] = 'private'; if ('' != $_POST['publish'] ) $_POST['post_status'] = 'publish'; if ('' != $_POST['advanced'] ) $_POST['post_status'] = 'draft'; if ( 'page' == $_POST['post_type'] ) { if ('publish' == $_POST['post_status'] && !current_user_can( 'edit_published_pages' )) $_POST['post_status'] = 'draft'; } else { if ('publish' == $_POST['post_status'] && !current_user_can( 'edit_published_posts' )) $_POST['post_status'] = 'draft'; } if (!isset( $_POST['comment_status'] )) $_POST['comment_status'] = 'closed'; if (!isset( $_POST['ping_status'] )) $_POST['ping_status'] = 'closed'; if (!empty ( $_POST['edit_date'] ) ) { $aa = $_POST['aa']; $mm = $_POST['mm']; $jj = $_POST['jj']; $hh = $_POST['hh']; $mn = $_POST['mn']; $ss = $_POST['ss']; $jj = ($jj > 31 ) ? 31 : $jj; $hh = ($hh > 23 ) ? $hh -24 : $hh; $mn = ($mn > 59 ) ? $mn -60 : $mn; $ss = ($ss > 59 ) ? $ss -60 : $ss; $_POST['post_date'] = "$aa-$mm-$jj $hh:$mn:$ss"; $_POST['post_date_gmt'] = get_gmt_from_date( "$aa-$mm-$jj $hh:$mn:$ss" ); } // Meta Stuff if ( $_POST['meta'] ) { foreach ( $_POST['meta'] as $key => $value ) update_meta( $key, $value['key'], $value['value'] ); } if ( $_POST['deletemeta'] ) { foreach ( $_POST['deletemeta'] as $key => $value ) delete_meta( $key ); } unset($_POST['no_filter']); add_meta( $post_ID ); wp_update_post( $_POST ); // Reunite any orphaned attachments with their parent if ( !$draft_ids = get_user_option( 'autosave_draft_ids' ) ) $draft_ids = array(); if ( $draft_temp_id = (int) array_search( $post_ID, $draft_ids ) ) relocate_children( $draft_temp_id, $post_ID ); // Now that we have an ID we can fix any attachment anchor hrefs fix_attachment_links( $post_ID ); return $post_ID; } function edit_comment() { global $user_ID; $comment_ID = (int) $_POST['comment_ID']; $comment_post_ID = (int) $_POST['comment_post_ID']; if (!current_user_can( 'edit_post', $comment_post_ID )) wp_die( __('You are not allowed to edit comments on this post, so you cannot edit this comment.' )); $_POST['comment_author'] = $_POST['newcomment_author']; $_POST['comment_author_email'] = $_POST['newcomment_author_email']; $_POST['comment_author_url'] = $_POST['newcomment_author_url']; $_POST['comment_approved'] = $_POST['comment_status']; $_POST['comment_content'] = $_POST['content']; $_POST['comment_ID'] = (int) $_POST['comment_ID']; if (!empty ( $_POST['edit_date'] ) ) { $aa = $_POST['aa']; $mm = $_POST['mm']; $jj = $_POST['jj']; $hh = $_POST['hh']; $mn = $_POST['mn']; $ss = $_POST['ss']; $jj = ($jj > 31 ) ? 31 : $jj; $hh = ($hh > 23 ) ? $hh -24 : $hh; $mn = ($mn > 59 ) ? $mn -60 : $mn; $ss = ($ss > 59 ) ? $ss -60 : $ss; $_POST['comment_date'] = "$aa-$mm-$jj $hh:$mn:$ss"; } wp_update_comment( $_POST); } // Get an existing post and format it for editing. function get_post_to_edit( $id ) { $post = get_post( $id ); $post->post_content = format_to_edit( $post->post_content, user_can_richedit() ); $post->post_content = apply_filters( 'content_edit_pre', $post->post_content); $post->post_excerpt = format_to_edit( $post->post_excerpt); $post->post_excerpt = apply_filters( 'excerpt_edit_pre', $post->post_excerpt); $post->post_title = format_to_edit( $post->post_title ); $post->post_title = apply_filters( 'title_edit_pre', $post->post_title ); $post->post_password = format_to_edit( $post->post_password ); $post->menu_order = (int) $post->menu_order; if ( $post->post_type == 'page' ) $post->page_template = get_post_meta( $id, '_wp_page_template', true ); return $post; } // Default post information to use when populating the "Write Post" form. function get_default_post_to_edit() { if ( !empty( $_REQUEST['post_title'] ) ) $post_title = wp_specialchars( stripslashes( $_REQUEST['post_title'] )); else if ( !empty( $_REQUEST['popuptitle'] ) ) { $post_title = wp_specialchars( stripslashes( $_REQUEST['popuptitle'] )); $post_title = funky_javascript_fix( $post_title ); } else { $post_title = ''; } if ( !empty( $_REQUEST['content'] ) ) $post_content = wp_specialchars( stripslashes( $_REQUEST['content'] )); else if ( !empty( $post_title ) ) { $text = wp_specialchars( stripslashes( urldecode( $_REQUEST['text'] ) ) ); $text = funky_javascript_fix( $text); $popupurl = clean_url($_REQUEST['popupurl']); $post_content = ''.$post_title.''."\n$text"; } if ( !empty( $_REQUEST['excerpt'] ) ) $post_excerpt = wp_specialchars( stripslashes( $_REQUEST['excerpt'] )); else $post_excerpt = ''; $post->post_status = 'draft'; $post->comment_status = get_option( 'default_comment_status' ); $post->ping_status = get_option( 'default_ping_status' ); $post->post_pingback = get_option( 'default_pingback_flag' ); $post->post_category = get_option( 'default_category' ); $post->post_content = apply_filters( 'default_content', $post_content); $post->post_title = apply_filters( 'default_title', $post_title ); $post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt); $post->page_template = 'default'; $post->post_parent = 0; $post->menu_order = 0; return $post; } function get_comment_to_edit( $id ) { $comment = get_comment( $id ); $comment->comment_ID = (int) $comment->comment_ID; $comment->comment_post_ID = (int) $comment->comment_post_ID; $comment->comment_content = format_to_edit( $comment->comment_content ); $comment->comment_content = apply_filters( 'comment_edit_pre', $comment->comment_content); $comment->comment_author = format_to_edit( $comment->comment_author ); $comment->comment_author_email = format_to_edit( $comment->comment_author_email ); $comment->comment_author_url = clean_url($comment->comment_author_url); $comment->comment_author_url = format_to_edit( $comment->comment_author_url ); return $comment; } function get_category_to_edit( $id ) { $category = get_category( $id ); $category->term_id = (int) $category->term_id; $category->parent = (int) $category->parent; return $category; } function wp_dropdown_roles( $default = false ) { global $wp_roles; $r = ''; foreach( $wp_roles->role_names as $role => $name ) if ( $default == $role ) // Make default first in list $p = "\n\t"; else $r .= "\n\t"; echo $p . $r; } function get_user_to_edit( $user_id ) { $user = new WP_User( $user_id ); $user->user_login = attribute_escape($user->user_login); $user->user_email = attribute_escape($user->user_email); $user->user_url = clean_url($user->user_url); $user->first_name = attribute_escape($user->first_name); $user->last_name = attribute_escape($user->last_name); $user->display_name = attribute_escape($user->display_name); $user->nickname = attribute_escape($user->nickname); $user->aim = attribute_escape($user->aim); $user->yim = attribute_escape($user->yim); $user->jabber = attribute_escape($user->jabber); $user->description = wp_specialchars($user->description); return $user; } // Creates a new user from the "Users" form using $_POST information. function add_user() { if ( func_num_args() ) { // The hackiest hack that ever did hack global $current_user, $wp_roles; $user_id = (int) func_get_arg( 0 ); if ( isset( $_POST['role'] ) ) { if( $user_id != $current_user->id || $wp_roles->role_objects[$_POST['role']]->has_cap( 'edit_users' ) ) { $user = new WP_User( $user_id ); $user->set_role( $_POST['role'] ); } } } else { add_action( 'user_register', 'add_user' ); // See above return edit_user(); } } function edit_user( $user_id = 0 ) { global $current_user, $wp_roles, $wpdb; if ( $user_id != 0 ) { $update = true; $user->ID = (int) $user_id; $userdata = get_userdata( $user_id ); $user->user_login = $wpdb->escape( $userdata->user_login ); } else { $update = false; $user = ''; } if ( isset( $_POST['user_login'] )) $user->user_login = wp_specialchars( trim( $_POST['user_login'] )); $pass1 = $pass2 = ''; if ( isset( $_POST['pass1'] )) $pass1 = $_POST['pass1']; if ( isset( $_POST['pass2'] )) $pass2 = $_POST['pass2']; if ( isset( $_POST['role'] ) && current_user_can( 'edit_users' ) ) { if( $user_id != $current_user->id || $wp_roles->role_objects[$_POST['role']]->has_cap( 'edit_users' )) $user->role = $_POST['role']; } if ( isset( $_POST['email'] )) $user->user_email = wp_specialchars( trim( $_POST['email'] )); if ( isset( $_POST['url'] ) ) { $user->user_url = clean_url( trim( $_POST['url'] )); $user->user_url = preg_match('/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $user->user_url) ? $user->user_url : 'http://'.$user->user_url; } if ( isset( $_POST['first_name'] )) $user->first_name = wp_specialchars( trim( $_POST['first_name'] )); if ( isset( $_POST['last_name'] )) $user->last_name = wp_specialchars( trim( $_POST['last_name'] )); if ( isset( $_POST['nickname'] )) $user->nickname = wp_specialchars( trim( $_POST['nickname'] )); if ( isset( $_POST['display_name'] )) $user->display_name = wp_specialchars( trim( $_POST['display_name'] )); if ( isset( $_POST['description'] )) $user->description = trim( $_POST['description'] ); if ( isset( $_POST['jabber'] )) $user->jabber = wp_specialchars( trim( $_POST['jabber'] )); if ( isset( $_POST['aim'] )) $user->aim = wp_specialchars( trim( $_POST['aim'] )); if ( isset( $_POST['yim'] )) $user->yim = wp_specialchars( trim( $_POST['yim'] )); if ( !$update ) $user->rich_editing = 'true'; // Default to true for new users. else if ( isset( $_POST['rich_editing'] ) ) $user->rich_editing = $_POST['rich_editing']; else $user->rich_editing = 'false'; $errors = new WP_Error(); /* checking that username has been typed */ if ( $user->user_login == '' ) $errors->add( 'user_login', __( 'ERROR: Please enter a username.' )); /* checking the password has been typed twice */ do_action_ref_array( 'check_passwords', array ( $user->user_login, & $pass1, & $pass2 )); if (!$update ) { if ( $pass1 == '' || $pass2 == '' ) $errors->add( 'pass', __( 'ERROR: Please enter your password twice.' )); } else { if ((empty ( $pass1 ) && !empty ( $pass2 ) ) || (empty ( $pass2 ) && !empty ( $pass1 ) ) ) $errors->add( 'pass', __( "ERROR: you typed your new password only once." )); } /* Check for "\" in password */ if( strpos( " ".$pass1, "\\" ) ) $errors->add( 'pass', __( 'ERROR: Passwords may not contain the character "\\".' )); /* checking the password has been typed twice the same */ if ( $pass1 != $pass2 ) $errors->add( 'pass', __( 'ERROR: Please type the same password in the two password fields.' )); if (!empty ( $pass1 )) $user->user_pass = $pass1; if ( !$update && !validate_username( $user->user_login ) ) $errors->add( 'user_login', __( 'ERROR: This username is invalid. Please enter a valid username.' )); if (!$update && username_exists( $user->user_login )) $errors->add( 'user_login', __( 'ERROR: This username is already registered, please choose another one.' )); /* checking e-mail address */ if ( empty ( $user->user_email ) ) { $errors->add( 'user_email', __( "ERROR: please type an e-mail address" )); } else if (!is_email( $user->user_email ) ) { $errors->add( 'user_email', __( "ERROR: the email address isn't correct" )); } if ( $errors->get_error_codes() ) return $errors; if ( $update ) { $user_id = wp_update_user( get_object_vars( $user )); } else { $user_id = wp_insert_user( get_object_vars( $user )); wp_new_user_notification( $user_id ); } return $user_id; } function get_link_to_edit( $link_id ) { $link = get_link( $link_id ); $link->link_url = clean_url($link->link_url); $link->link_name = attribute_escape($link->link_name); $link->link_image = attribute_escape($link->link_image); $link->link_description = attribute_escape($link->link_description); $link->link_rss = clean_url($link->link_rss); $link->link_rel = attribute_escape($link->link_rel); $link->link_notes = wp_specialchars($link->link_notes); $link->post_category = $link->link_category; return $link; } function get_default_link_to_edit() { if ( isset( $_GET['linkurl'] ) ) $link->link_url = clean_url( $_GET['linkurl']); else $link->link_url = ''; if ( isset( $_GET['name'] ) ) $link->link_name = attribute_escape( $_GET['name']); else $link->link_name = ''; $link->link_visible = 'Y'; return $link; } function add_link() { return edit_link(); } function edit_link( $link_id = '' ) { if (!current_user_can( 'manage_links' )) wp_die( __( 'Cheatin’ uh?' )); $_POST['link_url'] = wp_specialchars( $_POST['link_url'] ); $_POST['link_url'] = clean_url($_POST['link_url']); $_POST['link_name'] = wp_specialchars( $_POST['link_name'] ); $_POST['link_image'] = wp_specialchars( $_POST['link_image'] ); $_POST['link_rss'] = clean_url($_POST['link_rss']); $_POST['link_category'] = $_POST['post_category']; if ( !empty( $link_id ) ) { $_POST['link_id'] = $link_id; return wp_update_link( $_POST); } else { return wp_insert_link( $_POST); } } function url_shorten( $url ) { $short_url = str_replace( 'http://', '', stripslashes( $url )); $short_url = str_replace( 'www.', '', $short_url ); if ('/' == substr( $short_url, -1 )) $short_url = substr( $short_url, 0, -1 ); if ( strlen( $short_url ) > 35 ) $short_url = substr( $short_url, 0, 32 ).'...'; return $short_url; } function selected( $selected, $current) { if ( $selected == $current) echo ' selected="selected"'; } function checked( $checked, $current) { if ( $checked == $current) echo ' checked="checked"'; } function return_categories_list( $parent = 0 ) { global $wpdb; return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = " . $parent . " AND ( link_count = 0 OR category_count <> 0 OR ( link_count = 0 AND category_count = 0 ) ) ORDER BY category_count DESC" ); } function sort_cats( $cat1, $cat2 ) { if ( $cat1['checked'] || $cat2['checked'] ) return ( $cat1['checked'] && !$cat2['checked'] ) ? -1 : 1; else return strcasecmp( $cat1['cat_name'], $cat2['cat_name'] ); } function get_nested_categories( $default = 0, $parent = 0 ) { global $post_ID, $link_id, $mode, $wpdb; if ( $post_ID ) { $checked_categories = $wpdb->get_col( " SELECT category_id FROM $wpdb->categories as cat, $wpdb->post2cat as postcat WHERE postcat.category_id = cat.cat_ID AND postcat.post_id = " . $post_ID ); if ( count( $checked_categories ) == 0 ) { // No selected categories, strange $checked_categories[] = $default; } } else if ( $link_id ) { $checked_categories = $wpdb->get_col( " SELECT category_id FROM $wpdb->categories as cat, $wpdb->link2cat as linkcat WHERE linkcat.category_id = cat.cat_ID AND linkcat.link_id = " . $link_id ); if ( count( $checked_categories ) == 0 ) { // No selected categories, strange $checked_categories[] = $default; } } else { $checked_categories[] = $default; } $cats = return_categories_list( $parent); $result = array (); if ( is_array( $cats ) ) { foreach ( $cats as $cat) { $result[$cat]['children'] = get_nested_categories( $default, $cat); $result[$cat]['cat_ID'] = $cat; $result[$cat]['checked'] = in_array( $cat, $checked_categories ); $result[$cat]['cat_name'] = get_the_category_by_ID( $cat); } } usort( $result, 'sort_cats' ); return $result; } function write_nested_categories( $categories ) { foreach ( $categories as $category ) { echo '
  • "; if ( $category['children'] ) { echo "
      \n"; write_nested_categories( $category['children'] ); echo "
    \n"; } } } function dropdown_categories( $default = 0 ) { write_nested_categories( get_nested_categories( $default) ); } function return_link_categories_list( $parent = 0 ) { global $wpdb; return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = ". $parent . " AND ( category_count = 0 OR link_count <> 0 OR ( link_count = 0 AND category_count = 0 ) ) ORDER BY link_count DESC" ); } function get_nested_link_categories( $default = 0, $parent = 0 ) { global $post_ID, $link_id, $mode, $wpdb; if ( $link_id ) { $checked_categories = $wpdb->get_col( " SELECT category_id FROM $wpdb->categories, $wpdb->link2cat WHERE $wpdb->link2cat.category_id = cat_ID AND $wpdb->link2cat.link_id = " . $link_id ); if ( count( $checked_categories ) == 0 ) { // No selected categories, strange $checked_categories[] = $default; } } else { $checked_categories[] = $default; } $cats = return_link_categories_list( $parent); $result = array (); if ( is_array( $cats ) ) { foreach ( $cats as $cat) { $result[$cat]['children'] = get_nested_link_categories( $default, $cat); $result[$cat]['cat_ID'] = $cat; $result[$cat]['checked'] = in_array( $cat, $checked_categories ); $result[$cat]['cat_name'] = get_the_category_by_ID( $cat); } } usort( $result, 'sort_cats' ); return $result; } function dropdown_link_categories( $default = 0 ) { write_nested_categories( get_nested_link_categories( $default) ); } // Dandy new recursive multiple category stuff. function cat_rows( $parent = 0, $level = 0, $categories = 0 ) { if (!$categories ) $categories = get_categories( 'hide_empty=0' ); $children = _get_category_hierarchy(); if ( $categories ) { ob_start(); foreach ( $categories as $category ) { if ( $category->category_parent == $parent) { echo "\t" . _cat_row( $category, $level ); if ( isset($children[$category->cat_ID]) ) cat_rows( $category->cat_ID, $level +1, $categories ); } } $output = ob_get_contents(); ob_end_clean(); $output = apply_filters('cat_rows', $output); echo $output; } else { return false; } } function _cat_row( $category, $level, $name_override = false ) { global $class; $pad = str_repeat( '— ', $level ); if ( current_user_can( 'manage_categories' ) ) { $edit = "".__( 'Edit' ).""; $default_cat_id = (int) get_option( 'default_category' ); $default_link_cat_id = (int) get_option( 'default_link_category' ); if ( ($category->cat_ID != $default_cat_id ) && ($category->cat_ID != $default_link_cat_id ) ) $edit .= "cat_ID ) . "' onclick=\"return deleteSomething( 'cat', $category->cat_ID, '" . js_escape(sprintf( __("You are about to delete the category '%s'.\nAll posts that were only assigned to this category will be assigned to the '%s' category.\nAll links that were only assigned to this category will be assigned to the '%s' category.\n'OK' to delete, 'Cancel' to stop." ), $category->cat_name, get_catname( $default_cat_id ), get_catname( $default_link_cat_id ) )) . "' );\" class='delete'>".__( 'Delete' ).""; else $edit .= "".__( "Default" ); } else $edit = ''; $class = ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || " class='alternate'" == $class ) ? '' : " class='alternate'"; $category->category_count = number_format( $category->category_count ); $category->link_count = number_format( $category->link_count ); $posts_count = ( $category->category_count > 0 ) ? "$category->category_count" : $category->category_count; return " $category->cat_ID " . ( $name_override ? $name_override : $pad . ' ' . $category->cat_name ) . " $category->category_description $posts_count $category->link_count $edit\n\t\n"; } function page_rows( $parent = 0, $level = 0, $pages = 0, $hierarchy = true ) { global $wpdb, $class, $post; if (!$pages ) $pages = get_pages( 'sort_column=menu_order' ); if (! $pages ) return false; foreach ( $pages as $post) { setup_postdata( $post); if ( $hierarchy && ($post->post_parent != $parent) ) continue; $post->post_title = wp_specialchars( $post->post_title ); $pad = str_repeat( '— ', $level ); $id = (int) $post->ID; $class = ('alternate' == $class ) ? '' : 'alternate'; ?> ID; ?> post_modified ) _e('Unpublished'); else echo mysql2date( __('Y-m-d g:i a'), $post->post_modified ); ?> " . __( 'Edit' ) . ""; } ?> " . __( 'Delete' ) . ""; } ?> user_email; $url = $user_object->user_url; $short_url = str_replace( 'http://', '', $url ); $short_url = str_replace( 'www.', '', $short_url ); if ('/' == substr( $short_url, -1 )) $short_url = substr( $short_url, 0, -1 ); if ( strlen( $short_url ) > 35 ) $short_url = substr( $short_url, 0, 32 ).'...'; $numposts = get_usernumposts( $user_object->ID ); $r = " $email $short_url"; $r .= "\n\t\t"; if ( $numposts > 0 ) { $r .= ""; $r .= sprintf(__ngettext( 'View %s post', 'View %s posts', $numposts ), $numposts); $r .= ''; } $r .= "\n\t\t"; if ( current_user_can( 'edit_user', $user_object->ID ) ) { $edit_link = add_query_arg( 'wp_http_referer', urlencode( clean_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=$user_object->ID" ); $r .= "".__( 'Edit' ).""; } $r .= "\n\t"; return $r; } function _wp_get_comment_list( $s = false, $start, $num ) { global $wpdb; $start = abs( (int) $start ); $num = (int) $num; $cnt_stmt = ''; if ( $s ) { $s = $wpdb->escape($s); $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE (comment_author LIKE '%$s%' OR comment_author_email LIKE '%$s%' OR comment_author_url LIKE '%$s%' OR comment_author_IP LIKE '%$s%' OR comment_content LIKE ('%$s%') ) AND comment_approved <> 'spam' ORDER BY comment_date DESC"); $cnt_stmt = "SELECT COUNT(*) FROM $wpdb->comments WHERE (comment_author LIKE '%$s%' OR comment_author_email LIKE '%$s%' OR comment_author_url LIKE '%$s%' OR comment_author_IP LIKE '%$s%' OR comment_content LIKE ('%$s%') ) AND comment_approved <> 'spam'"; } else { $comments = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0' OR comment_approved = '1' ORDER BY comment_date DESC" ); $cnt_stmt = "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0' OR comment_approved = '1'"; } if ($comments == null) $comments = array(); $total = $wpdb->get_var( $cnt_stmt ); return array($comments, $total); } function _wp_comment_list_item( $id, $alt = 0 ) { global $authordata, $comment, $wpdb; $id = (int) $id; $comment =& get_comment( $id ); $class = ''; $authordata = get_userdata($wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID)); $comment_status = wp_get_comment_status($comment->comment_ID); if ( 'unapproved' == $comment_status ) $class .= ' unapproved'; if ( $alt % 2 ) $class .= ' alternate'; echo "
  • "; ?>

    comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

    — [ comment_post_ID) ) { echo " " . __('Edit') . ''; echo ' | comment_author)) . "', theCommentList );\">" . __('Delete') . ' '; if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) { echo ' | ' . __('Unapprove') . ' '; echo ' | ' . __('Approve') . ' '; } echo " | comment_post_ID . "&c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to mark as spam this comment by '%s'.\n'Cancel' to stop, 'OK' to mark as spam."), $comment->comment_author)) . "', theCommentList );\">" . __('Spam') . " "; } $post = get_post($comment->comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title; ?> ] —

  • cat_ID && $parent == $category->category_parent) { $pad = str_repeat( '– ', $level ); $category->cat_name = wp_specialchars( $category->cat_name ); echo "\n\t"; wp_dropdown_cats( $currentcat, $currentparent, $category->cat_ID, $level +1, $categories ); } } } else { return false; } } // Some postmeta stuff function has_meta( $postid ) { global $wpdb; if (($postid!= null)) return $wpdb->get_results( "SELECT meta_key, meta_value, meta_id, post_id FROM $wpdb->postmeta WHERE post_id = " . $postid . " ORDER BY meta_key,meta_id", ARRAY_A ); else return null; } function list_meta( $meta ) { global $post_ID; // Exit if no meta if (!$meta ) { echo ' '; //TBODY needed for list-manipulation JS return; } $count = 0; ?> "; foreach ( $meta as $entry ) { ++ $count; if ( $count % 2 ) $style = 'alternate'; else $style = ''; if ('_' == $entry['meta_key'] { 0 } ) $style .= ' hidden'; if ( is_serialized( $entry['meta_value'] ) ) { if ( is_serialized_string( $entry['meta_value'] ) ) { // this is a serialized string, so we should display it $entry['meta_value'] = maybe_unserialize( $entry['meta_value'] ); } else { // this is a serialized array/object so we should NOT display it --$count; continue; } } $key_js = js_escape( $entry['meta_key'] ); $entry['meta_key'] = attribute_escape($entry['meta_key']); $entry['meta_value'] = attribute_escape($entry['meta_value']); $entry['meta_id'] = (int) $entry['meta_id']; $r .= "\n\t"; $r .= "\n\t\t"; $r .= "\n\t\t"; $r .= "\n\t\t
    "; $r .= "\n\t\t"; $r .= "\n\t"; } echo $r; echo "\n\t"; } // Get a list of previously defined keys function get_meta_keys() { global $wpdb; $keys = $wpdb->get_col( " SELECT DISTINCT meta_key FROM $wpdb->postmeta GROUP BY meta_key" ); // ORDER BY meta_key return $keys; } function meta_form() { global $wpdb; $limit = (int) apply_filters( 'postmeta_form_limit', 30 ); $keys = $wpdb->get_col( " SELECT DISTINCT meta_key FROM $wpdb->postmeta GROUP BY meta_key" ); //ORDER BY meta_id DESC LIMIT $limit if ( $keys ) natcasesort($keys); ?>

    escape( stripslashes( trim( $_POST['metakeyselect'] ) ) ); $metakeyinput = $wpdb->escape( stripslashes( trim( $_POST['metakeyinput'] ) ) ); $metavalue = maybe_serialize( stripslashes( (trim( $_POST['metavalue'] ) ) )); $metavalue = $wpdb->escape( $metavalue ); if ( ('0' == $metavalue || !empty ( $metavalue ) ) && ((('#NONE#' != $metakeyselect) && !empty ( $metakeyselect) ) || !empty ( $metakeyinput) ) ) { // We have a key/value pair. If both the select and the // input for the key have data, the input takes precedence: if ('#NONE#' != $metakeyselect) $metakey = $metakeyselect; if ( $metakeyinput) $metakey = $metakeyinput; // default if ( in_array($metakey, $protected) ) return false; $result = $wpdb->insert( "INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value ) VALUES ('$post_ID','$metakey','$metavalue' )",$wpdb->postmeta,"meta_id"); return $wpdb->insert_id; } return false; } // add_meta function delete_meta( $mid ) { global $wpdb; $mid = (int) $mid; return $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_id = " . $mid ); } function update_meta( $mid, $mkey, $mvalue ) { global $wpdb; $protected = array( '_wp_attached_file', '_wp_attachment_metadata', '_wp_old_slug', '_wp_page_template' ); if ( in_array($mkey, $protected) ) return false; $mvalue = maybe_serialize( stripslashes( $mvalue )); $mvalue = $wpdb->escape( $mvalue ); $mid = (int) $mid; return $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '$mkey', meta_value = '$mvalue' WHERE meta_id = " . $mid ); } function get_post_meta_by_id( $mid ) { global $wpdb; $mid = (int) $mid; $meta = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_id = " . $mid ); if ( is_serialized_string( $meta->meta_value ) ) $meta->meta_value = maybe_unserialize( $meta->meta_value ); return $meta; } function touch_time( $edit = 1, $for_post = 1 ) { global $wp_locale, $post, $comment; if ( $for_post ) $edit = ( ('draft' == $post->post_status ) && (!$post->post_date || '1900-01-01 00:00:00' == $post->post_date ) ) ? false : true; echo '
    '; $time_adj = time() + (get_option( 'gmt_offset' ) * 3600 ); $post_date = ($for_post) ? $post->post_date : $comment->comment_date; $jj = ($edit) ? mysql2date( 'd', $post_date ) : gmdate( 'd', $time_adj ); $mm = ($edit) ? mysql2date( 'm', $post_date ) : gmdate( 'm', $time_adj ); $aa = ($edit) ? mysql2date( 'Y', $post_date ) : gmdate( 'Y', $time_adj ); $hh = ($edit) ? mysql2date( 'H', $post_date ) : gmdate( 'H', $time_adj ); $mn = ($edit) ? mysql2date( 'i', $post_date ) : gmdate( 'i', $time_adj ); $ss = ($edit) ? mysql2date( 's', $post_date ) : gmdate( 's', $time_adj ); echo " @ : get_month( $mm ), $jj, $aa, $hh, $mn ); } ?>
    $markerline ) { if (strpos($markerline, '# BEGIN ' . $marker) != false) $state = false; if ( $state ) { if ( $n + 1 < count( $markerdata ) ) fwrite( $f, "{$markerline}\n" ); else fwrite( $f, "{$markerline}" ); } if (strpos($markerline, '# END ' . $marker) != false) { fwrite( $f, "# BEGIN {$marker}\n" ); if ( is_array( $insertion )) foreach ( $insertion as $insertline ) fwrite( $f, "{$insertline}\n" ); fwrite( $f, "# END {$marker}\n" ); $state = true; $foundit = true; } } } if (!$foundit) { fwrite( $f, "# BEGIN {$marker}\n" ); foreach ( $insertion as $insertline ) fwrite( $f, "{$insertline}\n" ); fwrite( $f, "# END {$marker}\n" ); } fclose( $f ); return true; } else { return false; } } // extract_from_markers: Owen Winkler // Returns an array of strings from a file (.htaccess ) from between BEGIN // and END markers. function extract_from_markers( $filename, $marker ) { $result = array (); if (!file_exists( $filename ) ) { return $result; } if ( $markerdata = explode( "\n", implode( '', file( $filename ) ) )); { $state = false; foreach ( $markerdata as $markerline ) { if (strpos($markerline, '# END ' . $marker) != false) $state = false; if ( $state ) $result[] = $markerline; if (strpos($markerline, '# BEGIN ' . $marker) != false) $state = true; } } return $result; } function got_mod_rewrite() { global $is_apache; // take 3 educated guesses as to whether or not mod_rewrite is available if ( !$is_apache ) return false; if ( function_exists( 'apache_get_modules' ) ) { if ( !in_array( 'mod_rewrite', apache_get_modules() ) ) return false; } return true; } function save_mod_rewrite_rules() { global $is_apache, $wp_rewrite; $home_path = get_home_path(); if (!$wp_rewrite->using_mod_rewrite_permalinks() ) return false; if (!((!file_exists( $home_path.'.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path.'.htaccess' ) ) ) return false; if (! got_mod_rewrite() ) return false; $rules = explode( "\n", $wp_rewrite->mod_rewrite_rules() ); return insert_with_markers( $home_path.'.htaccess', 'WordPress', $rules ); } function get_broken_themes() { global $wp_broken_themes; get_themes(); return $wp_broken_themes; } function get_page_templates() { $themes = get_themes(); $theme = get_current_theme(); $templates = $themes[$theme]['Template Files']; $page_templates = array (); if ( is_array( $templates ) ) { foreach ( $templates as $template ) { $template_data = implode( '', file( ABSPATH.$template )); preg_match( "|Template Name:(.*)|i", $template_data, $name ); preg_match( "|Description:(.*)|i", $template_data, $description ); $name = $name[1]; $description = $description[1]; if (!empty ( $name ) ) { $page_templates[trim( $name )] = basename( $template ); } } } return $page_templates; } function page_template_dropdown( $default = '' ) { $templates = get_page_templates(); foreach (array_keys( $templates ) as $template ) : if ( $default == $templates[$template] ) $selected = " selected='selected'"; else $selected = ''; echo "\n\t"; endforeach; } function parent_dropdown( $default = 0, $parent = 0, $level = 0 ) { global $wpdb, $post_ID; $items = $wpdb->get_results( "SELECT ID, post_parent, post_title FROM $wpdb->posts WHERE post_parent = " . $parent . " AND post_type = 'page' ORDER BY menu_order" ); if ( $items ) { foreach ( $items as $item ) { // A page cannot be its own parent. if (!empty ( $post_ID ) ) { if ( $item->ID == $post_ID ) { continue; } } $pad = str_repeat( ' ', $level * 3 ); if ( $item->ID == $default) $current = ' selected="selected"'; else $current = ''; echo "\n\t"; parent_dropdown( $default, $item->ID, $level +1 ); } } else { return false; } } function user_can_access_admin_page() { global $pagenow; global $menu; global $submenu; global $_wp_menu_nopriv; global $_wp_submenu_nopriv; global $plugin_page; $parent = get_admin_page_parent(); if ( isset( $_wp_submenu_nopriv[$parent][$pagenow] ) ) return false; if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$parent][$plugin_page] ) ) return false; if ( empty( $parent) ) { if ( isset( $_wp_menu_nopriv[$pagenow] ) ) return false; if ( isset( $_wp_submenu_nopriv[$pagenow][$pagenow] ) ) return false; if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) return false; foreach (array_keys( $_wp_submenu_nopriv ) as $key ) { if ( isset( $_wp_submenu_nopriv[$key][$pagenow] ) ) return false; if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$key][$plugin_page] ) ) return false; } return true; } if ( isset( $submenu[$parent] ) ) { foreach ( $submenu[$parent] as $submenu_array ) { if ( isset( $plugin_page ) && ( $submenu_array[2] == $plugin_page ) ) { if ( current_user_can( $submenu_array[1] )) return true; else return false; } else if ( $submenu_array[2] == $pagenow ) { if ( current_user_can( $submenu_array[1] )) return true; else return false; } } } foreach ( $menu as $menu_array ) { if ( $menu_array[2] == $parent) { if ( current_user_can( $menu_array[1] )) return true; else return false; } } return true; } function get_admin_page_title() { global $title; global $menu; global $submenu; global $pagenow; global $plugin_page; if ( isset( $title ) && !empty ( $title ) ) { return $title; } $hook = get_plugin_page_hook( $plugin_page, $pagenow ); $parent = $parent1 = get_admin_page_parent(); if ( empty ( $parent) ) { foreach ( $menu as $menu_array ) { if ( isset( $menu_array[3] ) ) { if ( $menu_array[2] == $pagenow ) { $title = $menu_array[3]; return $menu_array[3]; } else if ( isset( $plugin_page ) && ($plugin_page == $menu_array[2] ) && ($hook == $menu_array[3] ) ) { $title = $menu_array[3]; return $menu_array[3]; } } else { $title = $menu_array[0]; return $title; } } } else { foreach (array_keys( $submenu ) as $parent) { foreach ( $submenu[$parent] as $submenu_array ) { if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) && (($parent == $pagenow ) || ($parent == $plugin_page ) || ($plugin_page == $hook ) || (($pagenow == 'admin.php' ) && ($parent1 != $submenu_array[2] ) ) ) ) { $title = $submenu_array[3]; return $submenu_array[3]; } if ( $submenu_array[2] != $pagenow || isset( $_GET['page'] ) ) // not the current page continue; if ( isset( $submenu_array[3] ) ) { $title = $submenu_array[3]; return $submenu_array[3]; } else { $title = $submenu_array[0]; return $title; } } } } return $title; } function get_admin_page_parent() { global $parent_file; global $menu; global $submenu; global $pagenow; global $plugin_page; global $_wp_real_parent_file; global $_wp_menu_nopriv; global $_wp_submenu_nopriv; if ( !empty ( $parent_file ) ) { if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } if ( $pagenow == 'admin.php' && isset( $plugin_page ) ) { foreach ( $menu as $parent_menu ) { if ( $parent_menu[2] == $plugin_page ) { $parent_file = $plugin_page; if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } } if ( isset( $_wp_menu_nopriv[$plugin_page] ) ) { $parent_file = $plugin_page; if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } } if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) { $parent_file = $pagenow; if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } foreach (array_keys( $submenu ) as $parent) { foreach ( $submenu[$parent] as $submenu_array ) { if ( isset( $_wp_real_parent_file[$parent] ) ) $parent = $_wp_real_parent_file[$parent]; if ( $submenu_array[2] == $pagenow ) { $parent_file = $parent; return $parent; } else if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) ) { $parent_file = $parent; return $parent; } } } $parent_file = ''; return ''; } function add_menu_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { global $menu, $admin_page_hooks; $file = plugin_basename( $file ); $menu[] = array ( $menu_title, $access_level, $file, $page_title ); $admin_page_hooks[$file] = sanitize_title( $menu_title ); $hookname = get_plugin_page_hookname( $file, '' ); if (!empty ( $function ) && !empty ( $hookname )) add_action( $hookname, $function ); return $hookname; } function add_submenu_page( $parent, $page_title, $menu_title, $access_level, $file, $function = '' ) { global $submenu; global $menu; global $_wp_real_parent_file; global $_wp_submenu_nopriv; global $_wp_menu_nopriv; $file = plugin_basename( $file ); $parent = plugin_basename( $parent); if ( isset( $_wp_real_parent_file[$parent] ) ) $parent = $_wp_real_parent_file[$parent]; if ( !current_user_can( $access_level ) ) { $_wp_submenu_nopriv[$parent][$file] = true; return false; } // If the parent doesn't already have a submenu, add a link to the parent // as the first item in the submenu. If the submenu file is the same as the // parent file someone is trying to link back to the parent manually. In // this case, don't automatically add a link back to avoid duplication. if (!isset( $submenu[$parent] ) && $file != $parent ) { foreach ( $menu as $parent_menu ) { if ( $parent_menu[2] == $parent && current_user_can( $parent_menu[1] ) ) $submenu[$parent][] = $parent_menu; } } $submenu[$parent][] = array ( $menu_title, $access_level, $file, $page_title ); $hookname = get_plugin_page_hookname( $file, $parent); if (!empty ( $function ) && !empty ( $hookname )) add_action( $hookname, $function ); return $hookname; } function add_options_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { return add_submenu_page( 'options-general.php', $page_title, $menu_title, $access_level, $file, $function ); } function add_management_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { return add_submenu_page( 'edit.php', $page_title, $menu_title, $access_level, $file, $function ); } function add_theme_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { return add_submenu_page( 'themes.php', $page_title, $menu_title, $access_level, $file, $function ); } function add_users_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { if ( current_user_can('edit_users') ) $parent = 'users.php'; else $parent = 'profile.php'; return add_submenu_page( $parent, $page_title, $menu_title, $access_level, $file, $function ); } function validate_file( $file, $allowed_files = '' ) { if ( false != strpos( $file, './' )) return 1; if (':' == substr( $file, 1, 1 )) return 2; if (!empty ( $allowed_files ) && (!in_array( $file, $allowed_files ) ) ) return 3; return 0; } function validate_file_to_edit( $file, $allowed_files = '' ) { $file = stripslashes( $file ); $code = validate_file( $file, $allowed_files ); if (!$code ) return $file; switch ( $code ) { case 1 : wp_die( __('Sorry, can’t edit files with ".." in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in.' )); case 2 : wp_die( __('Sorry, can’t call files with their real path.' )); case 3 : wp_die( __('Sorry, that file cannot be edited.' )); } } function get_home_path() { $home = get_option( 'home' ); if ( $home != '' && $home != get_option( 'siteurl' ) ) { $home_path = parse_url( $home ); $home_path = $home_path['path']; $root = str_replace( $_SERVER["PHP_SELF"], '', $_SERVER["SCRIPT_FILENAME"] ); $home_path = trailingslashit( $root.$home_path ); } else { $home_path = ABSPATH; } return $home_path; } function get_real_file_to_edit( $file ) { if ('index.php' == $file || '.htaccess' == $file ) { $real_file = get_home_path().$file; } else { $real_file = ABSPATH.$file; } return $real_file; } $wp_file_descriptions = array ('index.php' => __( 'Main Index Template' ), 'style.css' => __( 'Stylesheet' ), 'comments.php' => __( 'Comments' ), 'comments-popup.php' => __( 'Popup Comments' ), 'footer.php' => __( 'Footer' ), 'header.php' => __( 'Header' ), 'sidebar.php' => __( 'Sidebar' ), 'archive.php' => __( 'Archives' ), 'category.php' => __( 'Category Template' ), 'page.php' => __( 'Page Template' ), 'search.php' => __( 'Search Results' ), 'single.php' => __( 'Single Post' ), '404.php' => __( '404 Template' ), 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), '.htaccess' => __( '.htaccess (for rewrite rules )' ), // Deprecated files 'wp-layout.css' => __( 'Stylesheet' ), 'wp-comments.php' => __( 'Comments Template' ), 'wp-comments-popup.php' => __( 'Popup Comments Template' )); function get_file_description( $file ) { global $wp_file_descriptions; if ( isset( $wp_file_descriptions[basename( $file )] ) ) { return $wp_file_descriptions[basename( $file )]; } elseif ( file_exists( ABSPATH . $file ) && is_file( ABSPATH . $file ) ) { $template_data = implode( '', file( ABSPATH . $file ) ); if ( preg_match( "|Template Name:(.*)|i", $template_data, $name )) return $name[1]; } return basename( $file ); } function update_recently_edited( $file ) { $oldfiles = (array ) get_option( 'recently_edited' ); if ( $oldfiles ) { $oldfiles = array_reverse( $oldfiles ); $oldfiles[] = $file; $oldfiles = array_reverse( $oldfiles ); $oldfiles = array_unique( $oldfiles ); if ( 5 < count( $oldfiles )) array_pop( $oldfiles ); } else { $oldfiles[] = $file; } update_option( 'recently_edited', $oldfiles ); } function get_plugin_data( $plugin_file ) { $plugin_data = implode( '', file( $plugin_file )); preg_match( "|Plugin Name:(.*)|i", $plugin_data, $plugin_name ); preg_match( "|Plugin URI:(.*)|i", $plugin_data, $plugin_uri ); preg_match( "|Description:(.*)|i", $plugin_data, $description ); preg_match( "|Author:(.*)|i", $plugin_data, $author_name ); preg_match( "|Author URI:(.*)|i", $plugin_data, $author_uri ); if ( preg_match( "|Version:(.*)|i", $plugin_data, $version )) $version = trim( $version[1] ); else $version = ''; $description = wptexturize( trim( $description[1] )); $name = $plugin_name[1]; $name = trim( $name ); $plugin = $name; if ('' != $plugin_uri[1] && '' != $name ) { $plugin = ''.$plugin.''; } if ('' == $author_uri[1] ) { $author = trim( $author_name[1] ); } else { $author = '' . trim( $author_name[1] ) . ''; } return array('Name' => $name, 'Title' => $plugin, 'Description' => $description, 'Author' => $author, 'Version' => $version); } function get_plugins() { global $wp_plugins; if ( isset( $wp_plugins ) ) { return $wp_plugins; } $wp_plugins = array (); $plugin_root = ABSPATH . PLUGINDIR; // Files in wp-content/plugins directory $plugins_dir = @ dir( $plugin_root); if ( $plugins_dir ) { while (($file = $plugins_dir->read() ) != false ) { if ( substr($file, 0, 1) == '.' ) continue; if ( is_dir( $plugin_root.'/'.$file ) ) { $plugins_subdir = @ dir( $plugin_root.'/'.$file ); if ( $plugins_subdir ) { while (($subfile = $plugins_subdir->read() ) != false ) { if ( substr($subfile, 0, 1) == '.' ) continue; if ( substr($subfile, -4) == '.php' ) $plugin_files[] = "$file/$subfile"; } } } else { if ( substr($file, -4) == '.php' ) $plugin_files[] = $file; } } } if ( !$plugins_dir || !$plugin_files ) return $wp_plugins; foreach ( $plugin_files as $plugin_file ) { if ( !is_readable( "$plugin_root/$plugin_file" ) ) continue; $plugin_data = get_plugin_data( "$plugin_root/$plugin_file" ); if ( empty ( $plugin_data['Name'] ) ) continue; $wp_plugins[plugin_basename( $plugin_file )] = $plugin_data; } uasort( $wp_plugins, create_function( '$a, $b', 'return strnatcasecmp( $a["Name"], $b["Name"] );' )); return $wp_plugins; } function get_plugin_page_hookname( $plugin_page, $parent_page ) { global $admin_page_hooks; $parent = get_admin_page_parent(); if ( empty ( $parent_page ) || 'admin.php' == $parent_page ) { if ( isset( $admin_page_hooks[$plugin_page] )) $page_type = 'toplevel'; else if ( isset( $admin_page_hooks[$parent] )) $page_type = $admin_page_hooks[$parent]; } else if ( isset( $admin_page_hooks[$parent_page] ) ) { $page_type = $admin_page_hooks[$parent_page]; } else { $page_type = 'admin'; } $plugin_name = preg_replace( '!\.php!', '', $plugin_page ); return $page_type.'_page_'.$plugin_name; } function get_plugin_page_hook( $plugin_page, $parent_page ) { global $wp_filter; $hook = get_plugin_page_hookname( $plugin_page, $parent_page ); if ( isset( $wp_filter[$hook] )) return $hook; else return ''; } function browse_happy() { $getit = __( 'WordPress recommends a better browser' ); echo '

    Browse Happy

    '; } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') != false) add_action( 'admin_footer', 'browse_happy' ); function documentation_link( $for ) { return; } function register_importer( $id, $name, $description, $callback ) { global $wp_importers; $wp_importers[$id] = array ( $name, $description, $callback ); } function get_importers() { global $wp_importers; uasort($wp_importers, create_function('$a, $b', 'return strcmp($a[0], $b[0]);')); return $wp_importers; } function current_theme_info() { $themes = get_themes(); $current_theme = get_current_theme(); $ct->name = $current_theme; $ct->title = $themes[$current_theme]['Title']; $ct->version = $themes[$current_theme]['Version']; $ct->parent_theme = $themes[$current_theme]['Parent Theme']; $ct->template_dir = $themes[$current_theme]['Template Dir']; $ct->stylesheet_dir = $themes[$current_theme]['Stylesheet Dir']; $ct->template = $themes[$current_theme]['Template']; $ct->stylesheet = $themes[$current_theme]['Stylesheet']; $ct->screenshot = $themes[$current_theme]['Screenshot']; $ct->description = $themes[$current_theme]['Description']; $ct->author = $themes[$current_theme]['Author']; return $ct; } // array wp_handle_upload ( array &file [, array overrides] ) // file: reference to a single element of $_FILES. Call the function once for each uploaded file. // overrides: an associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). // On success, returns an associative array of file attributes. // On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). function wp_handle_upload( &$file, $overrides = false ) { // The default error handler. if (! function_exists( 'wp_handle_upload_error' ) ) { function wp_handle_upload_error( &$file, $message ) { return array( 'error'=>$message ); } } // You may define your own function and pass the name in $overrides['upload_error_handler'] $upload_error_handler = 'wp_handle_upload_error'; // $_POST['action'] must be set and its value must equal $overrides['action'] or this: $action = 'wp_handle_upload'; // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. $upload_error_strings = array( false, __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), __( "The uploaded file was only partially uploaded." ), __( "No file was uploaded." ), __( "Missing a temporary folder." ), __( "Failed to write file to disk." )); // All tests are on by default. Most can be turned off by $override[{test_name}] = false; $test_form = true; $test_size = true; // If you override this, you must provide $ext and $type!!!! $test_type = true; // Install user overrides. Did we mention that this voids your warranty? if ( is_array( $overrides ) ) extract( $overrides, EXTR_OVERWRITE ); // A correct form post will pass this test. if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) return $upload_error_handler( $file, __( 'Invalid form submission.' )); // A successful upload will pass this test. It makes no sense to override this one. if ( $file['error'] > 0 ) return $upload_error_handler( $file, $upload_error_strings[$file['error']] ); // A non-empty file will pass this test. if ( $test_size && !($file['size'] > 0 ) ) return $upload_error_handler( $file, __( 'File is empty. Please upload something more substantial.' )); // A properly uploaded file will pass this test. There should be no reason to override this one. if (! @ is_uploaded_file( $file['tmp_name'] ) ) return $upload_error_handler( $file, __( 'Specified file failed upload test.' )); // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. if ( $test_type ) { $wp_filetype = wp_check_filetype( $file['name'], $mimes ); extract( $wp_filetype ); if ( !$type || !$ext ) return $upload_error_handler( $file, __( 'File type does not meet security guidelines. Try another.' )); } // A writable uploads dir will pass this test. Again, there's no point overriding this one. if ( ! ( ( $uploads = wp_upload_dir() ) && false == $uploads['error'] ) ) return $upload_error_handler( $file, $uploads['error'] ); // Increment the file number until we have a unique file to save in $dir. Use $override['unique_filename_callback'] if supplied. if ( isset( $unique_filename_callback ) && function_exists( $unique_filename_callback ) ) { $filename = $unique_filename_callback( $uploads['path'], $file['name'] ); } else { $number = ''; $filename = str_replace( '#', '_', $file['name'] ); $filename = str_replace( array( '\\', "'" ), '', $filename ); if ( empty( $ext) ) $ext = ''; else $ext = ".$ext"; while ( file_exists( $uploads['path'] . "/$filename" ) ) { if ( '' == "$number$ext" ) $filename = $filename . ++$number . $ext; else $filename = str_replace( "$number$ext", ++$number . $ext, $filename ); } $filename = str_replace( $ext, '', $filename ); $filename = sanitize_title_with_dashes( $filename ) . $ext; } // Move the file to the uploads dir $new_file = $uploads['path'] . "/$filename"; if ( false == @ move_uploaded_file( $file['tmp_name'], $new_file ) ) wp_die( printf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] )); // Set correct file permissions $stat = stat( dirname( $new_file )); $perms = $stat['mode'] & 0000666; @ chmod( $new_file, $perms ); // Compute the URL $url = $uploads['url'] . "/$filename"; $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) ); return $return; } function wp_shrink_dimensions( $width, $height, $wmax = 128, $hmax = 96 ) { if ( $height <= $hmax && $width <= $wmax ) return array( $width, $height); elseif ( $width / $height > $wmax / $hmax ) return array( $wmax, (int) ($height / $width * $wmax )); else return array( (int) ($width / $height * $hmax ), $hmax ); } function wp_import_cleanup( $id ) { wp_delete_attachment( $id ); } function wp_import_upload_form( $action ) { $size = strtolower( ini_get( 'upload_max_filesize' ) ); $bytes = 0; if (strpos($size, 'k') != false) $bytes = $size * 1024; if (strpos($size, 'm') != false) $bytes = $size * 1024 * 1024; if (strpos($size, 'g') != false) $bytes = $size * 1024 * 1024 * 1024; ?>

    ( )

    false, 'test_type' => false ); $file = wp_handle_upload( $_FILES['import'], $overrides ); if ( isset( $file['error'] ) ) return $file; $url = $file['url']; $type = $file['type']; $file = addslashes( $file['file'] ); $filename = basename( $file ); // Construct the object array $object = array( 'post_title' => $filename, 'post_content' => $url, 'post_mime_type' => $type, 'guid' => $url ); // Save the data $id = wp_insert_attachment( $object, $file ); return array( 'file' => $file, 'id' => $id ); } function the_attachment_links( $id = false ) { $id = (int) $id; $post = & get_post( $id ); if ( $post->post_type != 'attachment' ) return false; $icon = get_attachment_icon( $post->ID ); $attachment_data = wp_get_attachment_metadata( $id ); $thumb = isset( $attachment_data['thumb'] ); ?> 4 / 3 ) return array( 128, (int) ($height / $width * 128 )); else return array( (int) ($width / $height * 96 ), 96 ); } function wp_reset_vars( $vars ) { for ( $i=0; $ipost_name); // just in case if ( strlen($name) ) echo ''; } // If siteurl or home changed, reset cookies and flush rewrite rules. function update_home_siteurl( $old_value, $value ) { global $wp_rewrite, $user_login, $user_pass_md5; if ( defined( "WP_INSTALLING" ) ) return; // If home changed, write rewrite rules to new location. $wp_rewrite->flush_rules(); // Clear cookies for old paths. wp_clearcookie(); // Set cookies for new paths. wp_setcookie( $user_login, $user_pass_md5, true, get_option( 'home' ), get_option( 'siteurl' )); } add_action( 'update_option_home', 'update_home_siteurl', 10, 2 ); add_action( 'update_option_siteurl', 'update_home_siteurl', 10, 2 ); function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) { if ( ctype_digit( $src_file ) ) // Handle int as attachment ID $src_file = get_attached_file( $src_file ); $src = wp_load_image( $src_file ); if ( !is_resource( $src )) return $src; $dst = imagecreatetruecolor( $dst_w, $dst_h ); if ( $src_abs ) { $src_w -= $src_x; $src_h -= $src_y; } if (function_exists('imageantialias')) imageantialias( $dst, true ); imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); if ( !$dst_file ) $dst_file = str_replace( basename( $src_file ), 'cropped-'.basename( $src_file ), $src_file ); $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file ); if ( imagejpeg( $dst, $dst_file ) ) return $dst_file; else return false; } function wp_load_image( $file ) { if ( ctype_digit( $file ) ) $file = get_attached_file( $file ); if ( !file_exists( $file ) ) return sprintf(__("File '%s' doesn't exist?"), $file); if ( ! function_exists('imagecreatefromstring') ) return __('The GD image library is not installed.'); $contents = file_get_contents( $file ); $image = imagecreatefromstring( $contents ); if ( !is_resource( $image ) ) return sprintf(__("File '%s' is not an image."), $file); return $image; } function wp_generate_attachment_metadata( $attachment_id, $file ) { $attachment = get_post( $attachment_id ); $metadata = array(); if ( preg_match('!^image/!', get_post_mime_type( $attachment )) ) { $imagesize = getimagesize($file); $metadata['width'] = $imagesize['0']; $metadata['height'] = $imagesize['1']; list($uwidth, $uheight) = get_udims($metadata['width'], $metadata['height']); $metadata['hwstring_small'] = "height='$uheight' width='$uwidth'"; $metadata['file'] = $file; $max = apply_filters( 'wp_thumbnail_creation_size_limit', 3 * 1024 * 1024, $attachment_id, $file ); if ( $max < 0 || $metadata['width'] * $metadata['height'] < $max ) { $max_side = apply_filters( 'wp_thumbnail_max_side_length', 128, $attachment_id, $file ); $thumb = wp_create_thumbnail( $file, $max_side ); if ( @file_exists($thumb) ) $metadata['thumb'] = basename($thumb); } } return apply_filters( 'wp_generate_attachment_metadata', $metadata ); } function wp_create_thumbnail( $file, $max_side, $effect = '' ) { // 1 = GIF, 2 = JPEG, 3 = PNG if ( file_exists( $file ) ) { $type = getimagesize( $file ); // if the associated function doesn't exist - then it's not // handle. duh. i hope. if (!function_exists( 'imagegif' ) && $type[2] == 1 ) { $error = __( 'Filetype not supported. Thumbnail not created.' ); } elseif (!function_exists( 'imagejpeg' ) && $type[2] == 2 ) { $error = __( 'Filetype not supported. Thumbnail not created.' ); } elseif (!function_exists( 'imagepng' ) && $type[2] == 3 ) { $error = __( 'Filetype not supported. Thumbnail not created.' ); } else { // create the initial copy from the original file if ( $type[2] == 1 ) { $image = imagecreatefromgif( $file ); } elseif ( $type[2] == 2 ) { $image = imagecreatefromjpeg( $file ); } elseif ( $type[2] == 3 ) { $image = imagecreatefrompng( $file ); } if ( function_exists( 'imageantialias' )) imageantialias( $image, TRUE ); $image_attr = getimagesize( $file ); // figure out the longest side if ( $image_attr[0] > $image_attr[1] ) { $image_width = $image_attr[0]; $image_height = $image_attr[1]; $image_new_width = $max_side; $image_ratio = $image_width / $image_new_width; $image_new_height = $image_height / $image_ratio; //width is > height } else { $image_width = $image_attr[0]; $image_height = $image_attr[1]; $image_new_height = $max_side; $image_ratio = $image_height / $image_new_height; $image_new_width = $image_width / $image_ratio; //height > width } $thumbnail = imagecreatetruecolor( $image_new_width, $image_new_height); @ imagecopyresampled( $thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1] ); // If no filters change the filename, we'll do a default transformation. if ( basename( $file ) == $thumb = apply_filters( 'thumbnail_filename', basename( $file ) ) ) $thumb = preg_replace( '!(\.[^.]+)?$!', '.thumbnail' . '$1', basename( $file ), 1 ); $thumbpath = str_replace( basename( $file ), $thumb, $file ); // move the thumbnail to its final destination if ( $type[2] == 1 ) { if (!imagegif( $thumbnail, $thumbpath ) ) { $error = __( "Thumbnail path invalid" ); } } elseif ( $type[2] == 2 ) { if (!imagejpeg( $thumbnail, $thumbpath ) ) { $error = __( "Thumbnail path invalid" ); } } elseif ( $type[2] == 3 ) { if (!imagepng( $thumbnail, $thumbpath ) ) { $error = __( "Thumbnail path invalid" ); } } } } else { $error = __( 'File not found' ); } if (!empty ( $error ) ) { return $error; } else { return apply_filters( 'wp_create_thumbnail', $thumbpath ); } } ?> #wordpress/wp-admin/admin-header.php > <?php bloginfo('name') ?> › <?php echo wp_specialchars( strip_tags( $title ) ); ?> — WordPress text_direction) ) : ?>

    %s.'), $user_identity) ?> [, ]

    wordpress/wp-admin/admin.php K "wordpress/wp-admin/bookmarklet.php % post_title = stripslashes($post_title); else $post->post_title = $popuptitle; $content = wp_specialchars($_REQUEST['content']); $popupurl = clean_url($_REQUEST['popupurl']); if ( !empty($content) ) { $post->post_content = wp_specialchars( stripslashes($_REQUEST['content']) ); } else { $post->post_content = ''.$popuptitle.''."\n$text"; } /* /big funky fixes */ ?> <?php bloginfo('name') ?> › Bookmarklet — WordPress wordpress/wp-admin/categories.js"wordpress/wp-admin/categories.js__addLoadEvent(function() { return true; if (!theList.theList) return false; document.forms.addcat.submit.onclick = function(e) {return killSubmit('theList.ajaxAdder("cat", "addcat");', e); }; theList.addComplete = function(what, where, update, transport) { var name = getNodeValue(transport.responseXML, 'name').unescapeHTML(); var id = transport.responseXML.getElementsByTagName(what)[0].getAttribute('id'); var options = document.forms['addcat'].category_parent.options; options[options.length] = new Option(name, id); }; theList.delComplete = function(what, id) { var options = document.forms['addcat'].category_parent.options; for ( var o = 0; o < options.length; o++ ) if ( id == options[o].value ) options[o] = null; }; }); !wordpress/wp-admin/categories.php'%s category: this is the default one"), $cat_name)); if ( $cat_ID == get_option('default_link_category') ) wp_die(sprintf(__("Can’t delete the %s category: this is the default one for links"), $cat_name)); wp_delete_category($cat_ID); wp_redirect('categories.php?message=2'); exit; break; case 'edit': require_once ('admin-header.php'); $cat_ID = (int) $_GET['cat_ID']; $category = get_category_to_edit($cat_ID); include('edit-category-form.php'); break; case 'editedcat': $cat_ID = (int) $_POST['cat_ID']; check_admin_referer('update-category_' . $cat_ID); if ( !current_user_can('manage_categories') ) wp_die(__('Cheatin’ uh?')); if ( wp_update_category($_POST) ) wp_redirect('categories.php?message=3'); else wp_redirect('categories.php?message=5'); exit; break; default: wp_enqueue_script( 'admin-categories' ); require_once ('admin-header.php'); $messages[1] = __('Category added.'); $messages[2] = __('Category deleted.'); $messages[3] = __('Category updated.'); $messages[4] = __('Category not added.'); $messages[5] = __('Category not updated.'); ?>

    add new)'), '#addcat') ?>

    Note:
    Deleting a category does not delete the posts and links in that category. Instead, posts that were only assigned to the deleted category are set to the category %s and links that were only assigned to the deleted category are set to %s.'), apply_filters('the_category', get_catname(get_option('default_category'))), apply_filters('the_category', get_catname(get_option('default_link_category')))) ?>

    wordpress/wp-admin/cat.jswordpress/wp-admin/cat.js__addLoadEvent(function(){catList=new listMan('categorychecklist');catList.ajaxRespEl='jaxcat';catList.topAdder=1;catList.alt=0;catList.showLink=0;}); addLoadEvent(newCatAddIn); function newCatAddIn() { var jaxcat = $('jaxcat'); if ( !jaxcat ) return false; Element.update(jaxcat,'' + catL10n.how + ''); $('newcat').onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','jaxcat');", e); }; $('catadd').onclick = function() { catList.ajaxAdder('category', 'jaxcat'); }; } wordpress/wp-admin/comment.phpR'.__('Go back').'!', 'javascript:history.go(-1)')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post.') ); $comment = get_comment_to_edit($comment); include('edit-form-comment.php'); break; case 'cdc': case 'mac': require_once('./admin-header.php'); $comment = (int) $_GET['c']; $formaction = 'cdc' == $action ? 'deletecomment' : 'approvecomment'; $nonce_action = 'cdc' == $action ? 'delete-comment_' : 'approve-comment_'; $nonce_action .= $comment; if ( ! $comment = get_comment_to_edit($comment) ) wp_die(__('Oops, no comment with this ID.').sprintf(' '.__('Go back').'!', 'edit.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( 'cdc' == $action ? __('You are not allowed to delete comments on this post.') : __('You are not allowed to edit comments on this post, so you cannot approve this comment.') ); ?>

    '.__('Caution:').' '.__('You are about to mark the following comment as spam:'); ?>

    '.__('Caution:').' '.__('You are about to delete the following comment:'); ?>

    '.__('Caution:').' '.__('You are about to approve the following comment:'); ?>

    /wp-admin/comment.php' method='get'>
    ' onclick="self.location='/wp-admin/edit-comments.php';" /> ' />
    comment_author_email ) { ?> comment_author_url ) { ?>
    comment_author; ?>
    comment_author_email; ?>
    comment_author_url; ?>

    comment_content; ?>
    '.__('Go back').'!', 'edit-comments.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post.') ); if ( 'spam' == $_REQUEST['dt'] ) wp_set_comment_status($comment->comment_ID, 'spam'); else wp_delete_comment($comment->comment_ID); if ((wp_get_referer() != '') && (false == $noredir)) { wp_redirect(wp_get_referer()); } else { wp_redirect(get_option('siteurl') .'/wp-admin/edit-comments.php'); } exit(); break; case 'unapprovecomment': $comment = (int) $_GET['c']; check_admin_referer('unapprove-comment_' . $comment); if (isset($_GET['noredir'])) { $noredir = true; } else { $noredir = false; } if ( ! $comment = get_comment($comment) ) wp_die(__('Oops, no comment with this ID.').sprintf(' '.__('Go back').'!', 'edit.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post, so you cannot disapprove this comment.') ); wp_set_comment_status($comment->comment_ID, "hold"); if ((wp_get_referer() != "") && (false == $noredir)) { wp_redirect(wp_get_referer()); } else { wp_redirect(get_option('siteurl') .'/wp-admin/edit.php?p='. (int) $comment->comment_post_ID.'&c=1#comments'); } exit(); break; case 'approvecomment': $comment = (int) $_GET['c']; check_admin_referer('approve-comment_' . $comment); if (isset($_GET['noredir'])) { $noredir = true; } else { $noredir = false; } if ( ! $comment = get_comment($comment) ) wp_die(__('Oops, no comment with this ID.').sprintf(' '.__('Go back').'!', 'edit.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post, so you cannot approve this comment.') ); wp_set_comment_status($comment->comment_ID, "approve"); if (get_option("comments_notify") == true) { wp_notify_postauthor($comment->comment_ID); } if ((wp_get_referer() != "") && (false == $noredir)) { wp_redirect(wp_get_referer()); } else { wp_redirect(get_option('siteurl') .'/wp-admin/edit.php?p='. (int) $comment->comment_post_ID.'&c=1#comments'); } exit(); break; case 'editedcomment': $comment_ID = (int) $_POST['comment_ID']; $comment_post_ID = (int) $_POST['comment_post_id']; check_admin_referer('update-comment_' . $comment_ID); edit_comment(); $location = ( empty($_POST['referredby']) ? "edit.php?p=$comment_post_ID&c=1" : $_POST['referredby'] ) . '#comment-' . $comment_ID; $location = apply_filters('comment_edit_redirect', $location, $comment_ID); wp_redirect($location); exit(); break; default: break; } // end switch include('admin-footer.php'); ?> #wordpress/wp-admin/custom-fields.jsfunction customFieldsOnComplete( what, where, update, transport ) { var pidEl = $('post_ID'); pidEl.name = 'post_ID'; pidEl.value = getNodeValue(transport.responseXML, 'postid'); var aEl = $('hiddenaction') if ( aEl.value == 'post' ) aEl.value = 'postajaxpost'; } addLoadEvent(customFieldsAddIn); function customFieldsAddIn() { theList.showLink=0; theList.addComplete = customFieldsOnComplete; if (!theList.theList) return false; inputs = theList.theList.getElementsByTagName('input'); for ( var i=0; i < inputs.length; i++ ) { if ('text' == inputs[i].type) { inputs[i].setAttribute('autocomplete', 'off'); inputs[i].onkeypress = function(e) {return killSubmit('theList.ajaxUpdater("meta", "meta-' + parseInt(this.name.slice(5),10) + '");', e); }; } if ('updatemeta' == inputs[i].className) { inputs[i].onclick = function(e) {return killSubmit('theList.ajaxUpdater("meta", "meta-' + parseInt(this.parentNode.parentNode.id.slice(5),10) + '");', e); }; } } $('metakeyinput').onkeypress = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; $('updatemetasub').onclick = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; } $wordpress/wp-admin/custom-header.php*admin_header_callback = $admin_header_callback; } function init() { $page = add_theme_page(__('Custom Image Header'), __('Custom Image Header'), 'edit_themes', 'custom-header', array(&$this, 'admin_page')); add_action("admin_print_scripts-$page", array(&$this, 'js_includes')); add_action("admin_head-$page", array(&$this, 'js'), 50); add_action("admin_head-$page", $this->admin_header_callback, 51); } function js_includes() { wp_enqueue_script('cropper'); wp_enqueue_script('colorpicker'); } function js() { if ( isset( $_POST['textcolor'] ) ) { check_admin_referer('custom-header'); if ( 'blank' == $_POST['textcolor'] ) { set_theme_mod('header_textcolor', 'blank'); } else { $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['textcolor']); if ( strlen($color) == 6 || strlen($color) == 3 ) set_theme_mod('header_textcolor', $color); } } if ( isset($_POST['resetheader']) ) { check_admin_referer('custom-header'); remove_theme_mods(); } ?>

    %1$d x %2$d pixels will be used as-is.'), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); ?>


    false); $file = wp_handle_upload($_FILES['import'], $overrides); if ( isset($file['error']) ) die( $file['error'] ); $url = $file['url']; $file = $file['file']; $filename = basename($file); // Construct the object array $object = array( 'post_title' => $filename, 'post_content' => $url, 'post_mime_type' => 'import', 'guid' => $url); // Save the data $id = wp_insert_attachment($object, $file); $upload = array('file' => $file, 'id' => $id); list($width, $height, $type, $attr) = getimagesize( $file ); if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) { set_theme_mod('header_image', clean_url($url)); $header = apply_filters('wp_create_file_in_uploads', $file, $id); // For replication return $this->finished(); } elseif ( $width > HEADER_IMAGE_WIDTH ) { $oitar = $width / HEADER_IMAGE_WIDTH; $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication $url = str_replace(basename($url), basename($image), $url); $width = $width / $oitar; $height = $height / $oitar; } else { $oitar = 1; } ?>

    1 ) { $_POST['x1'] = $_POST['x1'] * $_POST['oitar']; $_POST['y1'] = $_POST['y1'] * $_POST['oitar']; $_POST['width'] = $_POST['width'] * $_POST['oitar']; $_POST['height'] = $_POST['height'] * $_POST['oitar']; } $header = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); $header = apply_filters('wp_create_file_in_uploads', $header); // For replication $parent = get_post($_POST['attachment_id']); $parent_url = $parent->guid; $url = str_replace(basename($parent_url), basename($header), $parent_url); set_theme_mod('header_image', $url); // cleanup $file = get_attached_file( $_POST['attachment_id'] ); $medium = str_replace(basename($file), 'midsize-'.basename($file), $file); @unlink( apply_filters( 'wp_delete_file', $medium ) ); wp_delete_attachment( $_POST['attachment_id'] ); return $this->finished(); } function finished() { ?>

    step_1(); } elseif ( 2 == $step ) { $this->step_2(); } elseif ( 3 == $step ) { $this->step_3(); } } } ?> #wordpress/wp-admin/dbx-admin-key.jsaddLoadEvent( function() {var manager = new dbxManager( dbxL10n.manager );} ); addLoadEvent( function() { //create new docking boxes group var meta = new dbxGroup( 'grabit', // container ID [/-_a-zA-Z0-9/] 'vertical', // orientation ['vertical'|'horizontal'] '10', // drag threshold ['n' pixels] 'no', // restrict drag movement to container axis ['yes'|'no'] '10', // animate re-ordering [frames per transition, or '0' for no effect] 'yes', // include open/close toggle buttons ['yes'|'no'] 'closed', // default state ['open'|'closed'] dbxL10n.open, // word for "open", as in "open this box" dbxL10n.close, // word for "close", as in "close this box" dbxL10n.moveMouse, // sentence for "move this box" by mouse dbxL10n.toggleMouse, // pattern-match sentence for "(open|close) this box" by mouse dbxL10n.moveKey, // sentence for "move this box" by keyboard dbxL10n.toggleKey, // pattern-match sentence-fragment for "(open|close) this box" by keyboard '%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts ); // Boxes are closed by default. Open the Category box if the cookie isn't already set. var catdiv = document.getElementById('categorydiv'); if ( catdiv ) { var button = catdiv.getElementsByTagName('A')[0]; if ( dbx.cookiestate == null && /dbx\-toggle\-closed/.test(button.className) ) meta.toggleBoxState(button, true); } var advanced = new dbxGroup( 'advancedstuff', 'vertical', '10', 'yes', // restrict drag movement to container axis ['yes'|'no'] '10', 'yes', 'closed', dbxL10n.open, dbxL10n.close, dbxL10n.moveMouse, dbxL10n.toggleMouse, dbxL10n.moveKey, dbxL10n.toggleKey, '%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts ); }); )wordpress/wp-admin/edit-category-form.php '; $action = 'editedcat'; $nonce_action = 'update-category_' . $cat_ID; do_action('edit_category_form_pre', $category); } else { $heading = __('Add Category'); $submit_text = __('Add Category »'); $form = '
    '; $action = 'addcat'; $nonce_action = 'add-category'; do_action('add_category_form_pre', $category); } ?>

    category_parent . '&hierarchical=1&show_option_none=' . __('None')); ?>

    #wordpress/wp-admin/edit-comments.js :addLoadEvent(function() { theCommentList = new listMan('the-comment-list'); if ( !theCommentList ) return false; theExtraCommentList = new listMan('the-extra-comment-list'); if ( theExtraCommentList ) { theExtraCommentList.showLink = 0; theExtraCommentList.altOffset = 1; if ( theExtraCommentList.theList && theExtraCommentList.theList.childNodes ) var commentNum = $A(theExtraCommentList.theList.childNodes).findAll( function(i) { return Element.visible(i) } ).length; else var commentNum = 0; var urlQ = document.location.href.split('?'); var params = urlQ[1] ? urlQ[1].toQueryParams() : []; var search = params['s'] ? params['s'] : ''; var page = params['apage'] ? params['apage'] : 1; } theCommentList.dimComplete = function(what,id,dimClass) { var m = document.getElementById('awaitmod'); if ( document.getElementById(what + '-' + id).className.match(dimClass) ) m.innerHTML = parseInt(m.innerHTML,10) + 1; else m.innerHTML = parseInt(m.innerHTML,10) - 1; } theCommentList.delComplete = function(what,id) { var m = document.getElementById('awaitmod'); what = what.split('-')[0]; if ( document.getElementById(what + '-' + id).className.match('unapproved') ) m.innerHTML = parseInt(m.innerHTML,10) - 1; if ( theExtraCommentList && commentNum ) { var theMover = theExtraCommentList.theList.childNodes[0]; Element.removeClassName(theMover,'alternate'); theCommentList.theList.appendChild(theMover); theExtraCommentList.inputData += '&page=' + page; if ( search ) theExtraCommentList.inputData += '&s=' + search; // trust the URL not the search box theExtraCommentList.addComplete = function() { if ( theExtraCommentList.theList.childNodes ) var commentNum = $A(theExtraCommentList.theList.childNodes).findAll( function(i) { return Element.visible(i) } ).length; else var commentNum = 0; } theExtraCommentList.ajaxAdder( 'comment', 'ajax-response' ); // Dummy Request } } if ( theList ) // the post list: edit.php theList.delComplete = function() { var comments = document.getElementById('comments'); var commdel = encloseFunc(function(a){a.parentNode.removeChild(a);},comments); var listdel = encloseFunc(function(a){a.parentNode.removeChild(a);},theCommentList.theList); setTimeout(commdel,705); setTimeout(listdel,705); } }); $wordpress/wp-admin/edit-comments.php

    |

    get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_ID = " . $comment); // $authordata = get_userdata( $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = $post_id") ); if ( current_user_can('edit_post', $post_id) ) { if ( !empty( $_POST['spam_button'] ) ) wp_set_comment_status($comment, 'spam'); else wp_set_comment_status($comment, 'delete'); ++$i; } endforeach; echo '

    '; if ( !empty( $_POST['spam_button'] ) ) { printf(__ngettext('%s comment marked as spam', '%s comments marked as spam.', $i), $i); } else { printf(__ngettext('%s comment deleted.', '%s comments deleted.', $i), $i); } echo '

    '; endif; if ( isset( $_GET['apage'] ) ) $page = abs( (int) $_GET['apage'] ); else $page = 1; $start = $offset = ( $page - 1 ) * 20; list($_comments, $total) = _wp_get_comment_list( isset($_GET['s']) ? $_GET['s'] : false, $start, 25 ); // Grab a few extra $comments = array_slice($_comments, 0, 20); $extra_comments = array_slice($_comments, 20); $page_links = paginate_links( array( 'base' => add_query_arg( 'apage', '%#%' ), 'format' => '', 'total' => ceil($total / 20), 'current' => $page )); if ( $page_links ) echo ""; if ('view' == $mode) { if ($comments) { $offset = $offset + 1; $start = " start='$offset'"; echo "
      \n"; $i = 0; foreach ( $comments as $comment ) { get_comment( $comment ); // Cache it _wp_comment_list_item( $comment->comment_ID, ++$i ); } echo "
    \n\n"; if ( $extra_comments ) : ?>

    '; wp_nonce_field('bulk-comments'); echo ''; foreach ($comments as $comment) { $authordata = get_userdata($wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID)); $comment_status = wp_get_comment_status($comment->comment_ID); $class = ('alternate' == $class) ? '' : 'alternate'; $class .= ('unapproved' == $comment_status) ? ' unapproved' : ''; ?>
    ' . __('Name') . ' ' . __('E-mail') . ' ' . __('IP') . ' ' . __('Comment Excerpt') . ' ' . __('Actions') . '
    comment_post_ID) ) { ?> (Unapproved) comment_post_ID) ) { echo "" . __('Edit') . ""; } ?> comment_post_ID) ) { echo "comment_post_ID."&c=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by '%s'. \n 'Cancel' to stop, 'OK' to delete."), $comment->comment_author )) . "', theCommentList );\" class='delete'>" . __('Delete') . " "; } ?>

    '); return false } return confirm('')" /> '); return false } return confirm('')" />

    $page_links

    "; ?>
    )wordpress/wp-admin/edit-form-advanced.php(T

    "; wp_nonce_field('add-post'); } else { $post_ID = (int) $post_ID; $form_action = 'editpost'; $form_extra = ""; wp_nonce_field('update-post_' . $post_ID); } $form_pingback = ''; $form_prevstatus = ''; $form_trackback = 'to_ping) ) .'" />'; if ('' != $post->pinged) { $pings = '

    '. __('Already pinged:') . '

      '; $already_pinged = explode("\n", trim($post->pinged)); foreach ($already_pinged as $pinged_url) { $pings .= "\n\t
    • " . wp_specialchars($pinged_url) . "
    • "; } $pings .= '
    '; } $saveasdraft = ''; if (empty($post->post_status)) $post->post_status = 'draft'; ?> $_GET['message']) : ?>

    id ); // TODO: ROLE SYSTEM if ( $authors && count( $authors ) > 1 ) : ?>

    post_status ) { ?> post_content); ?>

    post_status || 0 == $post_ID) { ?>

    ' . __('This feature requires iframe support.') . ''; } ?>

    ()

    post_status) ? __("You are about to delete this draft '%s'\n 'Cancel' to stop, 'OK' to delete.") : __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), $post->post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
    (wordpress/wp-admin/edit-form-comment.phpcomment_ID); $form_action = 'editedcomment'; $form_extra = "' />\n\ncomment_ID) ?>
    comment_content, 'content', 'newcomment_author_url'); ?>

    :

    :
    comment_ID ); ?>: />
    wordpress/wp-admin/edit-form.php F

    post_category); ?>

    100)) { $rows = 10; } ?>

    (Separate multiple URLs with spaces.)'), 'http://wordpress.org/docs/reference/post/#trackback'); echo '
    '; ?>

    '; } ?>

    %wordpress/wp-admin/edit-link-form.php+'; $nonce_action = 'update-bookmark_' . $link_id; } else { $heading = __('Add Link'); $submit_text = __('Add Link »'); $form = ' %wordpress/wp-admin/edit-page-form.php

    "; } else { $post_ID = (int) $post_ID; $form_action = 'editpost'; $nonce_action = 'update-page_' . $post_ID; $form_extra = ""; } $temp_ID = (int) $temp_ID; $user_ID = (int) $user_ID; $sendto = clean_url(stripslashes(wp_get_referer())); if ( 0 != $post_ID && $sendto == get_permalink($post_ID) ) $sendto = 'redo'; ?>
    '; } ?>

    id ) ) : // TODO: ROLE SYSTEM ?>

    post_status ) { ?> post_content); ?>

    post_status || 0 == $post_ID): ?>

    ' . __('This feature requires iframe support.') . ''; } ?>

    ID) ) ?> post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
    !wordpress/wp-admin/edit-pages.php}

    wordpress/wp-admin/edit.php(2

    post_title = apply_filters('the_title', stripslashes($draft->post_title)); if ($draft->post_title == '') $draft->post_title = sprintf(__('Post #%s'), $draft->ID); echo "$draft->post_title"; ++$i; } ?> .

    post_title = apply_filters('the_title', stripslashes($draft->post_title)); if ($draft->post_title == '') $draft->post_title = sprintf(__('Post #%s'), $draft->ID); echo "$draft->post_title"; ++$i; } ?> .

    post_title)); elseif ( ! is_paged() || get_query_var('paged') == 1 ) _e('Last 15 Posts'); else _e('Previous Posts'); } ?>

    get_results("SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC"); if ( count($arc_result) ) { ?>

    'display name' $posts_columns = array( 'id' => '
    ' . __('ID') . '
    ', 'date' => __('When'), 'title' => __('Title'), 'categories' => __('Categories'), 'comments' => '
    ' . __('Comments') . '
    ', 'author' => __('Author') ); $posts_columns = apply_filters('manage_posts_columns', $posts_columns); // you can not edit these at the moment $posts_columns['control_view'] = ''; $posts_columns['control_edit'] = ''; $posts_columns['control_delete'] = ''; ?> $column_display_name) { switch($column_name) { case 'id': ?>
    post_modified ) _e('Unpublished'); else the_time(__('Y-m-d \<\b\r \/\> g:i:s a')); ?> post_status) _e(' - Private'); ?> " . __('1') . '', "" . __('%') . '') ?> ID) ) { echo "" . __('Edit') . ""; } ?> ID) ) { echo "ID) . "' class='delete' onclick=\"return deleteSomething( 'post', " . $id . ", '" . js_escape(sprintf(__("You are about to delete this post '%s'.\n'OK' to delete, 'Cancel' to stop."), get_the_title())) . "' );\">" . __('Delete') . ""; } ?>
    get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $id . " AND comment_approved <> 'spam' ORDER BY comment_date"); if ($comments) { ?>

      get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID)); $comment_status = wp_get_comment_status($comment->comment_ID); if ('unapproved' == $comment_status) $class .= ' unapproved'; if ($i % 2) $class .= ' alternate'; echo "
    1. "; ?>

      comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

      — [ comment_post_ID) ) { echo " " . __('Edit') . ''; echo ' | comment_author)) . "', theCommentList );\">" . __('Delete') . ' '; if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) { echo ' | ' . __('Unapprove') . ' '; echo ' | ' . __('Approve') . ' '; } echo " | comment_post_ID . "&c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to mark as spam this comment by '%s'.\n'Cancel' to stop, 'OK' to mark as spam."), $comment->comment_author)) . "', theCommentList );\">" . __('Spam') . " "; } ?>

    2. '; }//end if comments ?>
    wordpress/wp-admin/export.php"^

    get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); $categories = (array) $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, posts_private, links_private FROM $wpdb->categories LEFT JOIN $wpdb->post2cat ON (category_id = cat_id) LEFT JOIN $wpdb->posts ON (post_id <=> id) $where GROUP BY cat_id"); function wxr_missing_parents($categories) { if ( !is_array($categories) || empty($categories) ) return array(); foreach ( $categories as $category ) $parents[$category->cat_ID] = $category->category_parent; $parents = array_unique(array_diff($parents, array_keys($parents))); if ( $zero = array_search('0', $parents) ) unset($parents[$zero]); return $parents; } while ( $parents = wxr_missing_parents($categories) ) { $found_parents = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, posts_private, links_private FROM $wpdb->categories WHERE cat_ID IN (" . join(', ', $parents) . ")"); if ( is_array($found_parents) && count($found_parents) ) $categories = array_merge($categories, $found_parents); else break; } // Put them in order to be inserted with no child going before its parent $pass = 0; $passes = 1000 + count($categories); while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) { if ( $cat->category_parent == 0 || isset($cats[$cat->category_parent]) ) { $cats[$cat->cat_ID] = $cat; } else { $categories[] = $cat; } } unset($categories); function wxr_cdata($str) { if ( seems_utf8($str) == false ) $str = utf8_encode($str); // $str = ent2ncr(wp_specialchars($str)); $str = ""; return $str; } function wxr_cat_name($c) { if ( empty($c->cat_name) ) return; echo '' . wxr_cdata($c->cat_name) . ''; } function wxr_category_description($c) { if ( empty($c->category_description) ) return; echo '' . wxr_cdata($c->category_description) . ''; } print '\n"; ?> <?php bloginfo_rss('name'); ?> http://wordpress.org/?v= category_nicename; ?>category_parent ? $cats[$c->category_parent]->cat_name : ''; ?>posts_private ? '1' : '0'; ?>links_private ? '1' : '0'; ?> <?php the_title_rss() ?> post_content ?>]]> ID; ?> post_date; ?> post_date_gmt; ?> comment_status; ?> ping_status; ?> post_name; ?> post_status; ?> post_parent; ?> menu_order; ?> post_type; ?> get_results("SELECT * FROM $wpdb->postmeta WHERE post_id = " . $post->ID); if ( $postmeta ) { ?> meta_key; ?> meta_value; ?> get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID); if ( $comments ) { foreach ( $comments as $c ) { ?> comment_ID; ?> comment_author; ?> comment_author_email; ?> comment_author_url; ?> comment_author_IP; ?> comment_date; ?> comment_date_gmt; ?> comment_content; ?> comment_approved; ?> comment_type; ?> comment_parent; ?> $wordpress/wp-admin/images/box-bg.gifoGIF89a!,4A0I8tdih2_8p,ϴӊK|/pH4sŤr;)wordpress/wp-admin/images/box-bg-left.gif%GIF87a, ;*wordpress/wp-admin/images/box-bg-right.gifGIF87a,dH0I8ͻ`(dihlp,ϴ3P|pH,ȤrШtJZجv8uݰxL.z|NJ7~T_ ;&wordpress/wp-admin/images/box-butt.gif[GIF89a !, ؠ6ldihlp,t{e BpH !:Шtq$0z`by0EncQP"$=  L%  &  Y)wJ)rD;+wordpress/wp-admin/images/box-butt-left.gifGIF87a , .6ld BInSR̥H20 DH͡H!;,wordpress/wp-admin/images/box-butt-right.gifGIF89a , &dihlp,tmx|pH,Ȥrl:ШtJZجvzxL.zn|N~Nk    H*\ȰÇ#JH (PǏ CIɓ(S\ɲ˗0eQ@ɳϟ@ ѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMD D ȞM۲3ͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhf%@&$h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6r8 (?"馜v駠*jjꩨꪬ꫰*무j뭸뮼+k&6F+HVkfv+k覫+k, G#;&wordpress/wp-admin/images/box-head.gifoGIF89a&&%#|$$!w!vd#w.7UW%#{'#}%!x'"x&"z$"y u!,@`,Hrl:ШtJZXh4bzn|Nui 22  1C33 ! E}$F  Ftp *\ȰÇ#JHŋP4XIɓ(S\ɲ˗0cLIC d@ JѣH*]t((AÅիXjʵׯ`ÊKٮOĘJÄ۷pʝKݻx˷ߺiʠ:È+^̸ǐ#KL2lQh̹ϠCMӨSy0 c˞M۸sͻoȓ+_μУKN:4 hνËOӫ]˟OϿإ h& 6F(aؕ`fv ($hb,0(4h8cص@)DiH&L6d TViXf\v`)fح`hlp)tig؝|矀*蠄j衈&h;+wordpress/wp-admin/images/box-head-left.gifNGIF87a4&&%#|$$!w!vd#w.7UW%#{'#}%!x'"x&"z$"y u,s@`, "\"qdH21a00ASUEg IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WJ;1 fIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JQo2ȨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^zQீ `KMb:d'KZͬf7z hGKҚMjWֺlgKͭnw pKMr:ЍtKZͮvzUm_ @Mz|Kͯ~LN;'L [ΰ7{ GL(NW0gL8αw@L"?/H&;PL*[Xβ.{`L2hN6pL:xγ>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNհgMZָεw^MbNf;ЎMj[ζn{MrNvMzη~NO;&N[ϸ7{ GN(OW0gN8Ϲw@ЇNHOҗ;PԧN[XϺַ{`NhOpNw5xϻOO;񐏼'O[ϼ7{GOқOWֻgOϽwOO;ЏO[Z{OOOϿ8Xx 8Xx؁ "8$X&x(*,؂.0284X6x8:<؃>}B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx؈8Xx؉8mW-p؊8Xx؋8XxȘʸ،8Xxؘڸ؍8Xx蘎긎؎8Xx؏9Yy)} ِ9Yyّ "9$Y&y(*,ْ.0294Y6y8:<ٓ>@B9DYFyHJLٔNPR9TYVyXZ\ٕ^`b9dYfyhjlٖ7W+r9tYvyxz|ٗ~9Yy٘9Yyٙ9Yyٚ9Yyٛ9Yyșʹٜə}uyؙڹٝ9Yy虞깞ٞ9Yyٟ:ZzK ڠ:Zzڡ ":$Z&z(*,ڢ.02:4Z6zWA;*wordpress/wp-admin/images/browse-happy.gif.GIF89a(MMy3Ȫjjj44mmRRrS 9Ұq$$qqqYY҉݉{kffxzcLLHHJJvv<yy!!((aamuznnn}}<<\\8섄Ɯvvv99EEAxyyyaaɥ8811~~~ĽAAVV--v__qƺN䆆3뮟kkkccvqi}~}zGGqq///??|Ɵ[T񰳷FnᾍK7ߪP@a*թܿ~ ˆ+68q|:9”lX,o_Ο=o},cIаI~-6۳s֍{oϖJF8Ms͟K_IJ$ߣOˣ_}ID1R0EPҧIU>H#Q ? ,A8 N)+C?#蜉BJ$B)#x$ '3䏳 0#BxdF8Eϓ"?E.I% >OAψ8?kf'%I&Pj:J&J$'I衆:i@ 3LEꏥm2饕J*馆>?xg8✪jP $̺&&h(X+첗Rr*:b;%ZO>ُ>?> #,&BɞARS. )2o 7,PX O)qOybdJ\(TBJ&|-?l#dH&R t$"J$HwDG}Q-uX_\g^WMcs|2*B ?hڎtB+J#T6͙h$Ȳ(j?kCSLGg枇l&%q8s#,ȩ)%r,;;Bbw`*QN|D?`VFpb ]\␰xr\؁ LIKS2Us*G q,E**AV4@E(7щW4B ,h( *~aX`8@A8`HؼGsT#0?Z+Mp*1щN#2`h?D#J `,D2ā V셫X[%2 {0|bVQ u D(E`Ѐ"td"Ѓ+8t( Y 7X8x69txD(^ `]ڑ#X8B0mH0@YDB!$6QVlt`G(&%ax@z ;08i A@x?^p 25  3xW_6&qx"D@ HJ U+hl.@ d!ȼ!%怀ABhFA U JLwAذCA8@9,(~@ 6a N6daه)g@U' '0\B ##8%pJ P@ iG(9"c 2 e8Ρ&` p`ܐ Br=]G`"D, 8 &FQl;v&' Mԁ:KXsw+la \"YsPs2:0K`&-OA9_ ZT!P|ЃЧ?! 9H=H45xQuC"pp?Pdf P0 p i @]@P 0_`Rg|P` Up r0bUmDw'H@7Ht@k 7 zXtd=&vM0 {p 0q@ g@F @ `l -# b AHCp^\]NH00e0o=d F@u @ pvK <@^`p 0 &u g@' 5F,g)pXtdf&dujR0yP 0W6k\0pj@6@^ @Aa6ZG– pƒ! m X1 spKp BYPCy| G@Kp E5P PApp5P`Q]ptey aM /PD;` jI!" ˅ 0 qG 0h4@ CD}2K ` `Od/!NXX[`z O` "HPv& ` `_aB  A D 0 P pZT FԠԜgHI  Xd -{L%#a SyH x/ C G3>GeP:HH;Ev:ji  r UA  7`B\ZvzxU2z0z0lP ~ʥAD9A+Kz@}U)  @gJ3@r::%@P% zP0` B gA< ?!  @! G!޺) C,`79 )p?:Zz*PJ!@ iZp 4P4!C0 )@ ;&{(*,۲.{:aJ6 {8:;'wordpress/wp-admin/images/fade-butt.pngPNG  IHDR(*gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE 2IDATxbpP``"uf Rg $`CM888 eueeeuA]_J]JL]_LDE#e@ <<@GBGH  )f@ |||||V|Ġjh(*i*) dĤjĤdd288CIbT6UV䔖VV0V4 'AAM{A-AM-A%%M-A%bbbaab KE[ |*@X @a U VA*@X @a U VA*@X @a U VAKv%FUIENDB`.wordpress/wp-admin/images/login-bkg-bottom.gifGIF89a򧴾>Y!C]o4Q=Zq)JcYr7Sw˪͏ 2O!,@p rl:ШtJZجvz8:BYȀ̪|N~M k. f'|x&f .-jG"_"f-. f#$u$#f k̻k kvk  GKk ok20.0uZ @ ȱ6pI@0˗0cʜI͛8sɳݟ>MR&@ <]ʴӧPJ:u@ -ά,`ÊK٥D(wPzݻxu9 IA B@wǐ#K7 Ъ @X AS^ͺװc˞M۸sͻ߹(B  ZHNسkνËOӗO˟OϿ;,wordpress/wp-admin/images/login-bkg-tile.gifKOGIF89a<_R&k\Jt=`%_T*eLx@eO|VLveYTS[!ZN{⁝Hq YPzU~%`X5kKv(bW$]GyPyT~9Z$`GpJtV-eDk!["_T(d'cVOxXP}(`LwNz!^LvNyuZR|WT*hIrS|Lt"^VP|X \mXHqNzP|"]]S~R'aJsYVP|,j"i g=qaVOzUVPQYMv}#`&`S|ZQ~YKuMxNx#^Q{NwZUhNyU_/gY-l 4R 3Q 3PT 5T6UBh7W8X;]T:\:[ 5S?c>b0hFnCiEm7VCjAgEl8YAfSS>a 4S 2P6V?dIsP~QFo;^9YDkDlHrGoP}Fm 6T 4Q7XBi;\Bg@fIrGpMyRQUIr%aItKt%bPIsRJtWQ}XKsZR~SO{W&b#[%_"]Q}T:x+cUVW\ 2O!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0"b!8sɳϟ@ JѣH*]ʴӧKm`̚6E#ׯ`ÊKٳhӪ]˶۷pʝKn\04*F& [oÈ+^\fbfbъb `̹Ϡ^I߈ P(װc,T؈i ʹwμE:&,c/ËOۨ_Ͼ{l˟O~|Ͽ(`X{&z 6cLrt6vPjd&@($|0Ƹ(F8aP$ŬaAL"Lh3TV c>`\vkmh6leXgtֹ_`|CA6qBEFR>]>|裐F*餔VjdX駟 ꨢ6aꩨª k#檫ꫯ`+k,&벹J*V{*%v{+%SPieT\k5w3ۂV;B,.,6찱 7Rpگn$_?߱AfP.w[8;r[1:ų<1 ?F|t-A_o%nYJsU3N}0D=)ۈ2>L@VDpIc?=va騛Nz}TMdžg픢kAӮ@+ Akփ wtW 5 >{#/~=92 k">s|_?ltO{bm+|;&0Aɩ@v`ns<.YK FHS7ÙB3Wā fep~A ,z&Lh=pb, x5i[BCM4VuVS6{hMqcU6-ސ@vGap[d X嬧aH|$G=YuOɰ[@pH \;93σS#$8ZJzrUmEMr[ *&JRl!3U teKY d.WX^yYbs :";I&F",hMcaS @YK\6e EE`Q$;LS*3#s3I|aƁ޼e8:NL*Tlh/l)mz/ &#GJ<6Ԧ.*߱+ڑxLg !qᴋ]fWSգCEcŒJ,pN\:PJb-]U5ՀiՓ\+Z \eg4j0"a<:ZVnTr´+{XK-mXk 1Zk?*ْԲl@3{: *h9ЇrJ:-<S8ЍtKZ>'V~BUbܺײeoZ,BYX vwg L`*w}a-`׻x]*lrۇz/}e ujEU0u A86b oLr,ؚ&&{^f[:Z1 ؊[ N 2x] RF6a|s:Yɹ {WYXβ`/3bNmFgw_\V+j^X5l;{C XM^Wj9\g]13ֳY#jI8{w-_hu*QTeF >AY YB<Þ׋g޸\|N]C<, s ȿ~x0 bNe2Ǯq&ϕ'jJ&uS>u+;ub^Yw3uw\?ρ]NE;8Y߭o>p8dcׯcOx9wgO{q꥙u9-maL4~5}/5kqGiW;g?r ]r/ݗfV/p^n6E %~8H{eg~GyvytrGm8`^wnZ7dV:WB&oH*8{8t HBѦoHw_J'|E| z;@B8DXFxHCX;buRPXwsVxvx'l)Ȃ\ hjE'~5H~n*QX^L)Jpr>8vxs؆℧wiV}T}ׅȂ_oKb}vђkȆzGX؉MSnz$8d(x,( dPt|+xAwocȀV+8h胶0XxؘڸhBJX1['=38$WKXlhV`PF@@w8aH fHW5BxWS13<-ҍ&y((*ْ.8hOdhp?؎5yxw("VF (@e8sdbβ 3")%jȒlk#IeēTX( t0| "И *( V0 0 d0yATB)Uy0b*h*f *2Ii nٚirTPxhix}M)p20vdp*Ft`  n :M$cVU9yX)2Iuyw?|TA9* (KpFpzxV``i{R72IY\4jY9I@d!ʛDZYxdiZz IPW\9Dɞ-ꢃs135zpښ: Q@Z^ڛ=9B?  jhY>0Vڨw  7Yٕ6Gɑik C2sJroY3QYAjM )Ù` 2:d \ * yfhe n >x :Zzzbj Ky#CGJ꫾K@:x`UɬκJ9*!jl)Ꚛڱ { $[ɣz*DȫJ@` VKy n n@ |Џ-z|"<ݍJܭ;.S0,ڣ]?nnDHB~  >7t.| *}ݨ FAm瓍z}~~օHԋF觭-=Zh ϗUW~[իyl^V\: \E\},;6M~썾NnRMV`\@y,KUM|`y>4  ]=nSN|p ?lᐐ,OHpnUʹ{ )^6ャ58=E?MNO^R_~Yoՙ =ҵH Y z' w?nq/8:C)>~/0ď۸T/S0PƍYaGJ dn*'a^0Ι "&.Ґ$Nht5f G!E$Y%T;Vlʕ+!M9snx"E qHeBW !(H IbŪDY l3aI%;vR{=`vq嶘.[(Xfݶ]Qʖ k+[ dMt*U,R@$ҤG:'Dyj+[O&͕6_=ruNOZTK>:eʒx1ٳi @\;a{m8Vʖ`s; mAMjmB 3pC; G .5J+(*Q1)-Z$3j3ⱑcƬ#! r. +:{`,2qI'0#P C, z4cG?r2㹊*k*Z")A!#BmċFqO>A\ 4PCEӢ3N]|g|LsK3RAL&L|PXJ'QpXA&'OL1ɴL,\6[S94E-Qjk#47kVE5rH/0JLxxr,Fp2Tc<+2`g.2qF|m 5s?4e<67:VZ5ZlՖܰqecyfkq"D*);G3m7Lsn^4`B`V#g`׻iJ$H>crd>H $+x-*O4d;J '|pS mUځpo\g <8B衉6]xc H@9Ȳ"Z}2Vbp 6aά-g҆&ǛwfeY_z~{p?v"+tJ+ɶDZ$y$a#kp/p1z.* '}%~~#d 1hW,#LxB0z+ RBI39!hk?̏~"@R-[(L-Pֱ "D@N=f 6x|/scVcuc0(8tϒCJ9G?_F{nȟBlF vA2th`%?2ZƌgL>o"K:1&y#0?'#JtxHhF~?!Y,A1Ia `*UvCB0- &8qx`SԈK6*p1 jBa$qzdd"Mh U*7- Nɯ*.3xCxwF`XAY?&<te*:2M(H'fr<,s ipwNxlxaE(A}Gy +p{hO{SĒX?i\"""Tԅ GJȐt sjZ{uG.KYZ> sP!7pJ7,k,CF@8̃\s=_8g1,h1ܞB",B#\;B%\"@ 8=@3d+/õK/;AT@@BALD^Tc` FaFb,Fc=pū8r,KRa7#; \@ r,G˰CpomdlLF?|gHgTFHHEHHH BtDd9ƃdn,CGrFM ]R-QLM,Q<ѺdOUL0}J/5EPpLOu#$L'&SRQ+F,҂R.5@5XMHTE]D}'@2}L4=!]S6P$-@(SSOK;jQ-O?]{xC]G{ BC}0|U3 mP5lS7T UUhQ5)S=ҔdR  G ŜNhױHW0@Z "T!=ȄT'`V ΔVH5HXU*hX'Xi4L8XX`M}-wPY}HZ}_uTx%TG2mO-YHcPu<TX}‡u؅}ڃZZZZګ=Fu[ ۦUZy E[tX[tXj|8Z=ϞYp,Y@vYa݊ pTM\E{%GB\4Y۞[ Z[]e[tH[5ۦ۱=F=]M]եک]]}5Fۦ]u[=G[\ Y5ԁ`-G?(TUWۿUGś%Gx0^(GɝܒQ]r݇ݰ5F}_֍__ڽ]e[1ݍ޼^v(Gxh0ޛB^ Fv5WE ޝ%`ܡ%_OܴUe__~maF%UZ]l[ (~`3h#n?^b&ց"6b"ކ Y `\E_vX^.c}a3N]_\`%` >xx*KN1(>bA~`wb1(a0VbTcMZ44a.[㶕9[XcDDc0q3YeeF\-b6R/^JKdbdhdhaf7&RQdofN堵cd偄w%[,>DbpJg affb ㆵjMffanclagr`V/ȓʜ%YXeLgp|E~6f耮hJ>a݆Vci抶苦cqg% f&ޑvgGEd+G jiHoNI&hf%j3j~_]>ꉎ^jX~js۪j.lG>OZNNkm湎2m.mvX/h־ah]qmm.5l6laqmhlrp֦lMm>ўnnl̾nnn^en/f6Gm6~o%FG@n>_&]npp7~XVwp%p%0kf[qm~pq Nj WwpN>pqnOm_p>og6l#mq-q6_qEhGq-ξqgn) Nr6os]'Gr*sr>l.s>seOq '"wsG7r8' s:p;gn[A/m@tksOMsCpD?o.V~tWHoIJK*rAu@u^Q_p.uE0sTOEgVG_r&Y?[onq=u>um7Jvp#wr'wtOwb/S(xwipzgg_r7XX{wixwnq_qNwropJ.<xxxxx&?.PxOwhrv7x ({gt~yvxyKro_y?yoxzzxzo_Oz?zyww|yo~N/{[_qWxyzz/|W{{{y{{o{g|t{>||O}֗zƿ/G{͗wvw}9 __}'7~/sȧy}^l}|g|OӇ~x~oxr7~9H%b ?0l!ć&R8."ƌ *ye;.b2V%p.BM,PR箿p¦Lbdž))2-sB59s}<':rKM;4QK=5U[t{h5׃da"em5 a_3=wb۝eyox5}H ~8YvMh3:Xy6y@;6ދs⥛n*魻8{3cC"ی9:[a^7^OsjWOv>s.tW(e/`0x#^T \ L@z,A/maGC*4! CP.^cȽ* ,L7@ j>H8,&+C%>Pbh<"nбv#=~ģ8)A2<$"9"0t# (Rl#3&$$(QՋU|%,c)YҲ %.=6j2$K2mԥ'qJ[2|,Si,hRּ2ANq|0)_~f"Ikϔ)yRD"yYF>M|~Ҟ'B τ2T$AȀ2$EAD=hCCjͅh ;jȍz3E(LR4(IsL괧iMcҖ4t&7ԛ'5*թRV*Vխjj !ֱcZӪֵըc+\jֹ7*^׽|+`U=k\*h=aURg22r,hC+ђ=-jSZ(}k Ҷ,nsڶ-p᪖=.r\*}ni+]p-virװ+^(Lw=/z-p+^=,}+_W/; O>03~p! S|]sp0Cb յ0S .~1 ӸV1'l X"p{6>2,$3.r S2b's ^e-S25l,b~ 9׸e^uӬٺv2]cx І>4E3ю~4-PҖ43>cXӞQԦ>u Uգv2c-Mxֶ]]5j.ߺ>63ea3ٌl1'NmgC{-qSz>wuZ 7?nvӛT}7..p}p8#{K8+[8C.&?9S򕳼.9c.sW69s>9Ѓ.tϼF?:ғ>+N:W>SVzϣs]L:.vfӮvón;.ӽv;~.?|+ڎ3;#SG/s|;/ы>?=5z_/7^=Of=/?>3>/S|s>/??ӯ?ӿ?埿  . 6> <V^ fn v~   Ơ ֠ `  !&.! <FN!V^!fn!v~!!!~!!ơ!a0!!  "!!""&"."#6#>"$F""$V%^"&f&n"'v'"<р("))"**"++",Ƣ,"-֢-"..b(/"00#11+"2.#363>#4F#1*4V5^#6f6"<ł7~#88#99#::#;;#<ƣ<#=֣=c7ޣ>#??#@@:#A$B&B.$C6$@CFDN$EVE#%TFT$&dFdN&eVe^_6&fn&gvg~&h&ejhi&jj&ik&lƦlFfkΦm&nl“4o&pp'qq'r&r.'s6s>'tFtN'uV'sJS Ȃvn'wvw~'xx'yy'zz'{{'|Ƨ|'vΧ}'~~''z'((&h 6>(F'vւ^(fn(v~((((h(֨(樎(())&.)6(vNN)V^)fn)v~))))=HR)֩)橞))**&.铼(2*V^*fn*v*:*@ĩ**jL**֪*" *+bꮒ˨j.+6:jV^+jjf~+nk)/+++ƫ++櫾+*,&.,6֫jQV^,fnlFlƩ*Ȏ,ɖɞ,ʦʮ,˶˾,Ƭ,֬,,zlN,--Ҿ,j6>-FN.R-fn-v-Zz؎-ٖ-*-۶۾-ƭ-֭---ަ.&..6>.FnJ^.fn.B.C t.閮鞮~n.붮.:֮...//&./6/FN/V^/fo>v~/n///Ư/֯///00'/0ӯ70GO0W'_o0wf00 0 0 0 ǰ 0/0ðrk'/17?1GO1W_1go1w1_111DZ1ױ111 w2!!2" '2#7#?r"/2$O2%W%$_&o2'wrn0(2))2**2++2,Dz,2-ײ-2.2,./200311ꖂ2/3373?34G4O35W5_36g6o37w7388gs293::3;;53<3=׳=3>3;˳>?3@@{3?A4B'BsA/C?4DGBn4TE_4FgFo4GwG4HH4II4JJ4K4I)ĴL4M״M4NN4OO4PP5QQ5R'5PôR7S?5TGTO5UWU4S_Vo5WwW5XOuV5YY5ZuQZ[5\5T.*Ե]5^^5__5``6aa6b'b/6c76aӵcGdO6eWe_6fgf 6dog6hh6i_vg6jj6kvbkǶl6m6e n6oo6pp7qq7r'r/7s7s?7tG7rtWu_7vgvo7www7ux7yy7zowx7{{7|ws|׷}7~7vӷ~778xv0,87?8GO8W_8go8w8+8888c׸8縎8899'/979GO9W_9gy?w9s999#ǹ9׹9繞99::':7?:GO:Wz/go:wc:::::?:׺:3::;;'/;7?;GOn go;w;;;;;;׻;绾;ϻ<>ⷽ?}?>GO>W/~6~Q@(t>臾>闾>ꧾ>뷾>Ǿ>>cj?p>?>7??GO'? So?w[*M?~?ǿ?o>?D( 4x ;VlEÆ+!XYF9vdH#I4yeJ+YtfL >(E KhPC5ziRK6ujTSVڔ&C8sVxlXcɖ5{mZYBZsֵ{Y[qp` m_ 7vrdoJ˰d͛9wLb̞I6}Z-h;1rvlٳi׶}wnݻyxpÉ7[eJwztөW~w˛c|xW2ٷw~]Y~O_" <\|% - !; =EMam N~W;=-5ޘ=EM>U^YdY~emg]Ι}蠅y硍>餕^䢙~ꨥZf묵ꭽgZ>ԅ~垛ޛ._>\-5q;EM?U_]emuqߝ}xu/_祟ꭿ~ߞw^_O域G_8hw? @>t )@ V5AB3a YB2Y iXCІ9ԡ`A^W@!aH%6(|b)Vb-v$xF3gT#ҸF7Ưo8G;w#G?p24 I>7 $zHGIAN݋d&9IMvd(IJd(Uбҕe,U9KZҖ e.uI^2$9GӘDf2 Lfљc4yGjVs5vӛgg88Nrvќb:YEv3g9$ӞGg>O~Пa@ZCԅE( P)eC%:BVԊ!F[yQjУբF/)]&%J1ҕLKAR:Ц7U`Nu*FƐ)1Yʜ%8*&y6թjT٘T:rW_V Gv\+$:iլDkZVrӭof\*Nֵw+:uկl`9XӰgbO6,@%;فVֲlfY2Գ}O}XR.Ei(V.ϵM^le[EKژ8ά-@nKH:PJZXNz`J櫚h楺p{Jgx]g٤?Jh%h:zF JiZ槦i{zzIju&jozƦIkifkcz{Il]{MfٲTNdnxW Z6=;~wjn&Omw[8-wgoT[(+p= 9Iq\j5>=3ljw&7r/men[<79o]ړ\=Wʁ>Ky{t.ʅzԛ;uCW}kTavDc'{Ծvn'v,wo>_+zux>D|?Gwh.ۀ;$wordpress/wp-admin/images/notice.gifGIF89a :z JY;zy!, IIu=Jꄖ lW 9g!gR0Z<A`s Ju9hDAM''L*$;&wordpress/wp-admin/images/.svn/entries Q8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-admin/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 login-bkg-bottom.gif file 2008-11-20T16:30:47.000000Z 580bb0b7fade637e26f3860b87f32e3b 2008-10-28T18:17:06.112729Z 97 paul has-props box-bg.gif file 2008-11-20T16:30:47.000000Z 1f7174c8737cbd04837faf5e384013bd 2008-10-28T18:17:06.112729Z 97 paul has-props box-head-left.gif file 2008-11-20T16:30:47.000000Z f4e3d9071653ae7a841689be7c487333 2008-10-28T18:17:06.112729Z 97 paul has-props box-butt-right.gif file 2008-11-20T16:30:47.000000Z f354e52a372a936e86212c7d76eb5620 2008-10-28T18:17:06.112729Z 97 paul has-props browse-happy.gif file 2008-11-20T16:30:47.000000Z 119997784c78f5b652718aa83d91f0d6 2008-10-28T18:17:06.112729Z 97 paul has-props toggle.gif file 2008-11-20T16:30:47.000000Z f3653960e8f0ae4cdd7804f60c133f81 2008-10-28T18:17:06.112729Z 97 paul has-props notice.gif file 2008-11-20T16:30:47.000000Z b8c332ebadeb17298472c4ba3c009ccf 2008-10-28T18:17:06.112729Z 97 paul has-props box-head.gif file 2008-11-20T16:30:47.000000Z 87f02ca247ab3a0a631a5248b1da342d 2008-10-28T18:17:06.112729Z 97 paul has-props box-bg-right.gif file 2008-11-20T16:30:47.000000Z 7d5f2df59d28b587f741e4d285941067 2008-10-28T18:17:06.112729Z 97 paul has-props fade-butt.png file 2008-11-20T16:30:47.000000Z e6c8b1c6db50db66bf04da9bbbe3ee0e 2008-10-28T18:17:06.112729Z 97 paul has-props box-butt-left.gif file 2008-11-20T16:30:47.000000Z 729c70ab984f1078ec91398ba55e0d05 2008-10-28T18:17:06.112729Z 97 paul has-props box-head-right.gif file 2008-11-20T16:30:47.000000Z 0907b7ac6a357333357a0f12c0890d41 2008-10-28T18:17:06.112729Z 97 paul has-props login-bkg-tile.gif file 2008-11-20T16:30:47.000000Z fb31d6fa4de06f45e077be1a53dc9975 2008-10-28T18:17:06.112729Z 97 paul has-props box-butt.gif file 2008-11-20T16:30:47.000000Z df8848b32f98e52c08a29afca280d753 2008-10-28T18:17:06.112729Z 97 paul has-props wordpress-logo.png file 2008-11-20T16:30:47.000000Z cc26f690d72afe4f2432d720e8fc6658 2008-10-28T18:17:06.112729Z 97 paul has-props box-bg-left.gif file 2008-11-20T16:30:47.000000Z 3bb60b3e953e96e70ebd07db595e3527 2008-10-28T18:17:06.112729Z 97 paul has-props %wordpress/wp-admin/images/.svn/format8 wordpress/wp-admin/images/.svn/prop-base/box-butt.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Cwordpress/wp-admin/images/.svn/prop-base/box-butt-left.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Dwordpress/wp-admin/images/.svn/prop-base/box-butt-right.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END >wordpress/wp-admin/images/.svn/prop-base/box-head.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Cwordpress/wp-admin/images/.svn/prop-base/box-head-left.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Dwordpress/wp-admin/images/.svn/prop-base/box-head-right.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Bwordpress/wp-admin/images/.svn/prop-base/browse-happy.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ?wordpress/wp-admin/images/.svn/prop-base/fade-butt.png.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Fwordpress/wp-admin/images/.svn/prop-base/login-bkg-bottom.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Dwordpress/wp-admin/images/.svn/prop-base/login-bkg-tile.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END wordpress/wp-admin/images/.svn/text-base/box-butt.gif.svn-base[GIF89a !, ؠ6ldihlp,t{e BpH !:Шtq$0z`by0EncQP"$=  L%  &  Y)wJ)rD;Cwordpress/wp-admin/images/.svn/text-base/box-butt-left.gif.svn-baseGIF87a , .6ld BInSR̥H20 DH͡H!;Dwordpress/wp-admin/images/.svn/text-base/box-butt-right.gif.svn-baseGIF89a , &dihlp,tmx|pH,Ȥrl:ШtJZجvzxL.zn|N~Nk    H*\ȰÇ#JH (PǏ CIɓ(S\ɲ˗0eQ@ɳϟ@ ѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMD D ȞM۲3ͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhf%@&$h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6r8 (?"馜v駠*jjꩨꪬ꫰*무j뭸뮼+k&6F+HVkfv+k覫+k, G#;>wordpress/wp-admin/images/.svn/text-base/box-head.gif.svn-baseoGIF89a&&%#|$$!w!vd#w.7UW%#{'#}%!x'"x&"z$"y u!,@`,Hrl:ШtJZXh4bzn|Nui 22  1C33 ! E}$F  Ftp *\ȰÇ#JHŋP4XIɓ(S\ɲ˗0cLIC d@ JѣH*]t((AÅիXjʵׯ`ÊKٮOĘJÄ۷pʝKݻx˷ߺiʠ:È+^̸ǐ#KL2lQh̹ϠCMӨSy0 c˞M۸sͻoȓ+_μУKN:4 hνËOӫ]˟OϿإ h& 6F(aؕ`fv ($hb,0(4h8cص@)DiH&L6d TViXf\v`)fح`hlp)tig؝|矀*蠄j衈&h;Cwordpress/wp-admin/images/.svn/text-base/box-head-left.gif.svn-baseNGIF87a4&&%#|$$!w!vd#w.7UW%#{'#}%!x'"x&"z$"y u,s@`, "\"qdH21a00ASUEg IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WJ;1 fIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JQo2ȨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^zQீ `KMb:d'KZͬf7z hGKҚMjWֺlgKͭnw pKMr:ЍtKZͮvzUm_ @Mz|Kͯ~LN;'L [ΰ7{ GL(NW0gL8αw@L"?/H&;PL*[Xβ.{`L2hN6pL:xγ>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNհgMZָεw^MbNf;ЎMj[ζn{MrNvMzη~NO;&N[ϸ7{ GN(OW0gN8Ϲw@ЇNHOҗ;PԧN[XϺַ{`NhOpNw5xϻOO;񐏼'O[ϼ7{GOқOWֻgOϽwOO;ЏO[Z{OOOϿ8Xx 8Xx؁ "8$X&x(*,؂.0284X6x8:<؃>}B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx؈8Xx؉8mW-p؊8Xx؋8XxȘʸ،8Xxؘڸ؍8Xx蘎긎؎8Xx؏9Yy)} ِ9Yyّ "9$Y&y(*,ْ.0294Y6y8:<ٓ>@B9DYFyHJLٔNPR9TYVyXZ\ٕ^`b9dYfyhjlٖ7W+r9tYvyxz|ٗ~9Yy٘9Yyٙ9Yyٚ9Yyٛ9Yyșʹٜə}uyؙڹٝ9Yy虞깞ٞ9Yyٟ:ZzK ڠ:Zzڡ ":$Z&z(*,ڢ.02:4Z6zWA;Bwordpress/wp-admin/images/.svn/text-base/browse-happy.gif.svn-base.GIF89a(MMy3Ȫjjj44mmRRrS 9Ұq$$qqqYY҉݉{kffxzcLLHHJJvv<yy!!((aamuznnn}}<<\\8섄Ɯvvv99EEAxyyyaaɥ8811~~~ĽAAVV--v__qƺN䆆3뮟kkkccvqi}~}zGGqq///??|Ɵ[T񰳷FnᾍK7ߪP@a*թܿ~ ˆ+68q|:9”lX,o_Ο=o},cIаI~-6۳s֍{oϖJF8Ms͟K_IJ$ߣOˣ_}ID1R0EPҧIU>H#Q ? ,A8 N)+C?#蜉BJ$B)#x$ '3䏳 0#BxdF8Eϓ"?E.I% >OAψ8?kf'%I&Pj:J&J$'I衆:i@ 3LEꏥm2饕J*馆>?xg8✪jP $̺&&h(X+첗Rr*:b;%ZO>ُ>?> #,&BɞARS. )2o 7,PX O)qOybdJ\(TBJ&|-?l#dH&R t$"J$HwDG}Q-uX_\g^WMcs|2*B ?hڎtB+J#T6͙h$Ȳ(j?kCSLGg枇l&%q8s#,ȩ)%r,;;Bbw`*QN|D?`VFpb ]\␰xr\؁ LIKS2Us*G q,E**AV4@E(7щW4B ,h( *~aX`8@A8`HؼGsT#0?Z+Mp*1щN#2`h?D#J `,D2ā V셫X[%2 {0|bVQ u D(E`Ѐ"td"Ѓ+8t( Y 7X8x69txD(^ `]ڑ#X8B0mH0@YDB!$6QVlt`G(&%ax@z ;08i A@x?^p 25  3xW_6&qx"D@ HJ U+hl.@ d!ȼ!%怀ABhFA U JLwAذCA8@9,(~@ 6a N6daه)g@U' '0\B ##8%pJ P@ iG(9"c 2 e8Ρ&` p`ܐ Br=]G`"D, 8 &FQl;v&' Mԁ:KXsw+la \"YsPs2:0K`&-OA9_ ZT!P|ЃЧ?! 9H=H45xQuC"pp?Pdf P0 p i @]@P 0_`Rg|P` Up r0bUmDw'H@7Ht@k 7 zXtd=&vM0 {p 0q@ g@F @ `l -# b AHCp^\]NH00e0o=d F@u @ pvK <@^`p 0 &u g@' 5F,g)pXtdf&dujR0yP 0W6k\0pj@6@^ @Aa6ZG– pƒ! m X1 spKp BYPCy| G@Kp E5P PApp5P`Q]ptey aM /PD;` jI!" ˅ 0 qG 0h4@ CD}2K ` `Od/!NXX[`z O` "HPv& ` `_aB  A D 0 P pZT FԠԜgHI  Xd -{L%#a SyH x/ C G3>GeP:HH;Ev:ji  r UA  7`B\ZvzxU2z0z0lP ~ʥAD9A+Kz@}U)  @gJ3@r::%@P% zP0` B gA< ?!  @! G!޺) C,`79 )p?:Zz*PJ!@ iZp 4P4!C0 )@ ;&{(*,۲.{:aJ6 {8:;?wordpress/wp-admin/images/.svn/text-base/fade-butt.png.svn-basePNG  IHDR(*gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE 2IDATxbpP``"uf Rg $`CM888 eueeeuA]_J]JL]_LDE#e@ <<@GBGH  )f@ |||||V|Ġjh(*i*) dĤjĤdd288CIbT6UV䔖VV0V4 'AAM{A-AM-A%%M-A%bbbaab KE[ |*@X @a U VA*@X @a U VA*@X @a U VAKv%FUIENDB`Fwordpress/wp-admin/images/.svn/text-base/login-bkg-bottom.gif.svn-baseGIF89a򧴾>Y!C]o4Q=Zq)JcYr7Sw˪͏ 2O!,@p rl:ШtJZجvz8:BYȀ̪|N~M k. f'|x&f .-jG"_"f-. f#$u$#f k̻k kvk  GKk ok20.0uZ @ ȱ6pI@0˗0cʜI͛8sɳݟ>MR&@ <]ʴӧPJ:u@ -ά,`ÊK٥D(wPzݻxu9 IA B@wǐ#K7 Ъ @X AS^ͺװc˞M۸sͻ߹(B  ZHNسkνËOӗO˟OϿ;Dwordpress/wp-admin/images/.svn/text-base/login-bkg-tile.gif.svn-baseKOGIF89a<_R&k\Jt=`%_T*eLx@eO|VLveYTS[!ZN{⁝Hq YPzU~%`X5kKv(bW$]GyPyT~9Z$`GpJtV-eDk!["_T(d'cVOxXP}(`LwNz!^LvNyuZR|WT*hIrS|Lt"^VP|X \mXHqNzP|"]]S~R'aJsYVP|,j"i g=qaVOzUVPQYMv}#`&`S|ZQ~YKuMxNx#^Q{NwZUhNyU_/gY-l 4R 3Q 3PT 5T6UBh7W8X;]T:\:[ 5S?c>b0hFnCiEm7VCjAgEl8YAfSS>a 4S 2P6V?dIsP~QFo;^9YDkDlHrGoP}Fm 6T 4Q7XBi;\Bg@fIrGpMyRQUIr%aItKt%bPIsRJtWQ}XKsZR~SO{W&b#[%_"]Q}T:x+cUVW\ 2O!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0"b!8sɳϟ@ JѣH*]ʴӧKm`̚6E#ׯ`ÊKٳhӪ]˶۷pʝKn\04*F& [oÈ+^\fbfbъb `̹Ϡ^I߈ P(װc,T؈i ʹwμE:&,c/ËOۨ_Ͼ{l˟O~|Ͽ(`X{&z 6cLrt6vPjd&@($|0Ƹ(F8aP$ŬaAL"Lh3TV c>`\vkmh6leXgtֹ_`|CA6qBEFR>]>|裐F*餔VjdX駟 ꨢ6aꩨª k#檫ꫯ`+k,&벹J*V{*%v{+%SPieT\k5w3ۂV;B,.,6찱 7Rpگn$_?߱AfP.w[8;r[1:ų<1 ?F|t-A_o%nYJsU3N}0D=)ۈ2>L@VDpIc?=va騛Nz}TMdžg픢kAӮ@+ Akփ wtW 5 >{#/~=92 k">s|_?ltO{bm+|;&0Aɩ@v`ns<.YK FHS7ÙB3Wā fep~A ,z&Lh=pb, x5i[BCM4VuVS6{hMqcU6-ސ@vGap[d X嬧aH|$G=YuOɰ[@pH \;93σS#$8ZJzrUmEMr[ *&JRl!3U teKY d.WX^yYbs :";I&F",hMcaS @YK\6e EE`Q$;LS*3#s3I|aƁ޼e8:NL*Tlh/l)mz/ &#GJ<6Ԧ.*߱+ڑxLg !qᴋ]fWSգCEcŒJ,pN\:PJb-]U5ՀiՓ\+Z \eg4j0"a<:ZVnTr´+{XK-mXk 1Zk?*ْԲl@3{: *h9ЇrJ:-<S8ЍtKZ>'V~BUbܺײeoZ,BYX vwg L`*w}a-`׻x]*lrۇz/}e ujEU0u A86b oLr,ؚ&&{^f[:Z1 ؊[ N 2x] RF6a|s:Yɹ {WYXβ`/3bNmFgw_\V+j^X5l;{C XM^Wj9\g]13ֳY#jI8{w-_hu*QTeF >AY YB<Þ׋g޸\|N]C<, s ȿ~x0 bNe2Ǯq&ϕ'jJ&uS>u+;ub^Yw3uw\?ρ]NE;8Y߭o>p8dcׯcOx9wgO{q꥙u9-maL4~5}/5kqGiW;g?r ]r/ݗfV/p^n6E %~8H{eg~GyvytrGm8`^wnZ7dV:WB&oH*8{8t HBѦoHw_J'|E| z;@B8DXFxHCX;buRPXwsVxvx'l)Ȃ\ hjE'~5H~n*QX^L)Jpr>8vxs؆℧wiV}T}ׅȂ_oKb}vђkȆzGX؉MSnz$8d(x,( dPt|+xAwocȀV+8h胶0XxؘڸhBJX1['=38$WKXlhV`PF@@w8aH fHW5BxWS13<-ҍ&y((*ْ.8hOdhp?؎5yxw("VF (@e8sdbβ 3")%jȒlk#IeēTX( t0| "И *( V0 0 d0yATB)Uy0b*h*f *2Ii nٚirTPxhix}M)p20vdp*Ft`  n :M$cVU9yX)2Iuyw?|TA9* (KpFpzxV``i{R72IY\4jY9I@d!ʛDZYxdiZz IPW\9Dɞ-ꢃs135zpښ: Q@Z^ڛ=9B?  jhY>0Vڨw  7Yٕ6Gɑik C2sJroY3QYAjM )Ù` 2:d \ * yfhe n >x :Zzzbj Ky#CGJ꫾K@:x`UɬκJ9*!jl)Ꚛڱ { $[ɣz*DȫJ@` VKy n n@ |Џ-z|"<ݍJܭ;.S0,ڣ]?nnDHB~  >7t.| *}ݨ FAm瓍z}~~օHԋF觭-=Zh ϗUW~[իyl^V\: \E\},;6M~썾NnRMV`\@y,KUM|`y>4  ]=nSN|p ?lᐐ,OHpnUʹ{ )^6ャ58=E?MNO^R_~Yoՙ =ҵH Y z' w?nq/8:C)>~/0ď۸T/S0PƍYaGJ dn*'a^0Ι "&.Ґ$Nht5f G!E$Y%T;Vlʕ+!M9snx"E qHeBW !(H IbŪDY l3aI%;vR{=`vq嶘.[(Xfݶ]Qʖ k+[ dMt*U,R@$ҤG:'Dyj+[O&͕6_=ruNOZTK>:eʒx1ٳi @\;a{m8Vʖ`s; mAMjmB 3pC; G .5J+(*Q1)-Z$3j3ⱑcƬ#! r. +:{`,2qI'0#P C, z4cG?r2㹊*k*Z")A!#BmċFqO>A\ 4PCEӢ3N]|g|LsK3RAL&L|PXJ'QpXA&'OL1ɴL,\6[S94E-Qjk#47kVE5rH/0JLxxr,Fp2Tc<+2`g.2qF|m 5s?4e<67:VZ5ZlՖܰqecyfkq"D*);G3m7Lsn^4`B`V#g`׻iJ$H>crd>H $+x-*O4d;J '|pS mUځpo\g <8B衉6]xc H@9Ȳ"Z}2Vbp 6aά-g҆&ǛwfeY_z~{p?v"+tJ+ɶDZ$y$a#kp/p1z.* '}%~~#d 1hW,#LxB0z+ RBI39!hk?̏~"@R-[(L-Pֱ "D@N=f 6x|/scVcuc0(8tϒCJ9G?_F{nȟBlF vA2th`%?2ZƌgL>o"K:1&y#0?'#JtxHhF~?!Y,A1Ia `*UvCB0- &8qx`SԈK6*p1 jBa$qzdd"Mh U*7- Nɯ*.3xCxwF`XAY?&<te*:2M(H'fr<,s ipwNxlxaE(A}Gy +p{hO{SĒX?i\"""Tԅ GJȐt sjZ{uG.KYZ> sP!7pJ7,k,CF@8̃\s=_8g1,h1ܞB",B#\;B%\"@ 8=@3d+/õK/;AT@@BALD^Tc` FaFb,Fc=pū8r,KRa7#; \@ r,G˰CpomdlLF?|gHgTFHHEHHH BtDd9ƃdn,CGrFM ]R-QLM,Q<ѺdOUL0}J/5EPpLOu#$L'&SRQ+F,҂R.5@5XMHTE]D}'@2}L4=!]S6P$-@(SSOK;jQ-O?]{xC]G{ BC}0|U3 mP5lS7T UUhQ5)S=ҔdR  G ŜNhױHW0@Z "T!=ȄT'`V ΔVH5HXU*hX'Xi4L8XX`M}-wPY}HZ}_uTx%TG2mO-YHcPu<TX}‡u؅}ڃZZZZګ=Fu[ ۦUZy E[tX[tXj|8Z=ϞYp,Y@vYa݊ pTM\E{%GB\4Y۞[ Z[]e[tH[5ۦ۱=F=]M]եک]]}5Fۦ]u[=G[\ Y5ԁ`-G?(TUWۿUGś%Gx0^(GɝܒQ]r݇ݰ5F}_֍__ڽ]e[1ݍ޼^v(Gxh0ޛB^ Fv5WE ޝ%`ܡ%_OܴUe__~maF%UZ]l[ (~`3h#n?^b&ց"6b"ކ Y `\E_vX^.c}a3N]_\`%` >xx*KN1(>bA~`wb1(a0VbTcMZ44a.[㶕9[XcDDc0q3YeeF\-b6R/^JKdbdhdhaf7&RQdofN堵cd偄w%[,>DbpJg affb ㆵjMffanclagr`V/ȓʜ%YXeLgp|E~6f耮hJ>a݆Vci抶苦cqg% f&ޑvgGEd+G jiHoNI&hf%j3j~_]>ꉎ^jX~js۪j.lG>OZNNkm湎2m.mvX/h־ah]qmm.5l6laqmhlrp֦lMm>ўnnl̾nnn^en/f6Gm6~o%FG@n>_&]npp7~XVwp%p%0kf[qm~pq Nj WwpN>pqnOm_p>og6l#mq-q6_qEhGq-ξqgn) Nr6os]'Gr*sr>l.s>seOq '"wsG7r8' s:p;gn[A/m@tksOMsCpD?o.V~tWHoIJK*rAu@u^Q_p.uE0sTOEgVG_r&Y?[onq=u>um7Jvp#wr'wtOwb/S(xwipzgg_r7XX{wixwnq_qNwropJ.<xxxxx&?.PxOwhrv7x ({gt~yvxyKro_y?yoxzzxzo_Oz?zyww|yo~N/{[_qWxyzz/|W{{{y{{o{g|t{>||O}֗zƿ/G{͗wvw}9 __}'7~/sȧy}^l}|g|OӇ~x~oxr7~9H%b ?0l!ć&R8."ƌ *ye;.b2V%p.BM,PR箿p¦Lbdž))2-sB59s}<':rKM;4QK=5U[t{h5׃da"em5 a_3=wb۝eyox5}H ~8YvMh3:Xy6y@;6ދs⥛n*魻8{3cC"ی9:[a^7^OsjWOv>s.tW(e/`0x#^T \ L@z,A/maGC*4! CP.^cȽ* ,L7@ j>H8,&+C%>Pbh<"nбv#=~ģ8)A2<$"9"0t# (Rl#3&$$(QՋU|%,c)YҲ %.=6j2$K2mԥ'qJ[2|,Si,hRּ2ANq|0)_~f"Ikϔ)yRD"yYF>M|~Ҟ'B τ2T$AȀ2$EAD=hCCjͅh ;jȍz3E(LR4(IsL괧iMcҖ4t&7ԛ'5*թRV*Vխjj !ֱcZӪֵըc+\jֹ7*^׽|+`U=k\*h=aURg22r,hC+ђ=-jSZ(}k Ҷ,nsڶ-p᪖=.r\*}ni+]p-virװ+^(Lw=/z-p+^=,}+_W/; O>03~p! S|]sp0Cb յ0S .~1 ӸV1'l X"p{6>2,$3.r S2b's ^e-S25l,b~ 9׸e^uӬٺv2]cx І>4E3ю~4-PҖ43>cXӞQԦ>u Uգv2c-Mxֶ]]5j.ߺ>63ea3ٌl1'NmgC{-qSz>wuZ 7?nvӛT}7..p}p8#{K8+[8C.&?9S򕳼.9c.sW69s>9Ѓ.tϼF?:ғ>+N:W>SVzϣs]L:.vfӮvón;.ӽv;~.?|+ڎ3;#SG/s|;/ы>?=5z_/7^=Of=/?>3>/S|s>/??ӯ?ӿ?埿  . 6> <V^ fn v~   Ơ ֠ `  !&.! <FN!V^!fn!v~!!!~!!ơ!a0!!  "!!""&"."#6#>"$F""$V%^"&f&n"'v'"<р("))"**"++",Ƣ,"-֢-"..b(/"00#11+"2.#363>#4F#1*4V5^#6f6"<ł7~#88#99#::#;;#<ƣ<#=֣=c7ޣ>#??#@@:#A$B&B.$C6$@CFDN$EVE#%TFT$&dFdN&eVe^_6&fn&gvg~&h&ejhi&jj&ik&lƦlFfkΦm&nl“4o&pp'qq'r&r.'s6s>'tFtN'uV'sJS Ȃvn'wvw~'xx'yy'zz'{{'|Ƨ|'vΧ}'~~''z'((&h 6>(F'vւ^(fn(v~((((h(֨(樎(())&.)6(vNN)V^)fn)v~))))=HR)֩)橞))**&.铼(2*V^*fn*v*:*@ĩ**jL**֪*" *+bꮒ˨j.+6:jV^+jjf~+nk)/+++ƫ++櫾+*,&.,6֫jQV^,fnlFlƩ*Ȏ,ɖɞ,ʦʮ,˶˾,Ƭ,֬,,zlN,--Ҿ,j6>-FN.R-fn-v-Zz؎-ٖ-*-۶۾-ƭ-֭---ަ.&..6>.FnJ^.fn.B.C t.閮鞮~n.붮.:֮...//&./6/FN/V^/fo>v~/n///Ư/֯///00'/0ӯ70GO0W'_o0wf00 0 0 0 ǰ 0/0ðrk'/17?1GO1W_1go1w1_111DZ1ױ111 w2!!2" '2#7#?r"/2$O2%W%$_&o2'wrn0(2))2**2++2,Dz,2-ײ-2.2,./200311ꖂ2/3373?34G4O35W5_36g6o37w7388gs293::3;;53<3=׳=3>3;˳>?3@@{3?A4B'BsA/C?4DGBn4TE_4FgFo4GwG4HH4II4JJ4K4I)ĴL4M״M4NN4OO4PP5QQ5R'5PôR7S?5TGTO5UWU4S_Vo5WwW5XOuV5YY5ZuQZ[5\5T.*Ե]5^^5__5``6aa6b'b/6c76aӵcGdO6eWe_6fgf 6dog6hh6i_vg6jj6kvbkǶl6m6e n6oo6pp7qq7r'r/7s7s?7tG7rtWu_7vgvo7www7ux7yy7zowx7{{7|ws|׷}7~7vӷ~778xv0,87?8GO8W_8go8w8+8888c׸8縎8899'/979GO9W_9gy?w9s999#ǹ9׹9繞99::':7?:GO:Wz/go:wc:::::?:׺:3::;;'/;7?;GOn go;w;;;;;;׻;绾;ϻ<>ⷽ?}?>GO>W/~6~Q@(t>臾>闾>ꧾ>뷾>Ǿ>>cj?p>?>7??GO'? So?w[*M?~?ǿ?o>?D( 4x ;VlEÆ+!XYF9vdH#I4yeJ+YtfL >(E KhPC5ziRK6ujTSVڔ&C8sVxlXcɖ5{mZYBZsֵ{Y[qp` m_ 7vrdoJ˰d͛9wLb̞I6}Z-h;1rvlٳi׶}wnݻyxpÉ7[eJwztөW~w˛c|xW2ٷw~]Y~O_" <\|% - !; =EMam N~W;=-5ޘ=EM>U^YdY~emg]Ι}蠅y硍>餕^䢙~ꨥZf묵ꭽgZ>ԅ~垛ޛ._>\-5q;EM?U_]emuqߝ}xu/_祟ꭿ~ߞw^_O域G_8hw? @>t )@ V5AB3a YB2Y iXCІ9ԡ`A^W@!aH%6(|b)Vb-v$xF3gT#ҸF7Ưo8G;w#G?p24 I>7 $zHGIAN݋d&9IMvd(IJd(Uбҕe,U9KZҖ e.uI^2$9GӘDf2 Lfљc4yGjVs5vӛgg88Nrvќb:YEv3g9$ӞGg>O~Пa@ZCԅE( P)eC%:BVԊ!F[yQjУբF/)]&%J1ҕLKAR:Ц7U`Nu*FƐ)1Yʜ%8*&y6թjT٘T:rW_V Gv\+$:iլDkZVrӭof\*Nֵw+:uկl`9XӰgbO6,@%;فVֲlfY2Գ}O}XR.Ei(V.ϵM^le[EKژ8ά-@nKH:PJZXNz`J櫚h楺p{Jgx]g٤?Jh%h:zF JiZ槦i{zzIju&jozƦIkifkcz{Il]{MfٲTNdnxW Z6=;~wjn&Omw[8-wgoT[(+p= 9Iq\j5>=3ljw&7r/men[<79o]ړ\=Wʁ>Ky{t.ʅzԛ;uCW}kTavDc'{Ծvn'v,wo>_+zux>D|?Gwh.ۀ;=D?)?!,2I8ͻ`(`9`R s`HBS8"tj*>C!(e!<-8Qf@HHJMUUWZ`bdiek;Dwordpress/wp-admin/images/.svn/text-base/wordpress-logo.png.svn-base )PNG  IHDRD gAMA7tEXtSoftwareAdobe ImageReadyqe<iPLTE@@@000 ```PPPppp܏R_&7}CR5E`m}oz*t\#tRNSf)IDATx[ْ( 싻{&?r@HBtuKG'.KoY3]E\ Zك+z81WS;_^եi2Iu[®yg~2+sQۂykJaMA/M[N+߱=Aе)pkʌbΝYQ\b?Kz"Gh'p8헋L_84rXŨ/ q\?[n[l[úU)ީ1ɤYXa񆗎#nG{~ϯW刍{ t-]Hc\mSsxp}5'Oc0eM^0ve'T17Qt4}ă}vs3/Xt/GOBk[R0O)tYAp5i`=UPѫUM(9:{Bckc?z`|d|MZ-ɑ $zx0vLMJ/^ H A)Vћ^lE4y}?wy: Ɂ;:H⿃ >n-ЕN;@)OҪ%9LXlnߍɘ.;71zd--\zև ~D#DL03DKxvԿDڹ!_}X-i[F @J?{Jg#/W!;--; N.ûdV/}ypDebtXb^J aӐ %yZCA$i`[YwI]bx !/,L$Ws-+7@a_cMݭ2JBBx?B7q蟉S;A>uUs ]zσFG~$ WQM.3r,UB1'm*{~YЛzNwx} 0 wiAo4,t{jLU+uwS*=j¬уt\ Z%)]R 'XC\!V sD9E 3݂9%9O1+G~ *_>J_Ga9%DʴqGZSZM1n%CqPIEb#+Ͳ҅{BBE|H҇H(dHC+8Us3QPd3>-"NpEBD }tl>_YQ.~ & A:$(*D.<Сsta %ҵw^oXIgNw{xt>2 )I.Y55A{U t,ej(Ywsys(Qb,{|}txDgUF5ʛ<%} FUwL Rd1(MQ";Lヒw_F}4ޛ#K).^kjo%bb˒Y=YdD?.^2/4{e;b=_ .r$j,)DE1:5RK"#U(FƋ"Km&/$W$,~ {l9G[ lz^xrR]hˍmEn^#+E?ZPLmrC ;Yթ2|kJ6Gվ2mm<;W981eZQtkHQ4lW|agۃa œm FYsi ? =,3KI%IENDB`$wordpress/wp-admin/images/toggle.gifGIF89a2BB&~^>=D?)?!,2I8ͻ`(`9`R s`HBS8"tj*>C!(e!<-8Qf@HHJMUUWZ`bdiek;,wordpress/wp-admin/images/wordpress-logo.png )PNG  IHDRD gAMA7tEXtSoftwareAdobe ImageReadyqe<iPLTE@@@000 ```PPPppp܏R_&7}CR5E`m}oz*t\#tRNSf)IDATx[ْ( 싻{&?r@HBtuKG'.KoY3]E\ Zك+z81WS;_^եi2Iu[®yg~2+sQۂykJaMA/M[N+߱=Aе)pkʌbΝYQ\b?Kz"Gh'p8헋L_84rXŨ/ q\?[n[l[úU)ީ1ɤYXa񆗎#nG{~ϯW刍{ t-]Hc\mSsxp}5'Oc0eM^0ve'T17Qt4}ă}vs3/Xt/GOBk[R0O)tYAp5i`=UPѫUM(9:{Bckc?z`|d|MZ-ɑ $zx0vLMJ/^ H A)Vћ^lE4y}?wy: Ɂ;:H⿃ >n-ЕN;@)OҪ%9LXlnߍɘ.;71zd--\zև ~D#DL03DKxvԿDڹ!_}X-i[F @J?{Jg#/W!;--; N.ûdV/}ypDebtXb^J aӐ %yZCA$i`[YwI]bx !/,L$Ws-+7@a_cMݭ2JBBx?B7q蟉S;A>uUs ]zσFG~$ WQM.3r,UB1'm*{~YЛzNwx} 0 wiAo4,t{jLU+uwS*=j¬уt\ Z%)]R 'XC\!V sD9E 3݂9%9O1+G~ *_>J_Ga9%DʴqGZSZM1n%CqPIEb#+Ͳ҅{BBE|H҇H(dHC+8Us3QPd3>-"NpEBD }tl>_YQ.~ & A:$(*D.<Сsta %ҵw^oXIgNw{xt>2 )I.Y55A{U t,ej(Ywsys(Qb,{|}txDgUF5ʛ<%} FUwL Rd1(MQ";Lヒw_F}4ޛ#K).^kjo%bb˒Y=YdD?.^2/4{e;b=_ .r$j,)DE1:5RK"#U(FƋ"Km&/$W$,~ {l9G[ lz^xrR]hˍmEn^#+E?ZPLmrC ;Yթ2|kJ6Gվ2mm<;W981eZQtkHQ4lW|agۃa œm FYsi ? =,3KI%IENDB`%wordpress/wp-admin/import/blogger.php

    $title

    $welcome

    $prereqs

    $stepone

    \n"; } function uh_oh($title, $message, $info) { echo "

    $title

    $message

    $info
    "; } function auth() { // We have a single-use token that must be upgraded to a session token. $token = preg_replace( '/[^-_0-9a-zA-Z]/', '', $_GET['token'] ); $headers = array( "GET /accounts/AuthSubSessionToken HTTP/1.0", "Authorization: AuthSub token=\"$token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_auth_sock( ); if ( ! $sock ) return false; $response = $this->_txrx( $sock, $request ); preg_match( '/token=([-_0-9a-z]+)/i', $response, $matches ); if ( empty( $matches[1] ) ) { $this->uh_oh( __( 'Authorization failed' ), __( 'Something went wrong. If the problem persists, send this info to support:' ), htmlspecialchars($response) ); return false; } $this->token = $matches[1]; wp_redirect( remove_query_arg( array( 'token', 'noheader' ) ) ); } function get_token_info() { $headers = array( "GET /accounts/AuthSubTokenInfo HTTP/1.0", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_auth_sock( ); if ( ! $sock ) return; $response = $this->_txrx( $sock, $request ); return $this->parse_response($response); } function token_is_valid() { $info = $this->get_token_info(); if ( $info['code'] == 200 ) return true; return false; } function show_blogs($iter = 0) { if ( empty($this->blogs) ) { $headers = array( "GET /feeds/default/blogs HTTP/1.0", "Host: www2.blogger.com", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( ); if ( ! $sock ) return; $response = $this->_txrx( $sock, $request ); // Quick and dirty XML mining. list( $headers, $xml ) = explode( "\r\n\r\n", $response ); $p = xml_parser_create(); xml_parse_into_struct($p, $xml, $vals, $index); xml_parser_free($p); $this->title = $vals[$index['TITLE'][0]]['value']; // Give it a few retries... this step often flakes out the first time. if ( empty( $index['ENTRY'] ) ) { if ( $iter < 3 ) { return $this->show_blogs($iter + 1); } else { $this->uh_oh( __('Trouble signing in'), __('We were not able to gain access to your account. Try starting over.'), '' ); return false; } } foreach ( $index['ENTRY'] as $i ) { $blog = array(); while ( ( $tag = $vals[$i] ) && ! ( $tag['tag'] == 'ENTRY' && $tag['type'] == 'close' ) ) { if ( $tag['tag'] == 'TITLE' ) { $blog['title'] = $tag['value']; } elseif ( $tag['tag'] == 'SUMMARY' ) { $blog['summary'] == $tag['value']; } elseif ( $tag['tag'] == 'LINK' ) { if ( $tag['attributes']['REL'] == 'alternate' && $tag['attributes']['TYPE'] == 'text/html' ) { $parts = parse_url( $tag['attributes']['HREF'] ); $blog['host'] = $parts['host']; } elseif ( $tag['attributes']['REL'] == 'edit' ) $blog['gateway'] = $tag['attributes']['HREF']; } ++$i; } if ( ! empty ( $blog ) ) { $blog['total_posts'] = $this->get_total_results('posts', $blog['host']); $blog['total_comments'] = $this->get_total_results('comments', $blog['host']); $blog['mode'] = 'init'; $this->blogs[] = $blog; } } if ( empty( $this->blogs ) ) { $this->uh_oh( __('No blogs found'), __('We were able to log in but there were no blogs. Try a different account next time.'), '' ); return false; } } //echo '
    '.print_r($this,1).'
    '; $start = js_escape( __('Import') ); $continue = js_escape( __('Continue') ); $stop = js_escape( __('Importing...') ); $authors = js_escape( __('Set Authors') ); $loadauth = js_escape( __('Preparing author mapping form...') ); $authhead = js_escape( __('Final Step: Author Mapping') ); $nothing = js_escape( __('Nothing was imported. Had you already imported this blog?') ); $title = __('Blogger Blogs'); $name = __('Blog Name'); $url = __('Blog URL'); $action = __('The Magic Button'); $posts = __('Posts'); $comments = __('Comments'); $noscript = __('This feature requires Javascript but it seems to be disabled. Please enable Javascript and then reload this page. Don\'t worry, you can turn it back off when you\'re done.'); $interval = STATUS_INTERVAL * 1000; foreach ( $this->blogs as $i => $blog ) { if ( $blog['mode'] == 'init' ) $value = $start; elseif ( $blog['mode'] == 'posts' || $blog['mode'] == 'comments' ) $value = $continue; else $value = $authors; $blogtitle = js_escape( $blog['title'] ); $pdone = isset($blog['posts_done']) ? (int) $blog['posts_done'] : 0; $cdone = isset($blog['comments_done']) ? (int) $blog['comments_done'] : 0; $init .= "blogs[$i]=new blog($i,'$blogtitle','{$blog['mode']}'," . $this->get_js_status($i) . ');'; $pstat = "
     
    $pdone/{$blog['total_posts']}
    "; $cstat = "
     
    $cdone/{$blog['total_comments']}
    "; $rows .= "$blogtitle{$blog['host']}$pstat$cstat\n"; } echo "

    $title

    \n$rows
    $name$url$posts$comments$action
    "; echo " \n"; } // Handy function for stopping the script after a number of seconds. function have_time() { global $importer_started; if ( time() - $importer_started > MAX_EXECUTION_TIME ) die('continue'); return true; } function get_total_results($type, $host) { $headers = array( "GET /feeds/$type/default?max-results=1&start-index=2 HTTP/1.0", "Host: $host", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( $host ); if ( ! $sock ) return; $response = $this->_txrx( $sock, $request ); $response = $this->parse_response( $response ); $parser = xml_parser_create(); xml_parse_into_struct($parser, $response['body'], $struct, $index); xml_parser_free($parser); $total_results = $struct[$index['OPENSEARCH:TOTALRESULTS'][0]]['value']; return (int) $total_results; } function import_blog($blogID) { global $importing_blog; $importing_blog = $blogID; if ( isset($_GET['authors']) ) return print($this->get_author_form()); header('Content-Type: text/plain'); if ( isset($_GET['status']) ) die($this->get_js_status()); if ( isset($_GET['saveauthors']) ) die($this->save_authors()); $blog = $this->blogs[$blogID]; $total_results = $this->get_total_results('posts', $blog['host']); $this->blogs[$importing_blog]['total_posts'] = $total_results; $start_index = $total_results - MAX_RESULTS + 1; if ( isset( $this->blogs[$importing_blog]['posts_start_index'] ) ) $start_index = (int) $this->blogs[$importing_blog]['posts_start_index']; elseif ( $total_results > MAX_RESULTS ) $start_index = $total_results - MAX_RESULTS + 1; else $start_index = 1; // This will be positive until we have finished importing posts if ( $start_index > 0 ) { // Grab all the posts $this->blogs[$importing_blog]['mode'] = 'posts'; $query = "start-index=$start_index&max-results=" . MAX_RESULTS; do { $index = $struct = $entries = array(); $headers = array( "GET /feeds/posts/default?$query HTTP/1.0", "Host: {$blog['host']}", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( $blog['host'] ); if ( ! $sock ) return; // TODO: Error handling $response = $this->_txrx( $sock, $request ); $response = $this->parse_response( $response ); // Extract the entries and send for insertion preg_match_all( '/]*>.*?<\/entry>/s', $response['body'], $matches ); if ( count( $matches[0] ) ) { $entries = array_reverse($matches[0]); foreach ( $entries as $entry ) { $entry = "$entry"; $AtomParser = new AtomParser(); $AtomParser->parse( $entry ); $this->import_post($AtomParser->entry); unset($AtomParser); } } else break; // Get the 'previous' query string which we'll use on the next iteration $query = ''; $links = preg_match_all('/]*)>/', $response['body'], $matches); if ( count( $matches[1] ) ) foreach ( $matches[1] as $match ) if ( preg_match('/rel=.previous./', $match) ) $query = html_entity_decode( preg_replace('/^.*href=[\'"].*\?(.+)[\'"].*$/', '$1', $match) ); if ( $query ) { parse_str($query, $q); $this->blogs[$importing_blog]['posts_start_index'] = (int) $q['start-index']; } else $this->blogs[$importing_blog]['posts_start_index'] = 0; $this->save_vars(); } while ( !empty( $query ) && $this->have_time() ); } $total_results = $this->get_total_results( 'comments', $blog['host'] ); $this->blogs[$importing_blog]['total_comments'] = $total_results; if ( isset( $this->blogs[$importing_blog]['comments_start_index'] ) ) $start_index = (int) $this->blogs[$importing_blog]['comments_start_index']; elseif ( $total_results > MAX_RESULTS ) $start_index = $total_results - MAX_RESULTS + 1; else $start_index = 1; if ( $start_index > 0 ) { // Grab all the comments $this->blogs[$importing_blog]['mode'] = 'comments'; $query = "start-index=$start_index&max-results=" . MAX_RESULTS; do { $index = $struct = $entries = array(); $headers = array( "GET /feeds/comments/default?$query HTTP/1.0", "Host: {$blog['host']}", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( $blog['host'] ); if ( ! $sock ) return; // TODO: Error handling $response = $this->_txrx( $sock, $request ); $response = $this->parse_response( $response ); // Extract the comments and send for insertion preg_match_all( '/]*>.*?<\/entry>/s', $response['body'], $matches ); if ( count( $matches[0] ) ) { $entries = array_reverse( $matches[0] ); foreach ( $entries as $entry ) { $entry = "$entry"; $AtomParser = new AtomParser(); $AtomParser->parse( $entry ); $this->import_comment($AtomParser->entry); unset($AtomParser); } } // Get the 'previous' query string which we'll use on the next iteration $query = ''; $links = preg_match_all('/]*)>/', $response['body'], $matches); if ( count( $matches[1] ) ) foreach ( $matches[1] as $match ) if ( preg_match('/rel=.previous./', $match) ) $query = html_entity_decode( preg_replace('/^.*href=[\'"].*\?(.+)[\'"].*$/', '$1', $match) ); parse_str($query, $q); $this->blogs[$importing_blog]['comments_start_index'] = (int) $q['start-index']; $this->save_vars(); } while ( !empty( $query ) && $this->have_time() ); } $this->blogs[$importing_blog]['mode'] = 'authors'; $this->save_vars(); if ( !$this->blogs[$importing_blog]['posts_done'] && !$this->blogs[$importing_blog]['comments_done'] ) die('nothing'); do_action('import_done', 'blogger'); die('done'); } function convert_date( $date ) { preg_match('#([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\.[0-9]+)?(Z|[\+|\-][0-9]{2,4}){0,1}#', $date, $date_bits); $offset = iso8601_timezone_to_offset( $date_bits[7] ); $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); $timestamp -= $offset; // Convert from Blogger local time to GMT $timestamp += get_option('gmt_offset') * 3600; // Convert from GMT to WP local time return gmdate('Y-m-d H:i:s', $timestamp); } function no_apos( $string ) { return str_replace( ''', "'", $string); } function min_whitespace( $string ) { return preg_replace( '|\s+|', ' ', $string ); } function import_post( $entry ) { global $wpdb, $importing_blog; // The old permalink is all Blogger gives us to link comments to their posts. if ( isset( $entry->draft ) ) $rel = 'self'; else $rel = 'alternate'; foreach ( $entry->links as $link ) { if ( $link['rel'] == $rel ) { $parts = parse_url( $link['href'] ); $entry->old_permalink = $parts['path']; break; } } $post_date = $this->convert_date( $entry->published ); $post_content = trim( addslashes( $this->no_apos( html_entity_decode( $entry->content ) ) ) ); $post_title = trim( addslashes( $this->no_apos( $this->min_whitespace( $entry->title ) ) ) ); $post_status = isset( $entry->draft ) ? 'draft' : 'publish'; // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); // Checks for duplicates if ( isset( $this->blogs[$importing_blog]['posts'][$entry->old_permalink] ) || post_exists( $post_title, $post_content, $post_date ) ) { ++$this->blogs[$importing_blog]['posts_skipped']; } else { $post = compact('post_date', 'post_content', 'post_title', 'post_status'); $post_id = wp_insert_post($post); wp_create_categories( array_map( 'addslashes', $entry->categories ), $post_id ); $author = $this->no_apos( strip_tags( $entry->author ) ); add_post_meta( $post_id, 'blogger_blog', $this->blogs[$importing_blog]['host'], true ); add_post_meta( $post_id, 'blogger_author', $author, true ); add_post_meta( $post_id, 'blogger_permalink', $entry->old_permalink, true ); $this->blogs[$importing_blog]['posts'][$entry->old_permalink] = $post_id; ++$this->blogs[$importing_blog]['posts_done']; } $this->save_vars(); } function import_comment( $entry ) { global $importing_blog; // Drop the #fragment and we have the comment's old post permalink. foreach ( $entry->links as $link ) { if ( $link['rel'] == 'alternate' ) { $parts = parse_url( $link['href'] ); $entry->old_permalink = $parts['fragment']; $entry->old_post_permalink = $parts['path']; break; } } $comment_post_ID = (int) $this->blogs[$importing_blog]['posts'][$entry->old_post_permalink]; preg_match('#(.+?).*(?:\(.+?))?#', $entry->author, $matches); $comment_author = addslashes( $this->no_apos( strip_tags( (string) $matches[1] ) ) ); $comment_author_url = addslashes( $this->no_apos( strip_tags( (string) $matches[2] ) ) ); $comment_date = $this->convert_date( $entry->updated ); $comment_content = addslashes( $this->no_apos( html_entity_decode( $entry->content ) ) ); // Clean up content $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); $comment_content = str_replace('
    ', '
    ', $comment_content); $comment_content = str_replace('
    ', '
    ', $comment_content); // Checks for duplicates if ( isset( $this->blogs[$importing_blog]['comments'][$entry->old_permalink] ) || comment_exists( $comment_author, $comment_date ) ) { ++$this->blogs[$importing_blog]['comments_skipped']; } else { $comment = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_date', 'comment_content'); $comment_id = wp_insert_comment($comment); $this->blogs[$importing_blog]['comments'][$entry->old_permalink] = $comment_id; ++$this->blogs[$importing_blog]['comments_done']; } $this->save_vars(); } function get_js_status($blog = false) { global $importing_blog; if ( $blog == false ) $blog = $this->blogs[$importing_blog]; else $blog = $this->blogs[$blog]; $p1 = isset( $blog['posts_done'] ) ? (int) $blog['posts_done'] : 0; $p2 = isset( $blog['total_posts'] ) ? (int) $blog['total_posts'] : 0; $c1 = isset( $blog['comments_done'] ) ? (int) $blog['comments_done'] : 0; $c2 = isset( $blog['total_comments'] ) ? (int) $blog['total_comments'] : 0; return "{p1:$p1,p2:$p2,c1:$c1,c2:$c2}"; } function get_author_form($blog = false) { global $importing_blog, $wpdb, $current_user; if ( $blog == false ) $blog = & $this->blogs[$importing_blog]; else $blog = & $this->blogs[$blog]; if ( !isset( $blog['authors'] ) ) { $post_ids = array_values($blog['posts']); $authors = (array) $wpdb->get_col("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = 'blogger_author' AND post_id IN (" . join( ',', $post_ids ) . ")"); $blog['authors'] = array_map(null, $authors, array_fill(0, count($authors), $current_user->ID)); $this->save_vars(); } $directions = __('All posts were imported with the current user as author. Use this form to move each Blogger user\'s posts to a different WordPress user. You may add users and then return to this page and complete the user mapping. This form may be used as many times as you like until you activate the "Restart" function below.'); $heading = __('Author mapping'); $blogtitle = "{$blog['title']} ({$blog['host']})"; $mapthis = __('Blogger username'); $tothis = __('WordPress login'); $submit = js_escape( __('Save Changes »') ); foreach ( $blog['authors'] as $i => $author ) $rows .= ""; return "

    $heading

    $blogtitle

    $directions

    $rows
    $mapthis$tothis
    "; } function get_user_options($current) { global $wpdb, $importer_users; if ( ! isset( $importer_users ) ) $importer_users = (array) get_users_of_blog(); foreach ( $importer_users as $user ) { $sel = ( $user->user_id == $current ) ? " selected='selected'" : ''; $options .= ""; } return $options; } function save_authors() { global $importing_blog, $wpdb; $authors = (array) $_POST['authors']; $host = $this->blogs[$importing_blog]['host']; // Get an array of posts => authors $post_ids = (array) $wpdb->get_col("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'blogger_blog' AND meta_value = '$host'"); $post_ids = join( ',', $post_ids ); $results = (array) $wpdb->get_results("SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'blogger_author' AND post_id IN ($post_ids)"); foreach ( $results as $row ) $authors_posts[$row->post_id] = $row->meta_value; foreach ( $authors as $author => $user_id ) { $user_id = (int) $user_id; // Skip authors that haven't been changed if ( $user_id == $this->blogs[$importing_blog]['authors'][$author][1] ) continue; // Get a list of the selected author's posts $post_ids = (array) array_keys( $authors_posts, $this->blogs[$importing_blog]['authors'][$author][0] ); $post_ids = join( ',', $post_ids); $wpdb->query("UPDATE $wpdb->posts SET post_author = $user_id WHERE id IN ($post_ids)"); $this->blogs[$importing_blog]['authors'][$author][1] = $user_id; } $this->save_vars(); wp_redirect('edit.php'); } function _get_auth_sock() { // Connect to https://www.google.com if ( !$sock = @ fsockopen('ssl://www.google.com', 443, $errno, $errstr) ) { $this->uh_oh( __('Could not connect to https://www.google.com'), __('There was a problem opening a secure connection to Google. This is what went wrong:'), "$errstr ($errno)" ); return false; } return $sock; } function _get_blogger_sock($host = 'www2.blogger.com') { if ( !$sock = @ fsockopen($host, 80, $errno, $errstr) ) { $this->uh_oh( sprintf( __('Could not connect to %s'), $host ), __('There was a problem opening a connection to Blogger. This is what went wrong:'), "$errstr ($errno)" ); return false; } return $sock; } function _txrx( $sock, $request ) { fwrite( $sock, $request ); while ( ! feof( $sock ) ) $response .= @ fread ( $sock, 8192 ); fclose( $sock ); return $response; } function revoke($token) { $headers = array( "GET /accounts/AuthSubRevokeToken HTTP/1.0", "Authorization: AuthSub token=\"$token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_auth_sock( ); if ( ! $sock ) return false; $this->_txrx( $sock, $request ); } function restart() { global $wpdb; $options = get_option( 'blogger_importer' ); if ( isset( $options['token'] ) ) $this->revoke( $options['token'] ); delete_option('blogger_importer'); $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_key = 'blogger_author'"); wp_redirect('?import=blogger'); } // Returns associative array of code, header, cookies, body. Based on code from php.net. function parse_response($this_response) { // Split response into header and body sections list($response_headers, $response_body) = explode("\r\n\r\n", $this_response, 2); $response_header_lines = explode("\r\n", $response_headers); // First line of headers is the HTTP response code $http_response_line = array_shift($response_header_lines); if(preg_match('@^HTTP/[0-9]\.[0-9] ([0-9]{3})@',$http_response_line, $matches)) { $response_code = $matches[1]; } // put the rest of the headers in an array $response_header_array = array(); foreach($response_header_lines as $header_line) { list($header,$value) = explode(': ', $header_line, 2); $response_header_array[$header] .= $value."\n"; } $cookie_array = array(); $cookies = explode("\n", $response_header_array["Set-Cookie"]); foreach($cookies as $this_cookie) { array_push($cookie_array, "Cookie: ".$this_cookie); } return array("code" => $response_code, "header" => $response_header_array, "cookies" => $cookie_array, "body" => $response_body); } // Step 9: Congratulate the user function congrats() { $blog = (int) $_GET['blog']; echo '

    '.__('Congratulations!').'

    '.__('Now that you have imported your Blogger blog into WordPress, what are you going to do? Here are some suggestions:').'

    • '.__('That was hard work! Take a break.').'
    • '; if ( count($this->import['blogs']) > 1 ) echo '
    • '.__('In case you haven\'t done it already, you can import the posts from your other blogs:'). $this->show_blogs() . '
    • '; if ( $n = count($this->import['blogs'][$blog]['newusers']) ) echo '
    • '.sprintf(__('Go to Authors & Users, where you can modify the new user(s) or delete them. If you want to make all of the imported posts yours, you will be given that option when you delete the new authors.'), 'users.php', '_parent').'
    • '; echo '
    • '.__('For security, click the link below to reset this importer.').'
    • '; echo '
    '; } // Figures out what to do, then does it. function start() { if ( isset($_POST['restart']) ) $this->restart(); $options = get_option('blogger_importer'); if ( is_array($options) ) foreach ( $options as $key => $value ) $this->$key = $value; if ( isset( $_REQUEST['blog'] ) ) { $blog = is_array($_REQUEST['blog']) ? array_shift( array_keys( $_REQUEST['blog'] ) ) : $_REQUEST['blog']; $blog = (int) $blog; $this->import_blog( $blog ); } elseif ( isset($_GET['token']) ) $this->auth(); elseif ( $this->token && $this->token_is_valid() ) $this->show_blogs(); else $this->greet(); $saved = $this->save_vars(); if ( $saved && !isset($_GET['noheader']) ) { $restart = __('Restart'); $message = __('We have saved some information about your Blogger account in your WordPress database. Clearing this information will allow you to start over. Restarting will not affect any posts you have already imported. If you attempt to re-import a blog, duplicate posts and comments will be skipped.'); $submit = __('Clear account information'); echo "

    $restart

    $message

    "; } } function save_vars() { $vars = get_object_vars($this); update_option( 'blogger_importer', $vars ); return !empty($vars); } function admin_head() { ?> entry = new AtomEntry(); $this->map_attrs_func = create_function('$k,$v', 'return "$k=\"$v\"";'); $this->map_xmlns_func = create_function('$p,$n', '$xd = "xmlns"; if(strlen($n[0])>0) $xd .= ":{$n[0]}"; return "{$xd}=\"{$n[1]}\"";'); } function parse($xml) { global $app_logging; array_unshift($this->ns_contexts, array()); $parser = xml_parser_create_ns(); xml_set_object($parser, $this); xml_set_element_handler($parser, "start_element", "end_element"); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); xml_set_character_data_handler($parser, "cdata"); xml_set_default_handler($parser, "_default"); xml_set_start_namespace_decl_handler($parser, "start_ns"); xml_set_end_namespace_decl_handler($parser, "end_ns"); $contents = ""; xml_parse($parser, $xml); xml_parser_free($parser); return true; } function start_element($parser, $name, $attrs) { $tag = array_pop(split(":", $name)); array_unshift($this->ns_contexts, $this->ns_decls); $this->depth++; if(!empty($this->in_content)) { $attrs_prefix = array(); // resolve prefixes for attributes foreach($attrs as $key => $value) { $attrs_prefix[$this->ns_to_prefix($key)] = $this->xml_escape($value); } $attrs_str = join(' ', array_map($this->map_attrs_func, array_keys($attrs_prefix), array_values($attrs_prefix))); if(strlen($attrs_str) > 0) { $attrs_str = " " . $attrs_str; } $xmlns_str = join(' ', array_map($this->map_xmlns_func, array_keys($this->ns_contexts[0]), array_values($this->ns_contexts[0]))); if(strlen($xmlns_str) > 0) { $xmlns_str = " " . $xmlns_str; } // handle self-closing tags (case: a new child found right-away, no text node) if(count($this->in_content) == 2) { array_push($this->in_content, ">"); } array_push($this->in_content, "<". $this->ns_to_prefix($name) ."{$xmlns_str}{$attrs_str}"); } else if(in_array($tag, $this->ATOM_CONTENT_ELEMENTS) || in_array($tag, $this->ATOM_SIMPLE_ELEMENTS)) { $this->in_content = array(); $this->is_xhtml = $attrs['type'] == 'xhtml'; array_push($this->in_content, array($tag,$this->depth)); } else if($tag == 'link') { array_push($this->entry->links, $attrs); } else if($tag == 'category') { array_push($this->entry->categories, $attrs['term']); } $this->ns_decls = array(); } function end_element($parser, $name) { $tag = array_pop(split(":", $name)); if(!empty($this->in_content)) { if($this->in_content[0][0] == $tag && $this->in_content[0][1] == $this->depth) { array_shift($this->in_content); if($this->is_xhtml) { $this->in_content = array_slice($this->in_content, 2, count($this->in_content)-3); } $this->entry->$tag = join('',$this->in_content); $this->in_content = array(); } else { $endtag = $this->ns_to_prefix($name); if (strpos($this->in_content[count($this->in_content)-1], '<' . $endtag) != false) { array_push($this->in_content, "/>"); } else { array_push($this->in_content, ""); } } } array_shift($this->ns_contexts); #print str_repeat(" ", $this->depth * $this->indent) . "end_element('$name')" ."\n"; $this->depth--; } function start_ns($parser, $prefix, $uri) { #print str_repeat(" ", $this->depth * $this->indent) . "starting: " . $prefix . ":" . $uri . "\n"; array_push($this->ns_decls, array($prefix,$uri)); } function end_ns($parser, $prefix) { #print str_repeat(" ", $this->depth * $this->indent) . "ending: #" . $prefix . "#\n"; } function cdata($parser, $data) { #print str_repeat(" ", $this->depth * $this->indent) . "data: #" . $data . "#\n"; if(!empty($this->in_content)) { // handle self-closing tags (case: text node found, need to close element started) if (strpos($this->in_content[count($this->in_content)-1], '<') != false) { array_push($this->in_content, ">"); } array_push($this->in_content, $this->xml_escape($data)); } } function _default($parser, $data) { # when does this gets called? } function ns_to_prefix($qname) { $components = split(":", $qname); $name = array_pop($components); if(!empty($components)) { $ns = join(":",$components); foreach($this->ns_contexts as $context) { foreach($context as $mapping) { if($mapping[1] == $ns && strlen($mapping[0]) > 0) { return "$mapping[0]:$name"; } } } } return $name; } function xml_escape($string) { return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $string ); } } ?> &wordpress/wp-admin/import/blogware.phpY'; echo '

    '.__('Import Blogware').'

    '; } function footer() { echo ''; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! This importer allows you to extract posts from Blogware XML export file into your blog. Pick a Blogware file to upload and click Import.').'

    '; wp_import_upload_form("admin.php?import=blogware&step=1"); echo '
    '; } function import_posts() { global $wpdb, $current_user; set_magic_quotes_runtime(0); $importdata = file($this->file); // Read the file into an array $importdata = implode('', $importdata); // squish it $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata); preg_match_all('|(]+>(.*?))|is', $importdata, $posts); $posts = $posts[1]; unset($importdata); echo '
      '; foreach ($posts as $post) { flush(); preg_match('||is', $post, $post_type); $post_type = $post_type[1]; if($post_type == "photo") { preg_match('|(.*?)|is', $post, $post_title); } else { preg_match('|(.*?)|is', $post, $post_title); } $post_title = $wpdb->escape(trim($post_title[1])); preg_match('|(.*?)|is', $post, $post_date); $post_date = strtotime($post_date[1]); $post_date = gmdate('Y-m-d H:i:s', $post_date); preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; $cat_index = 0; foreach ($categories as $category) { $categories[$cat_index] = $wpdb->escape($this->unhtmlentities($category)); $cat_index++; } if(strcasecmp($post_type, "photo") == 0) { preg_match('|(.*?)|is', $post, $post_content); $post_content = ''; $post_content = $this->unhtmlentities($post_content); } else { preg_match('|(.*?)|is', $post, $post_content); $post_content = str_replace(array (''), '', trim($post_content[1])); $post_content = $this->unhtmlentities($post_content); } // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = $wpdb->escape($post_content); $post_author = $current_user->ID; preg_match('|(.*?)|is', $post, $post_status); $post_status = trim($post_status[1]); echo '
    1. '; if ($post_id = post_exists($post_title, $post_content, $post_date)) { printf(__('Post %s already exists.'), stripslashes($post_title)); } else { printf(__('Importing post %s...'), stripslashes($post_title)); $postdata = compact('post_author', 'post_date', 'post_content', 'post_title', 'post_status'); $post_id = wp_insert_post($postdata); if (!$post_id) { _e("Couldn't get post ID"); echo '
    2. '; break; } if(0 != count($categories)) wp_create_categories($categories, $post_id); } preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; if ( $comments ) { $comment_post_ID = (int) $post_id; $num_comments = 0; foreach ($comments as $comment) { preg_match('|(.*?)|is', $comment, $comment_content); $comment_content = str_replace(array (''), '', trim($comment_content[1])); $comment_content = $this->unhtmlentities($comment_content); // Clean up content $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = $wpdb->escape($comment_content); preg_match('|(.*?)|is', $comment, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); preg_match('|(.*?)|is', $comment, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); $comment_author_email = NULL; $comment_approved = 1; // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) { echo ' '; printf(__('(%s comments)'), $num_comments); } echo ''; flush(); ob_flush(); } echo '
    '; } function import() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo $file['error']; return; } $this->file = $file['file']; $this->import_posts(); wp_import_cleanup($file['id']); echo '

    '; printf(__('All done. Have fun!'), get_option('home')); echo '

    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : $this->import(); break; } $this->footer(); } function BW_Import() { // Nothing. } } $blogware_import = new BW_Import(); register_importer('blogware', __('Blogware'), __('Import posts from Blogware'), array ($blogware_import, 'dispatch')); ?> &wordpress/wp-admin/import/dotclear.php[+get_var('SELECT cat_ID FROM '.$wpdb->categories.' WHERE category_nicename="'.$category_nicename.'"'); return $name; } } if(!function_exists('get_comment_count')) { function get_comment_count($post_ID) { global $wpdb; return $wpdb->get_var('SELECT count(*) FROM '.$wpdb->comments.' WHERE comment_post_ID = '.$post_ID); } } if(!function_exists('link_cat_exists')) { function link_cat_exists($catname) { global $wpdb; return $wpdb->get_var('SELECT cat_id FROM '.$wpdb->linkcategories.' WHERE cat_name = "'.$wpdb->escape($catname).'"'); } } if(!function_exists('link_exists')) { function link_exists($linkname) { global $wpdb; return $wpdb->get_var('SELECT link_id FROM '.$wpdb->links.' WHERE link_name = "'.$linkname.'"'); } } /* Identify UTF-8 text Taken from http://www.php.net/manual/fr/function.mb-detect-encoding.php#50087 */ // // utf8 encoding validation developed based on Wikipedia entry at: // http://en.wikipedia.org/wiki/UTF-8 // // Implemented as a recursive descent parser based on a simple state machine // copyright 2005 Maarten Meijer // // This cries out for a C-implementation to be included in PHP core // function valid_1byte($char) { if(!is_int($char)) return false; return ($char & 0x80) == 0x00; } function valid_2byte($char) { if(!is_int($char)) return false; return ($char & 0xE0) == 0xC0; } function valid_3byte($char) { if(!is_int($char)) return false; return ($char & 0xF0) == 0xE0; } function valid_4byte($char) { if(!is_int($char)) return false; return ($char & 0xF8) == 0xF0; } function valid_nextbyte($char) { if(!is_int($char)) return false; return ($char & 0xC0) == 0x80; } function valid_utf8($string) { $len = strlen($string); $i = 0; while( $i < $len ) { $char = ord(substr($string, $i++, 1)); if(valid_1byte($char)) { // continue continue; } else if(valid_2byte($char)) { // check 1 byte if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; } else if(valid_3byte($char)) { // check 2 bytes if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; } else if(valid_4byte($char)) { // check 3 bytes if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; } // goto next char } return true; // done } function csc ($s) { if (valid_utf8 ($s)) { return $s; } else { return iconv(get_option ("dccharset"),"UTF-8",$s); } } function textconv ($s) { return csc (preg_replace ('|(?)\s*\n|', ' ', $s)); } /** The Main Importer Class **/ class Dotclear_Import { function header() { echo '
    '; echo '

    '.__('Import DotClear').'

    '; echo '

    '.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'

    '; } function footer() { echo '
    '; } function greet() { echo '

    '.__('Howdy! This importer allows you to extract posts from a DotClear database into your blog. Mileage may vary.').'

    '; echo '

    '.__('Your DotClear Configuration settings are as follows:').'

    '; echo '
    '; wp_nonce_field('import-dotclear'); $this->db_form(); echo '

    '; echo '
    '; } function get_dc_cats() { global $wpdb; // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Categories return $dcdb->get_results('SELECT * FROM '.$dbprefix.'categorie', ARRAY_A); } function get_dc_users() { global $wpdb; // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Users return $dcdb->get_results('SELECT * FROM '.$dbprefix.'user', ARRAY_A); } function get_dc_posts() { // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Posts return $dcdb->get_results('SELECT '.$dbprefix.'post.*, '.$dbprefix.'categorie.cat_libelle_url AS post_cat_name FROM '.$dbprefix.'post INNER JOIN '.$dbprefix.'categorie ON '.$dbprefix.'post.cat_id = '.$dbprefix.'categorie.cat_id', ARRAY_A); } function get_dc_comments() { global $wpdb; // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Comments return $dcdb->get_results('SELECT * FROM '.$dbprefix.'comment', ARRAY_A); } function get_dc_links() { //General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); return $dcdb->get_results('SELECT * FROM '.$dbprefix.'link ORDER BY position', ARRAY_A); } function cat2wp($categories='') { // General Housekeeping global $wpdb; $count = 0; $dccat2wpcat = array(); // Do the Magic if(is_array($categories)) { echo '

    '.__('Importing Categories...').'

    '; foreach ($categories as $category) { $count++; extract($category); // Make Nice Variables $name = $wpdb->escape($cat_libelle_url); $title = $wpdb->escape(csc ($cat_libelle)); $desc = $wpdb->escape(csc ($cat_desc)); if($cinfo = category_exists($name)) { $ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title, 'category_description' => $desc)); } else { $ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title, 'category_description' => $desc)); } $dccat2wpcat[$id] = $ret_id; } // Store category translation for future use add_option('dccat2wpcat',$dccat2wpcat); echo '

    '.sprintf(__('Done! %1$s categories imported.'), $count).'

    '; return true; } echo __('No Categories to Import!'); return false; } function users2wp($users='') { // General Housekeeping global $wpdb; $count = 0; $dcid2wpid = array(); // Midnight Mojo if(is_array($users)) { echo '

    '.__('Importing Users...').'

    '; foreach($users as $user) { $count++; extract($user); // Make Nice Variables $name = $wpdb->escape(csc ($name)); $RealName = $wpdb->escape(csc ($user_pseudo)); if($uinfo = get_userdatabylogin($name)) { $ret_id = wp_insert_user(array( 'ID' => $uinfo->ID, 'user_login' => $user_id, 'user_nicename' => $Realname, 'user_email' => $user_email, 'user_url' => 'http://', 'display_name' => $Realname) ); } else { $ret_id = wp_insert_user(array( 'user_login' => $user_id, 'user_nicename' => csc ($user_pseudo), 'user_email' => $user_email, 'user_url' => 'http://', 'display_name' => $Realname) ); } $dcid2wpid[$user_id] = $ret_id; // Set DotClear-to-WordPress permissions translation // Update Usermeta Data $user = new WP_User($ret_id); $wp_perms = $user_level + 1; if(10 == $wp_perms) { $user->set_role('administrator'); } else if(9 == $wp_perms) { $user->set_role('editor'); } else if(5 <= $wp_perms) { $user->set_role('editor'); } else if(4 <= $wp_perms) { $user->set_role('author'); } else if(3 <= $wp_perms) { $user->set_role('contributor'); } else if(2 <= $wp_perms) { $user->set_role('contributor'); } else { $user->set_role('subscriber'); } update_usermeta( $ret_id, 'wp_user_level', $wp_perms); update_usermeta( $ret_id, 'rich_editing', 'false'); update_usermeta( $ret_id, 'first_name', csc ($user_prenom)); update_usermeta( $ret_id, 'last_name', csc ($user_nom)); }// End foreach($users as $user) // Store id translation array for future use add_option('dcid2wpid',$dcid2wpid); echo '

    '.sprintf(__('Done! %1$s users imported.'), $count).'

    '; return true; }// End if(is_array($users) echo __('No Users to Import!'); return false; }// End function user2wp() function posts2wp($posts='') { // General Housekeeping global $wpdb; $count = 0; $dcposts2wpposts = array(); $cats = array(); // Do the Magic if(is_array($posts)) { echo '

    '.__('Importing Posts...').'

    '; foreach($posts as $post) { $count++; extract($post); // Set DotClear-to-WordPress status translation $stattrans = array(0 => 'draft', 1 => 'publish'); $comment_status_map = array (0 => 'closed', 1 => 'open'); //Can we do this more efficiently? $uinfo = ( get_userdatabylogin( $user_id ) ) ? get_userdatabylogin( $user_id ) : 1; $authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ; $Title = $wpdb->escape(csc ($post_titre)); $post_content = textconv ($post_content); $post_excerpt = ""; if ($post_chapo != "") { $post_excerpt = textconv ($post_chapo); $post_content = $post_excerpt ."\n\n".$post_content; } $post_excerpt = $wpdb->escape ($post_excerpt); $post_content = $wpdb->escape ($post_content); $post_status = $stattrans[$post_pub]; // Import Post data into WordPress if($pinfo = post_exists($Title,$post_content)) { $ret_id = wp_insert_post(array( 'ID' => $pinfo, 'post_author' => $authorid, 'post_date' => $post_dt, 'post_date_gmt' => $post_dt, 'post_modified' => $post_upddt, 'post_modified_gmt' => $post_upddt, 'post_title' => $Title, 'post_content' => $post_content, 'post_excerpt' => $post_excerpt, 'post_status' => $post_status, 'post_name' => $post_titre_url, 'comment_status' => $comment_status_map[$post_open_comment], 'ping_status' => $comment_status_map[$post_open_tb], 'comment_count' => $post_nb_comment + $post_nb_trackback) ); } else { $ret_id = wp_insert_post(array( 'post_author' => $authorid, 'post_date' => $post_dt, 'post_date_gmt' => $post_dt, 'post_modified' => $post_modified_gmt, 'post_modified_gmt' => $post_modified_gmt, 'post_title' => $Title, 'post_content' => $post_content, 'post_excerpt' => $post_excerpt, 'post_status' => $post_status, 'post_name' => $post_titre_url, 'comment_status' => $comment_status_map[$post_open_comment], 'ping_status' => $comment_status_map[$post_open_tb], 'comment_count' => $post_nb_comment + $post_nb_trackback) ); } $dcposts2wpposts[$post_id] = $ret_id; // Make Post-to-Category associations $cats = array(); if($cat1 = get_catbynicename($post_cat_name)) { $cats[1] = $cat1; } if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); } } } // Store ID translation for later use add_option('dcposts2wpposts',$dcposts2wpposts); echo '

    '.sprintf(__('Done! %1$s posts imported.'), $count).'

    '; return true; } function comments2wp($comments='') { // General Housekeeping global $wpdb; $count = 0; $dccm2wpcm = array(); $postarr = get_option('dcposts2wpposts'); // Magic Mojo if(is_array($comments)) { echo '

    '.__('Importing Comments...').'

    '; foreach($comments as $comment) { $count++; extract($comment); // WordPressify Data $comment_ID = (int) ltrim($comment_id, '0'); $comment_post_ID = (int) $postarr[$post_id]; $comment_approved = "$comment_pub"; $name = $wpdb->escape(csc ($comment_auteur)); $email = $wpdb->escape($comment_email); $web = "http://".$wpdb->escape($comment_site); $message = $wpdb->escape(textconv ($comment_content)); if($cinfo = comment_exists($name, $comment_dt)) { // Update comments $ret_id = wp_update_comment(array( 'comment_ID' => $cinfo, 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_author_IP' => $comment_ip, 'comment_date' => $comment_dt, 'comment_date_gmt' => $comment_dt, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } else { // Insert comments $ret_id = wp_insert_comment(array( 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_author_IP' => $comment_ip, 'comment_date' => $comment_dt, 'comment_date_gmt' => $comment_dt, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } $dccm2wpcm[$comment_ID] = $ret_id; } // Store Comment ID translation for future use add_option('dccm2wpcm', $dccm2wpcm); // Associate newly formed categories with posts get_comment_count($ret_id); echo '

    '.sprintf(__('Done! %1$s comments imported.'), $count).'

    '; return true; } echo __('No Comments to Import!'); return false; } function links2wp($links='') { // General Housekeeping global $wpdb; $count = 0; // Deal with the links if(is_array($links)) { echo '

    '.__('Importing Links...').'

    '; foreach($links as $link) { $count++; extract($link); if ($title != "") { if ($cinfo = link_cat_exists (csc ($title))) { $category = $cinfo; } else { //??????????????? $cat_ident = $wpdb->get_col("SELECT cat_ID from $wpdb->categories WHERE cat_name = ''"); // $wpdb->insert ("INSERT INTO $wpdb->link2cat (cat_name) VALUES ('". // $wpdb->escape (csc ($title))."')", $wpdb->linkcategories, ); $category = 0;//$wpdb->insert_id; } } else { $linkname = $wpdb->escape(csc ($label)); $description = $wpdb->escape(csc ($title)); if($linfo = link_exists($linkname)) { $ret_id = wp_update_link(array( 'link_id' => $linfo, 'link_url' => $href, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description) ); } else { $ret_id = wp_insert_link(array( 'link_url' => $url, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description) ); } $dclinks2wplinks[$link_id] = $ret_id; } } add_option('dclinks2wplinks',$dclinks2wplinks); echo '

    '; printf(__('Done! %s links or link categories imported'), $count); echo '

    '; return true; } echo __('No Links to Import!'); return false; } function import_categories() { // Category Import $cats = $this->get_dc_cats(); $this->cat2wp($cats); add_option('dc_cats', $cats); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Users'))); echo '
    '; } function import_users() { // User Import $users = $this->get_dc_users(); $this->users2wp($users); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Posts'))); echo '
    '; } function import_posts() { // Post Import $posts = $this->get_dc_posts(); $this->posts2wp($posts); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Comments'))); echo '
    '; } function import_comments() { // Comment Import $comments = $this->get_dc_comments(); $this->comments2wp($comments); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Links'))); echo '
    '; } function import_links() { //Link Import $links = $this->get_dc_links(); $this->links2wp($links); add_option('dc_links', $links); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Finish'))); echo '
    '; } function cleanup_dcimport() { delete_option('dcdbprefix'); delete_option('dc_cats'); delete_option('dcid2wpid'); delete_option('dccat2wpcat'); delete_option('dcposts2wpposts'); delete_option('dccm2wpcm'); delete_option('dclinks2wplinks'); delete_option('dcuser'); delete_option('dcpass'); delete_option('dcname'); delete_option('dchost'); delete_option('dccharset'); $this->tips(); } function tips() { echo '

    '.__('Welcome to WordPress. We hope (and expect!) that you will find this platform incredibly rewarding! As a new WordPress user coming from DotClear, there are some things that we would like to point out. Hopefully, they will help your transition go as smoothly as possible.').'

    '; echo '

    '.__('Users').'

    '; echo '

    '.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password. Forget it. You didn\'t have that login in DotClear, why should you have it here? Instead we have taken care to import all of your users into our system. Unfortunately there is one downside. Because both WordPress and DotClear uses a strong encryption hash with passwords, it is impossible to decrypt it and we are forced to assign temporary passwords to all your users. Every user has the same username, but their passwords are reset to password123. So Login and change it.'), '/wp-login.php').'

    '; echo '

    '.__('Preserving Authors').'

    '; echo '

    '.__('Secondly, we have attempted to preserve post authors. If you are the only author or contributor to your blog, then you are safe. In most cases, we are successful in this preservation endeavor. However, if we cannot ascertain the name of the writer due to discrepancies between database tables, we assign it to you, the administrative user.').'

    '; echo '

    '.__('Textile').'

    '; echo '

    '.__('Also, since you\'re coming from DotClear, you probably have been using Textile to format your comments and posts. If this is the case, we recommend downloading and installing Textile for WordPress. Trust me... You\'ll want it.').'

    '; echo '

    '.__('WordPress Resources').'

    '; echo '

    '.__('Finally, there are numerous WordPress resources around the internet. Some of them are:').'

    '; echo ''; echo '

    '.sprintf(__('That\'s it! What are you waiting for? Go login!'), '../wp-login.php').'

    '; } function db_form() { echo ''; printf('', __('DotClear Database User:')); printf('', __('DotClear Database Password:')); printf('', __('DotClear Database Name:')); printf('', __('DotClear Database Host:')); printf('', __('DotClear Table prefix:')); printf('', __('Originating character set:')); echo '
    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); if ( $step > 0 ) { check_admin_referer('import-dotclear'); if($_POST['dbuser']) { if(get_option('dcuser')) delete_option('dcuser'); add_option('dcuser', sanitize_user($_POST['dbuser'], true)); } if($_POST['dbpass']) { if(get_option('dcpass')) delete_option('dcpass'); add_option('dcpass', sanitize_user($_POST['dbpass'], true)); } if($_POST['dbname']) { if(get_option('dcname')) delete_option('dcname'); add_option('dcname', sanitize_user($_POST['dbname'], true)); } if($_POST['dbhost']) { if(get_option('dchost')) delete_option('dchost'); add_option('dchost', sanitize_user($_POST['dbhost'], true)); } if($_POST['dccharset']) { if(get_option('dccharset')) delete_option('dccharset'); add_option('dccharset', sanitize_user($_POST['dccharset'], true)); } if($_POST['dbprefix']) { if(get_option('dcdbprefix')) delete_option('dcdbprefix'); add_option('dcdbprefix', sanitize_user($_POST['dbprefix'], true)); } } switch ($step) { default: case 0 : $this->greet(); break; case 1 : $this->import_categories(); break; case 2 : $this->import_users(); break; case 3 : $this->import_posts(); break; case 4 : $this->import_comments(); break; case 5 : $this->import_links(); break; case 6 : $this->cleanup_dcimport(); break; } $this->footer(); } function Dotclear_Import() { // Nothing. } } $dc_import = new Dotclear_Import(); register_importer('dotclear', __('DotClear'), __('Import categories, users, posts, comments, and links from a DotClear blog'), array ($dc_import, 'dispatch')); ?> (wordpress/wp-admin/import/greymatter.php)7'; echo '

    '.__('Import GreyMatter').'

    '; } function footer() { echo ''; } function greet() { $this->header(); ?>

    • If authors are found not to be in gm-authors.cgi, imports them at level 0.') ?>

     


    so you need to enter the number of the last GM post here.
    (if you don't know that number, just log into your FTP and look it out
    in the entries' folder)") ?>

     

    footer(); } function gm2autobr($string) { // transforms GM's |*| into b2's
    \n $string = str_replace("|*|","
    \n",$string); return($string); } function import() { global $wpdb; $wpvarstoreset = array('gmpath', 'archivespath', 'lastentry'); for ($i=0; $iheader(); ?>

      • escape($userdata[0]); $pass1=$wpdb->escape($userdata[1]); $user_nickname=$wpdb->escape($userdata[0]); $user_email=$wpdb->escape($userdata[2]); $user_url=$wpdb->escape($userdata[3]); $user_joindate=$wpdb->escape($user_joindate); $user_id = username_exists($user_login); if ($user_id) { printf('
      • '.__('user %s').''.__('Already exists').'
      • ', "$user_login"); $this->gmnames[$userdata[0]] = $user_id; continue; } $user_info = array("user_login"=>"$user_login", "user_pass"=>"$pass1", "user_nickname"=>"$user_nickname", "user_email"=>"$user_email", "user_url"=>"$user_url", "user_ip"=>"$user_ip", "user_domain"=>"$user_domain", "user_browser"=>"$user_browser", "dateYMDhour"=>"$user_joindate", "user_level"=>"1", "user_idmode"=>"nickname"); $user_id = wp_insert_user($user_info); $this->gmnames[$userdata[0]] = $user_id; printf('
      • '.__('user %s...').' '.__('Done').'
      • ', "$user_login"); } ?>

      • gm2autobr($entry[2]); $postmorecontent=$this->gm2autobr($entry[3]); $post_author=trim($wpdb->escape($postinfo[1])); $post_title=$this->gm2autobr($postinfo[2]); printf('
      • '.__('entry # %s : %s : by %s'), $entryfile, $post_title, $postinfo[1]); $post_title=$wpdb->escape($post_title); $postyear=$postinfo[6]; $postmonth=zeroise($postinfo[4],2); $postday=zeroise($postinfo[5],2); $posthour=zeroise($postinfo[7],2); $postminute=zeroise($postinfo[8],2); $postsecond=zeroise($postinfo[9],2); if (($postinfo[10]=="PM") && ($posthour!="12")) $posthour=$posthour+12; $post_date="$postyear-$postmonth-$postday $posthour:$postminute:$postsecond"; $post_content=$postmaincontent; if (strlen($postmorecontent)>3) $post_content .= "

        ".$postmorecontent; $post_content=$wpdb->escape($post_content); $post_karma=$postinfo[12]; $post_status = 'publish'; //in greymatter, there are no drafts $comment_status = 'open'; $ping_status = 'closed'; if ($post_ID = post_exists($post_title, '', $post_date)) { echo ' '; _e('(already exists)'); } else { //just so that if a post already exists, new users are not created by checkauthor // we'll check the author is registered, or if it's a deleted author $user_id = username_exists($post_author); if (!$user_id) { // if deleted from GM, we register the author as a level 0 user $user_ip="127.0.0.1"; $user_domain="localhost"; $user_browser="server"; $user_joindate="1979-06-06 00:41:00"; $user_login=$wpdb->escape($post_author); $pass1=$wpdb->escape("password"); $user_nickname=$wpdb->escape($post_author); $user_email=$wpdb->escape("user@deleted.com"); $user_url=$wpdb->escape(""); $user_joindate=$wpdb->escape($user_joindate); $user_info = array("user_login"=>$user_login, "user_pass"=>$pass1, "user_nickname"=>$user_nickname, "user_email"=>$user_email, "user_url"=>$user_url, "user_ip"=>$user_ip, "user_domain"=>$user_domain, "user_browser"=>$user_browser, "dateYMDhour"=>$user_joindate, "user_level"=>0, "user_idmode"=>"nickname"); $user_id = wp_insert_user($user_info); $this->gmnames[$postinfo[1]] = $user_id; echo ': '; printf(__('registered deleted user %s at level 0 '), "$user_login"); } if (array_key_exists($postinfo[1], $this->gmnames)) { $post_author = $this->gmnames[$postinfo[1]]; } else { $post_author = $user_id; } $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt'); $post_ID = wp_insert_post($postdata); } $c=count($entry); if ($c>4) { $numAddedComments = 0; $numComments = 0; for ($j=4;$j<$c;$j++) { $entry[$j]=$this->gm2autobr($entry[$j]); $commentinfo=explode("|",$entry[$j]); $comment_post_ID=$post_ID; $comment_author=$wpdb->escape($commentinfo[0]); $comment_author_email=$wpdb->escape($commentinfo[2]); $comment_author_url=$wpdb->escape($commentinfo[3]); $comment_author_IP=$wpdb->escape($commentinfo[1]); $commentyear=$commentinfo[7]; $commentmonth=zeroise($commentinfo[5],2); $commentday=zeroise($commentinfo[6],2); $commenthour=zeroise($commentinfo[8],2); $commentminute=zeroise($commentinfo[9],2); $commentsecond=zeroise($commentinfo[10],2); if (($commentinfo[11]=="PM") && ($commenthour!="12")) $commenthour=$commenthour+12; $comment_date="$commentyear-$commentmonth-$commentday $commenthour:$commentminute:$commentsecond"; $comment_content=$wpdb->escape($commentinfo[12]); if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $numAddedComments++; } $numComments++; } if ($numAddedComments > 0) { echo ': '; printf(__('imported %d comment(s)'), $numAddedComments); } $preExisting = $numComments - numAddedComments; if ($preExisting > 0) { echo ' '; printf(__('ignored %d pre-existing comments'), $preExisting); } } echo '... '.__('Done').'
      • '; } } ?>

     

    footer(); } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; switch ($step) { case 0 : $this->greet(); break; case 1: check_admin_referer('import-greymatter'); $this->import(); break; } } function GM_Import() { // Nothing. } } $gm_import = new GM_Import(); register_importer('greymatter', __('GreyMatter'), __('Import users, posts, and comments from a Greymatter blog'), array ($gm_import, 'dispatch')); ?> )wordpress/wp-admin/import/livejournal.php'; echo '

    '.__('Import LiveJournal').'

    '; } function footer() { echo ''; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! Upload your LiveJournal XML export file and we’ll import the posts into this blog.').'

    '; echo '

    '.__('Choose a LiveJournal XML file to upload, then click Upload file and import.').'

    '; wp_import_upload_form("admin.php?import=livejournal&step=1"); echo '
    '; } function import_posts() { global $wpdb, $current_user; set_magic_quotes_runtime(0); $importdata = file($this->file); // Read the file into an array $importdata = implode('', $importdata); // squish it $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata); preg_match_all('|(.*?)|is', $importdata, $posts); $posts = $posts[1]; unset($importdata); echo '
      '; foreach ($posts as $post) { preg_match('|(.*?)|is', $post, $post_title); $post_title = $wpdb->escape(trim($post_title[1])); if ( empty($post_title) ) { preg_match('|(.*?)|is', $post, $post_title); $post_title = $wpdb->escape(trim($post_title[1])); } preg_match('|(.*?)|is', $post, $post_date); $post_date = strtotime($post_date[1]); $post_date = gmdate('Y-m-d H:i:s', $post_date); preg_match('|(.*?)|is', $post, $post_content); $post_content = str_replace(array (''), '', trim($post_content[1])); $post_content = $this->unhtmlentities($post_content); // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = $wpdb->escape($post_content); $post_author = $current_user->ID; $post_status = 'publish'; echo '
    1. '; if ($post_id = post_exists($post_title, $post_content, $post_date)) { printf(__('Post %s already exists.'), stripslashes($post_title)); } else { printf(__('Importing post %s...'), stripslashes($post_title)); $postdata = compact('post_author', 'post_date', 'post_content', 'post_title', 'post_status'); $post_id = wp_insert_post($postdata); if (!$post_id) { _e("Couldn't get post ID"); echo '
    2. '; break; } } preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; if ( $comments ) { $comment_post_ID = (int) $post_id; $num_comments = 0; foreach ($comments as $comment) { preg_match('|(.*?)|is', $comment, $comment_content); $comment_content = str_replace(array (''), '', trim($comment_content[1])); $comment_content = $this->unhtmlentities($comment_content); // Clean up content $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = $wpdb->escape($comment_content); preg_match('|(.*?)|is', $comment, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); preg_match('|(.*?)|is', $comment, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); preg_match('|(.*?)|is', $comment, $comment_author_email); $comment_author_email = $wpdb->escape(trim($comment_author_email[1])); $comment_approved = 1; // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) { echo ' '; printf(__('(%s comments)'), $num_comments); } echo ''; } echo '
    '; } function import() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo $file['error']; return; } $this->file = $file['file']; $this->import_posts(); wp_import_cleanup($file['id']); echo '

    '; printf(__('All done. Have fun!'), get_option('home')); echo '

    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->import(); break; } $this->footer(); } function LJ_Import() { // Nothing. } } $livejournal_import = new LJ_Import(); register_importer('livejournal', __('LiveJournal'), __('Import posts from a LiveJournal XML export file'), array ($livejournal_import, 'dispatch')); ?> wordpress/wp-admin/import/mt.php;U'; echo '

    '.__('Import Movable Type or TypePad').'

    '; } function footer() { echo ''; } function greet() { $this->header(); ?>

    out of memory error try splitting up the import file into pieces.'); ?>

    footer(); } function users_form($n) { global $wpdb, $testing; $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY ID"); ?> mtnames))) { //a new mt author name is found ++ $this->j; $this->mtnames[$this->j] = $author; //add that new mt author name to an array $user_id = username_exists($this->newauthornames[$this->j]); //check if the new author name defined by the user is a pre-existing wp user if (!$user_id) { //banging my head against the desk now. if ($newauthornames[$this->j] == 'left_blank') { //check if the user does not want to change the authorname $user_id = wp_create_user($author, $pass); $this->newauthornames[$this->j] = $author; //now we have a name, in the place of left_blank. } else { $user_id = wp_create_user($this->newauthornames[$this->j], $pass); } } else { return $user_id; // return pre-existing wp username if it exists } } else { $key = array_search($author, $this->mtnames); //find the array key for $author in the $mtnames array $user_id = username_exists($this->newauthornames[$key]); //use that key to get the value of the author's name from $newauthornames } return $user_id; } function get_entries() { set_magic_quotes_runtime(0); $importdata = file($this->file); // Read the file into an array $importdata = implode('', $importdata); // squish it $importdata = preg_replace("/(\r\n|\n|\r)/", "\n", $importdata); $importdata = preg_replace("/\n--------\n/", "--MT-ENTRY--\n", $importdata); $this->posts = explode("--MT-ENTRY--", $importdata); } function get_mt_authors() { $temp = array (); $i = -1; foreach ($this->posts as $post) { if ('' != trim($post)) { ++ $i; preg_match("|AUTHOR:(.*)|", $post, $thematch); $thematch = trim($thematch[1]); array_push($temp, "$thematch"); //store the extracted author names in a temporary array } } //we need to find unique values of author names, while preserving the order, so this function emulates the unique_value(); php function, without the sorting. $authors[0] = array_shift($temp); $y = count($temp) + 1; for ($x = 1; $x < $y; $x ++) { $next = array_shift($temp); if (!(in_array($next, $authors))) array_push($authors, "$next"); } return $authors; } function get_authors_from_post() { $formnames = array (); $selectnames = array (); foreach ($_POST['user'] as $key => $line) { $newname = trim(stripslashes($line)); if ($newname == '') $newname = 'left_blank'; //passing author names from step 1 to step 2 is accomplished by using POST. left_blank denotes an empty entry in the form. array_push($formnames, "$newname"); } // $formnames is the array with the form entered names foreach ($_POST['userselect'] as $user => $key) { $selected = trim(stripslashes($key)); array_push($selectnames, "$selected"); } $count = count($formnames); for ($i = 0; $i < $count; $i ++) { if ($selectnames[$i] != '#NONE#') { //if no name was selected from the select menu, use the name entered in the form array_push($this->newauthornames, "$selectnames[$i]"); } else { array_push($this->newauthornames, "$formnames[$i]"); } } } function mt_authors_form() { ?>
    '; } function select_authors() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { $this->header(); echo '

    '.__('Sorry, there has been an error').'.

    '; echo '

    ' . $file['error'] . '

    '; $this->footer(); return; } $this->file = $file['file']; $this->id = (int) $file['id']; $this->get_entries(); $this->mt_authors_form(); } function process_posts() { global $wpdb; $i = -1; echo "
      "; foreach ($this->posts as $post) { if ('' != trim($post)) { ++ $i; unset ($post_categories); // Take the pings out first preg_match("|(-----\n\nPING:.*)|s", $post, $pings); $post = preg_replace("|(-----\n\nPING:.*)|s", '', $post); // Then take the comments out preg_match("|(-----\nCOMMENT:.*)|s", $post, $comments); $post = preg_replace("|(-----\nCOMMENT:.*)|s", '', $post); // We ignore the keywords $post = preg_replace("|(-----\nKEYWORDS:.*)|s", '', $post); // We want the excerpt preg_match("|-----\nEXCERPT:(.*)|s", $post, $excerpt); $post_excerpt = $wpdb->escape(trim($excerpt[1])); $post = preg_replace("|(-----\nEXCERPT:.*)|s", '', $post); // We're going to put extended body into main body with a more tag preg_match("|-----\nEXTENDED BODY:(.*)|s", $post, $extended); $extended = trim($extended[1]); if ('' != $extended) $extended = "\n\n$extended"; $post = preg_replace("|(-----\nEXTENDED BODY:.*)|s", '', $post); // Now for the main body preg_match("|-----\nBODY:(.*)|s", $post, $body); $body = trim($body[1]); $post_content = $wpdb->escape($body.$extended); $post = preg_replace("|(-----\nBODY:.*)|s", '', $post); // Grab the metadata from what's left $metadata = explode("\n", $post); foreach ($metadata as $line) { preg_match("/^(.*?):(.*)/", $line, $token); $key = trim($token[1]); $value = trim($token[2]); // Now we decide what it is and what to do with it switch ($key) { case '' : break; case 'AUTHOR' : $post_author = $value; break; case 'TITLE' : $post_title = $wpdb->escape($value); break; case 'STATUS' : // "publish" and "draft" enumeration items match up; no change required $post_status = $value; if (empty ($post_status)) $post_status = 'publish'; break; case 'ALLOW COMMENTS' : $post_allow_comments = $value; if ($post_allow_comments == 1) { $comment_status = 'open'; } else { $comment_status = 'closed'; } break; case 'CONVERT BREAKS' : $post_convert_breaks = $value; break; case 'ALLOW PINGS' : $ping_status = trim($meta[2][0]); if ($ping_status == 1) { $ping_status = 'open'; } else { $ping_status = 'closed'; } break; case 'PRIMARY CATEGORY' : if (! empty ($value) ) $post_categories[] = $wpdb->escape($value); break; case 'CATEGORY' : if (! empty ($value) ) $post_categories[] = $wpdb->escape($value); break; case 'DATE' : $post_modified = strtotime($value); $post_modified = date('Y-m-d H:i:s', $post_modified); $post_modified_gmt = get_gmt_from_date("$post_modified"); $post_date = $post_modified; $post_date_gmt = $post_modified_gmt; break; default : // echo "\n$key: $value"; break; } // end switch } // End foreach // Let's check to see if it's in already if ($post_id = post_exists($post_title, '', $post_date)) { echo '
    1. '; printf(__('Post %s already exists.'), stripslashes($post_title)); } else { echo '
    2. '; printf(__('Importing post %s...'), stripslashes($post_title)); $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt'); $post_id = wp_insert_post($postdata); // Add categories. if (0 != count($post_categories)) { wp_create_categories($post_categories, $post_id); } } $comment_post_ID = (int) $post_id; $comment_approved = 1; // Now for comments $comments = explode("-----\nCOMMENT:", $comments[0]); $num_comments = 0; foreach ($comments as $comment) { if ('' != trim($comment)) { // Author preg_match("|AUTHOR:(.*)|", $comment, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); $comment = preg_replace('|(\n?AUTHOR:.*)|', '', $comment); preg_match("|EMAIL:(.*)|", $comment, $comment_author_email); $comment_author_email = $wpdb->escape(trim($comment_author_email[1])); $comment = preg_replace('|(\n?EMAIL:.*)|', '', $comment); preg_match("|IP:(.*)|", $comment, $comment_author_IP); $comment_author_IP = trim($comment_author_IP[1]); $comment = preg_replace('|(\n?IP:.*)|', '', $comment); preg_match("|URL:(.*)|", $comment, $comment_author_url); $comment_author_url = $wpdb->escape(trim($comment_author_url[1])); $comment = preg_replace('|(\n?URL:.*)|', '', $comment); preg_match("|DATE:(.*)|", $comment, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); $comment = preg_replace('|(\n?DATE:.*)|', '', $comment); $comment_content = $wpdb->escape(trim($comment)); $comment_content = str_replace('-----', '', $comment_content); // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) printf(' '.__('(%s comments)'), $num_comments); // Finally the pings // fix the double newline on the first one $pings[0] = str_replace("-----\n\n", "-----\n", $pings[0]); $pings = explode("-----\nPING:", $pings[0]); $num_pings = 0; foreach ($pings as $ping) { if ('' != trim($ping)) { // 'Author' preg_match("|BLOG NAME:(.*)|", $ping, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); $ping = preg_replace('|(\n?BLOG NAME:.*)|', '', $ping); preg_match("|IP:(.*)|", $ping, $comment_author_IP); $comment_author_IP = trim($comment_author_IP[1]); $ping = preg_replace('|(\n?IP:.*)|', '', $ping); preg_match("|URL:(.*)|", $ping, $comment_author_url); $comment_author_url = $wpdb->escape(trim($comment_author_url[1])); $ping = preg_replace('|(\n?URL:.*)|', '', $ping); preg_match("|DATE:(.*)|", $ping, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); $ping = preg_replace('|(\n?DATE:.*)|', '', $ping); preg_match("|TITLE:(.*)|", $ping, $ping_title); $ping_title = $wpdb->escape(trim($ping_title[1])); $ping = preg_replace('|(\n?TITLE:.*)|', '', $ping); $comment_content = $wpdb->escape(trim($ping)); $comment_content = str_replace('-----', '', $comment_content); $comment_content = "$ping_title\n\n$comment_content"; $comment_type = 'trackback'; // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_type', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_pings++; } } } if ( $num_pings ) printf(' '.__('(%s pings)'), $num_pings); echo "
    3. "; } } echo '
    '; wp_import_cleanup($this->id); echo '

    '.sprintf(__('All done. Have fun!'), get_option('home')).'

    '; } function import() { $this->id = (int) $_GET['id']; $this->file = get_attached_file($this->id); $this->get_authors_from_post(); $this->get_entries(); $this->process_posts(); } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->select_authors(); break; case 2: check_admin_referer('import-mt'); $this->import(); break; } } function MT_Import() { // Nothing. } } $mt_import = new MT_Import(); register_importer('mt', __('Movable Type and TypePad'), __('Import posts and comments from a Movable Type or Typepad blog'), array ($mt_import, 'dispatch')); ?>wordpress/wp-admin/import.php|

    read()) != false) { if ($file{0} == '.') { continue; } elseif (substr($file, -4) == '.php') { require_once($import_root . '/' . $file); } } } $importers = get_importers(); if (empty ($importers)) { echo '

    '.__('No importers are available.').'

    '; // TODO: make more helpful } else { ?> $data) { $style = ('class="alternate"' == $style || 'class="alternate active"' == $style) ? '' : 'alternate'; $action = "{$data[0]}"; if ($style != '') $style = 'class="'.$style.'"'; echo " "; } ?>
    $action {$data[1]}
    !wordpress/wp-admin/import/rss.php'; echo '

    '.__('Import RSS').'

    '; } function footer() { echo ''; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! This importer allows you to extract posts from an RSS 2.0 file into your blog. This is useful if you want to import your posts from a system that is not handled by a custom import tool. Pick an RSS file to upload and click Import.').'

    '; wp_import_upload_form("admin.php?import=rss&step=1"); echo '
    '; } function get_posts() { global $wpdb; set_magic_quotes_runtime(0); $datalines = file($this->file); // Read the file into an array $importdata = implode('', $datalines); // squish it $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata); preg_match_all('|(.*?)|is', $importdata, $this->posts); $this->posts = $this->posts[1]; $index = 0; foreach ($this->posts as $post) { preg_match('|(.*?)|is', $post, $post_title); $post_title = str_replace(array(''), '', $wpdb->escape( trim($post_title[1]) )); preg_match('|(.*?)|is', $post, $post_date_gmt); if ($post_date_gmt) { $post_date_gmt = strtotime($post_date_gmt[1]); } else { // if we don't already have something from pubDate preg_match('|(.*?)|is', $post, $post_date_gmt); $post_date_gmt = preg_replace('|([-+])([0-9]+):([0-9]+)$|', '\1\2\3', $post_date_gmt[1]); $post_date_gmt = str_replace('T', ' ', $post_date_gmt); $post_date_gmt = strtotime($post_date_gmt); } $post_date_gmt = gmdate('Y-m-d H:i:s', $post_date_gmt); $post_date = get_date_from_gmt( $post_date_gmt ); preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; if (!$categories) { preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; } $cat_index = 0; foreach ($categories as $category) { $categories[$cat_index] = $wpdb->escape($this->unhtmlentities($category)); $cat_index++; } preg_match('|(.*?)|is', $post, $guid); if ($guid) $guid = $wpdb->escape(trim($guid[1])); else $guid = ''; preg_match('|(.*?)|is', $post, $post_content); $post_content = str_replace(array (''), '', $wpdb->escape(trim($post_content[1]))); if (!$post_content) { // This is for feeds that put content in description preg_match('|(.*?)|is', $post, $post_content); $post_content = $wpdb->escape($this->unhtmlentities(trim($post_content[1]))); } // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_author = 1; $post_status = 'publish'; $this->posts[$index] = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_status', 'guid', 'categories'); $index++; } } function import_posts() { echo '
      '; foreach ($this->posts as $post) { echo "
    1. ".__('Importing post...'); extract($post); if ($post_id = post_exists($post_title, $post_content, $post_date)) { _e('Post already imported'); } else { $post_id = wp_insert_post($post); if (!$post_id) { _e("Couldn't get post ID"); return; } if (0 != count($categories)) wp_create_categories($categories, $post_id); _e('Done !'); } echo '
    2. '; } echo '
    '; } function import() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo $file['error']; return; } $this->file = $file['file']; $this->get_posts(); $this->import_posts(); wp_import_cleanup($file['id']); echo '

    '; printf(__('All done. Have fun!'), get_option('home')); echo '

    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->import(); break; } $this->footer(); } function RSS_Import() { // Nothing. } } $rss_import = new RSS_Import(); register_importer('rss', __('RSS'), __('Import posts from an RSS feed'), array ($rss_import, 'dispatch')); ?> &wordpress/wp-admin/import/.svn/entries/8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-admin/import svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 livejournal.php file 2008-11-20T16:30:46.000000Z d574f36f883dabf279f0deeb0d7c1985 2008-10-28T18:17:06.112729Z 97 paul dotclear.php file 2008-11-20T16:30:46.000000Z d9cdfd020f7d926ce0f3fffc4e1c0ff7 2008-10-28T18:17:06.112729Z 97 paul mt.php file 2008-11-20T16:30:46.000000Z be2899535c2231670adcfa20b9e52f2f 2008-10-28T18:17:06.112729Z 97 paul blogger.php file 2008-11-20T16:30:46.000000Z 13bde9b7cad1e9a7afa971b6573cbe8b 2008-10-28T18:17:06.112729Z 97 paul blogware.php file 2008-11-20T16:30:46.000000Z 7ac22f76d92e7a81b8f7e0e42bb259b0 2008-10-28T18:17:06.112729Z 97 paul textpattern.php file 2008-11-20T16:30:46.000000Z c7df0626cacd247d17e28b03711a0a72 2008-10-28T18:17:06.112729Z 97 paul greymatter.php file 2008-11-20T16:30:46.000000Z 915346fc226b3096b31f15d019d883f1 2008-10-28T18:17:06.112729Z 97 paul rss.php file 2008-11-20T16:30:46.000000Z dc268547561c41f2f9d1708513779fdc 2008-10-28T18:17:06.112729Z 97 paul wordpress.php file 2008-11-20T16:30:46.000000Z bed2e9d4005513fa09c8cff06cc381e1 2008-10-28T18:17:06.112729Z 97 paul %wordpress/wp-admin/import/.svn/format8 =wordpress/wp-admin/import/.svn/text-base/blogger.php.svn-base

    $title

    $welcome

    $prereqs

    $stepone

    \n"; } function uh_oh($title, $message, $info) { echo "

    $title

    $message

    $info
    "; } function auth() { // We have a single-use token that must be upgraded to a session token. $token = preg_replace( '/[^-_0-9a-zA-Z]/', '', $_GET['token'] ); $headers = array( "GET /accounts/AuthSubSessionToken HTTP/1.0", "Authorization: AuthSub token=\"$token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_auth_sock( ); if ( ! $sock ) return false; $response = $this->_txrx( $sock, $request ); preg_match( '/token=([-_0-9a-z]+)/i', $response, $matches ); if ( empty( $matches[1] ) ) { $this->uh_oh( __( 'Authorization failed' ), __( 'Something went wrong. If the problem persists, send this info to support:' ), htmlspecialchars($response) ); return false; } $this->token = $matches[1]; wp_redirect( remove_query_arg( array( 'token', 'noheader' ) ) ); } function get_token_info() { $headers = array( "GET /accounts/AuthSubTokenInfo HTTP/1.0", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_auth_sock( ); if ( ! $sock ) return; $response = $this->_txrx( $sock, $request ); return $this->parse_response($response); } function token_is_valid() { $info = $this->get_token_info(); if ( $info['code'] == 200 ) return true; return false; } function show_blogs($iter = 0) { if ( empty($this->blogs) ) { $headers = array( "GET /feeds/default/blogs HTTP/1.0", "Host: www2.blogger.com", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( ); if ( ! $sock ) return; $response = $this->_txrx( $sock, $request ); // Quick and dirty XML mining. list( $headers, $xml ) = explode( "\r\n\r\n", $response ); $p = xml_parser_create(); xml_parse_into_struct($p, $xml, $vals, $index); xml_parser_free($p); $this->title = $vals[$index['TITLE'][0]]['value']; // Give it a few retries... this step often flakes out the first time. if ( empty( $index['ENTRY'] ) ) { if ( $iter < 3 ) { return $this->show_blogs($iter + 1); } else { $this->uh_oh( __('Trouble signing in'), __('We were not able to gain access to your account. Try starting over.'), '' ); return false; } } foreach ( $index['ENTRY'] as $i ) { $blog = array(); while ( ( $tag = $vals[$i] ) && ! ( $tag['tag'] == 'ENTRY' && $tag['type'] == 'close' ) ) { if ( $tag['tag'] == 'TITLE' ) { $blog['title'] = $tag['value']; } elseif ( $tag['tag'] == 'SUMMARY' ) { $blog['summary'] == $tag['value']; } elseif ( $tag['tag'] == 'LINK' ) { if ( $tag['attributes']['REL'] == 'alternate' && $tag['attributes']['TYPE'] == 'text/html' ) { $parts = parse_url( $tag['attributes']['HREF'] ); $blog['host'] = $parts['host']; } elseif ( $tag['attributes']['REL'] == 'edit' ) $blog['gateway'] = $tag['attributes']['HREF']; } ++$i; } if ( ! empty ( $blog ) ) { $blog['total_posts'] = $this->get_total_results('posts', $blog['host']); $blog['total_comments'] = $this->get_total_results('comments', $blog['host']); $blog['mode'] = 'init'; $this->blogs[] = $blog; } } if ( empty( $this->blogs ) ) { $this->uh_oh( __('No blogs found'), __('We were able to log in but there were no blogs. Try a different account next time.'), '' ); return false; } } //echo '
    '.print_r($this,1).'
    '; $start = js_escape( __('Import') ); $continue = js_escape( __('Continue') ); $stop = js_escape( __('Importing...') ); $authors = js_escape( __('Set Authors') ); $loadauth = js_escape( __('Preparing author mapping form...') ); $authhead = js_escape( __('Final Step: Author Mapping') ); $nothing = js_escape( __('Nothing was imported. Had you already imported this blog?') ); $title = __('Blogger Blogs'); $name = __('Blog Name'); $url = __('Blog URL'); $action = __('The Magic Button'); $posts = __('Posts'); $comments = __('Comments'); $noscript = __('This feature requires Javascript but it seems to be disabled. Please enable Javascript and then reload this page. Don\'t worry, you can turn it back off when you\'re done.'); $interval = STATUS_INTERVAL * 1000; foreach ( $this->blogs as $i => $blog ) { if ( $blog['mode'] == 'init' ) $value = $start; elseif ( $blog['mode'] == 'posts' || $blog['mode'] == 'comments' ) $value = $continue; else $value = $authors; $blogtitle = js_escape( $blog['title'] ); $pdone = isset($blog['posts_done']) ? (int) $blog['posts_done'] : 0; $cdone = isset($blog['comments_done']) ? (int) $blog['comments_done'] : 0; $init .= "blogs[$i]=new blog($i,'$blogtitle','{$blog['mode']}'," . $this->get_js_status($i) . ');'; $pstat = "
     
    $pdone/{$blog['total_posts']}
    "; $cstat = "
     
    $cdone/{$blog['total_comments']}
    "; $rows .= "$blogtitle{$blog['host']}$pstat$cstat\n"; } echo "

    $title

    \n$rows
    $name$url$posts$comments$action
    "; echo " \n"; } // Handy function for stopping the script after a number of seconds. function have_time() { global $importer_started; if ( time() - $importer_started > MAX_EXECUTION_TIME ) die('continue'); return true; } function get_total_results($type, $host) { $headers = array( "GET /feeds/$type/default?max-results=1&start-index=2 HTTP/1.0", "Host: $host", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( $host ); if ( ! $sock ) return; $response = $this->_txrx( $sock, $request ); $response = $this->parse_response( $response ); $parser = xml_parser_create(); xml_parse_into_struct($parser, $response['body'], $struct, $index); xml_parser_free($parser); $total_results = $struct[$index['OPENSEARCH:TOTALRESULTS'][0]]['value']; return (int) $total_results; } function import_blog($blogID) { global $importing_blog; $importing_blog = $blogID; if ( isset($_GET['authors']) ) return print($this->get_author_form()); header('Content-Type: text/plain'); if ( isset($_GET['status']) ) die($this->get_js_status()); if ( isset($_GET['saveauthors']) ) die($this->save_authors()); $blog = $this->blogs[$blogID]; $total_results = $this->get_total_results('posts', $blog['host']); $this->blogs[$importing_blog]['total_posts'] = $total_results; $start_index = $total_results - MAX_RESULTS + 1; if ( isset( $this->blogs[$importing_blog]['posts_start_index'] ) ) $start_index = (int) $this->blogs[$importing_blog]['posts_start_index']; elseif ( $total_results > MAX_RESULTS ) $start_index = $total_results - MAX_RESULTS + 1; else $start_index = 1; // This will be positive until we have finished importing posts if ( $start_index > 0 ) { // Grab all the posts $this->blogs[$importing_blog]['mode'] = 'posts'; $query = "start-index=$start_index&max-results=" . MAX_RESULTS; do { $index = $struct = $entries = array(); $headers = array( "GET /feeds/posts/default?$query HTTP/1.0", "Host: {$blog['host']}", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( $blog['host'] ); if ( ! $sock ) return; // TODO: Error handling $response = $this->_txrx( $sock, $request ); $response = $this->parse_response( $response ); // Extract the entries and send for insertion preg_match_all( '/]*>.*?<\/entry>/s', $response['body'], $matches ); if ( count( $matches[0] ) ) { $entries = array_reverse($matches[0]); foreach ( $entries as $entry ) { $entry = "$entry"; $AtomParser = new AtomParser(); $AtomParser->parse( $entry ); $this->import_post($AtomParser->entry); unset($AtomParser); } } else break; // Get the 'previous' query string which we'll use on the next iteration $query = ''; $links = preg_match_all('/]*)>/', $response['body'], $matches); if ( count( $matches[1] ) ) foreach ( $matches[1] as $match ) if ( preg_match('/rel=.previous./', $match) ) $query = html_entity_decode( preg_replace('/^.*href=[\'"].*\?(.+)[\'"].*$/', '$1', $match) ); if ( $query ) { parse_str($query, $q); $this->blogs[$importing_blog]['posts_start_index'] = (int) $q['start-index']; } else $this->blogs[$importing_blog]['posts_start_index'] = 0; $this->save_vars(); } while ( !empty( $query ) && $this->have_time() ); } $total_results = $this->get_total_results( 'comments', $blog['host'] ); $this->blogs[$importing_blog]['total_comments'] = $total_results; if ( isset( $this->blogs[$importing_blog]['comments_start_index'] ) ) $start_index = (int) $this->blogs[$importing_blog]['comments_start_index']; elseif ( $total_results > MAX_RESULTS ) $start_index = $total_results - MAX_RESULTS + 1; else $start_index = 1; if ( $start_index > 0 ) { // Grab all the comments $this->blogs[$importing_blog]['mode'] = 'comments'; $query = "start-index=$start_index&max-results=" . MAX_RESULTS; do { $index = $struct = $entries = array(); $headers = array( "GET /feeds/comments/default?$query HTTP/1.0", "Host: {$blog['host']}", "Authorization: AuthSub token=\"$this->token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_blogger_sock( $blog['host'] ); if ( ! $sock ) return; // TODO: Error handling $response = $this->_txrx( $sock, $request ); $response = $this->parse_response( $response ); // Extract the comments and send for insertion preg_match_all( '/]*>.*?<\/entry>/s', $response['body'], $matches ); if ( count( $matches[0] ) ) { $entries = array_reverse( $matches[0] ); foreach ( $entries as $entry ) { $entry = "$entry"; $AtomParser = new AtomParser(); $AtomParser->parse( $entry ); $this->import_comment($AtomParser->entry); unset($AtomParser); } } // Get the 'previous' query string which we'll use on the next iteration $query = ''; $links = preg_match_all('/]*)>/', $response['body'], $matches); if ( count( $matches[1] ) ) foreach ( $matches[1] as $match ) if ( preg_match('/rel=.previous./', $match) ) $query = html_entity_decode( preg_replace('/^.*href=[\'"].*\?(.+)[\'"].*$/', '$1', $match) ); parse_str($query, $q); $this->blogs[$importing_blog]['comments_start_index'] = (int) $q['start-index']; $this->save_vars(); } while ( !empty( $query ) && $this->have_time() ); } $this->blogs[$importing_blog]['mode'] = 'authors'; $this->save_vars(); if ( !$this->blogs[$importing_blog]['posts_done'] && !$this->blogs[$importing_blog]['comments_done'] ) die('nothing'); do_action('import_done', 'blogger'); die('done'); } function convert_date( $date ) { preg_match('#([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\.[0-9]+)?(Z|[\+|\-][0-9]{2,4}){0,1}#', $date, $date_bits); $offset = iso8601_timezone_to_offset( $date_bits[7] ); $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); $timestamp -= $offset; // Convert from Blogger local time to GMT $timestamp += get_option('gmt_offset') * 3600; // Convert from GMT to WP local time return gmdate('Y-m-d H:i:s', $timestamp); } function no_apos( $string ) { return str_replace( ''', "'", $string); } function min_whitespace( $string ) { return preg_replace( '|\s+|', ' ', $string ); } function import_post( $entry ) { global $wpdb, $importing_blog; // The old permalink is all Blogger gives us to link comments to their posts. if ( isset( $entry->draft ) ) $rel = 'self'; else $rel = 'alternate'; foreach ( $entry->links as $link ) { if ( $link['rel'] == $rel ) { $parts = parse_url( $link['href'] ); $entry->old_permalink = $parts['path']; break; } } $post_date = $this->convert_date( $entry->published ); $post_content = trim( addslashes( $this->no_apos( html_entity_decode( $entry->content ) ) ) ); $post_title = trim( addslashes( $this->no_apos( $this->min_whitespace( $entry->title ) ) ) ); $post_status = isset( $entry->draft ) ? 'draft' : 'publish'; // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); // Checks for duplicates if ( isset( $this->blogs[$importing_blog]['posts'][$entry->old_permalink] ) || post_exists( $post_title, $post_content, $post_date ) ) { ++$this->blogs[$importing_blog]['posts_skipped']; } else { $post = compact('post_date', 'post_content', 'post_title', 'post_status'); $post_id = wp_insert_post($post); wp_create_categories( array_map( 'addslashes', $entry->categories ), $post_id ); $author = $this->no_apos( strip_tags( $entry->author ) ); add_post_meta( $post_id, 'blogger_blog', $this->blogs[$importing_blog]['host'], true ); add_post_meta( $post_id, 'blogger_author', $author, true ); add_post_meta( $post_id, 'blogger_permalink', $entry->old_permalink, true ); $this->blogs[$importing_blog]['posts'][$entry->old_permalink] = $post_id; ++$this->blogs[$importing_blog]['posts_done']; } $this->save_vars(); } function import_comment( $entry ) { global $importing_blog; // Drop the #fragment and we have the comment's old post permalink. foreach ( $entry->links as $link ) { if ( $link['rel'] == 'alternate' ) { $parts = parse_url( $link['href'] ); $entry->old_permalink = $parts['fragment']; $entry->old_post_permalink = $parts['path']; break; } } $comment_post_ID = (int) $this->blogs[$importing_blog]['posts'][$entry->old_post_permalink]; preg_match('#(.+?).*(?:\(.+?))?#', $entry->author, $matches); $comment_author = addslashes( $this->no_apos( strip_tags( (string) $matches[1] ) ) ); $comment_author_url = addslashes( $this->no_apos( strip_tags( (string) $matches[2] ) ) ); $comment_date = $this->convert_date( $entry->updated ); $comment_content = addslashes( $this->no_apos( html_entity_decode( $entry->content ) ) ); // Clean up content $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); $comment_content = str_replace('
    ', '
    ', $comment_content); $comment_content = str_replace('
    ', '
    ', $comment_content); // Checks for duplicates if ( isset( $this->blogs[$importing_blog]['comments'][$entry->old_permalink] ) || comment_exists( $comment_author, $comment_date ) ) { ++$this->blogs[$importing_blog]['comments_skipped']; } else { $comment = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_date', 'comment_content'); $comment_id = wp_insert_comment($comment); $this->blogs[$importing_blog]['comments'][$entry->old_permalink] = $comment_id; ++$this->blogs[$importing_blog]['comments_done']; } $this->save_vars(); } function get_js_status($blog = false) { global $importing_blog; if ( $blog == false ) $blog = $this->blogs[$importing_blog]; else $blog = $this->blogs[$blog]; $p1 = isset( $blog['posts_done'] ) ? (int) $blog['posts_done'] : 0; $p2 = isset( $blog['total_posts'] ) ? (int) $blog['total_posts'] : 0; $c1 = isset( $blog['comments_done'] ) ? (int) $blog['comments_done'] : 0; $c2 = isset( $blog['total_comments'] ) ? (int) $blog['total_comments'] : 0; return "{p1:$p1,p2:$p2,c1:$c1,c2:$c2}"; } function get_author_form($blog = false) { global $importing_blog, $wpdb, $current_user; if ( $blog == false ) $blog = & $this->blogs[$importing_blog]; else $blog = & $this->blogs[$blog]; if ( !isset( $blog['authors'] ) ) { $post_ids = array_values($blog['posts']); $authors = (array) $wpdb->get_col("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = 'blogger_author' AND post_id IN (" . join( ',', $post_ids ) . ")"); $blog['authors'] = array_map(null, $authors, array_fill(0, count($authors), $current_user->ID)); $this->save_vars(); } $directions = __('All posts were imported with the current user as author. Use this form to move each Blogger user\'s posts to a different WordPress user. You may add users and then return to this page and complete the user mapping. This form may be used as many times as you like until you activate the "Restart" function below.'); $heading = __('Author mapping'); $blogtitle = "{$blog['title']} ({$blog['host']})"; $mapthis = __('Blogger username'); $tothis = __('WordPress login'); $submit = js_escape( __('Save Changes »') ); foreach ( $blog['authors'] as $i => $author ) $rows .= ""; return "

    $heading

    $blogtitle

    $directions

    $rows
    $mapthis$tothis
    "; } function get_user_options($current) { global $wpdb, $importer_users; if ( ! isset( $importer_users ) ) $importer_users = (array) get_users_of_blog(); foreach ( $importer_users as $user ) { $sel = ( $user->user_id == $current ) ? " selected='selected'" : ''; $options .= ""; } return $options; } function save_authors() { global $importing_blog, $wpdb; $authors = (array) $_POST['authors']; $host = $this->blogs[$importing_blog]['host']; // Get an array of posts => authors $post_ids = (array) $wpdb->get_col("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'blogger_blog' AND meta_value = '$host'"); $post_ids = join( ',', $post_ids ); $results = (array) $wpdb->get_results("SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'blogger_author' AND post_id IN ($post_ids)"); foreach ( $results as $row ) $authors_posts[$row->post_id] = $row->meta_value; foreach ( $authors as $author => $user_id ) { $user_id = (int) $user_id; // Skip authors that haven't been changed if ( $user_id == $this->blogs[$importing_blog]['authors'][$author][1] ) continue; // Get a list of the selected author's posts $post_ids = (array) array_keys( $authors_posts, $this->blogs[$importing_blog]['authors'][$author][0] ); $post_ids = join( ',', $post_ids); $wpdb->query("UPDATE $wpdb->posts SET post_author = $user_id WHERE id IN ($post_ids)"); $this->blogs[$importing_blog]['authors'][$author][1] = $user_id; } $this->save_vars(); wp_redirect('edit.php'); } function _get_auth_sock() { // Connect to https://www.google.com if ( !$sock = @ fsockopen('ssl://www.google.com', 443, $errno, $errstr) ) { $this->uh_oh( __('Could not connect to https://www.google.com'), __('There was a problem opening a secure connection to Google. This is what went wrong:'), "$errstr ($errno)" ); return false; } return $sock; } function _get_blogger_sock($host = 'www2.blogger.com') { if ( !$sock = @ fsockopen($host, 80, $errno, $errstr) ) { $this->uh_oh( sprintf( __('Could not connect to %s'), $host ), __('There was a problem opening a connection to Blogger. This is what went wrong:'), "$errstr ($errno)" ); return false; } return $sock; } function _txrx( $sock, $request ) { fwrite( $sock, $request ); while ( ! feof( $sock ) ) $response .= @ fread ( $sock, 8192 ); fclose( $sock ); return $response; } function revoke($token) { $headers = array( "GET /accounts/AuthSubRevokeToken HTTP/1.0", "Authorization: AuthSub token=\"$token\"" ); $request = join( "\r\n", $headers ) . "\r\n\r\n"; $sock = $this->_get_auth_sock( ); if ( ! $sock ) return false; $this->_txrx( $sock, $request ); } function restart() { global $wpdb; $options = get_option( 'blogger_importer' ); if ( isset( $options['token'] ) ) $this->revoke( $options['token'] ); delete_option('blogger_importer'); $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_key = 'blogger_author'"); wp_redirect('?import=blogger'); } // Returns associative array of code, header, cookies, body. Based on code from php.net. function parse_response($this_response) { // Split response into header and body sections list($response_headers, $response_body) = explode("\r\n\r\n", $this_response, 2); $response_header_lines = explode("\r\n", $response_headers); // First line of headers is the HTTP response code $http_response_line = array_shift($response_header_lines); if(preg_match('@^HTTP/[0-9]\.[0-9] ([0-9]{3})@',$http_response_line, $matches)) { $response_code = $matches[1]; } // put the rest of the headers in an array $response_header_array = array(); foreach($response_header_lines as $header_line) { list($header,$value) = explode(': ', $header_line, 2); $response_header_array[$header] .= $value."\n"; } $cookie_array = array(); $cookies = explode("\n", $response_header_array["Set-Cookie"]); foreach($cookies as $this_cookie) { array_push($cookie_array, "Cookie: ".$this_cookie); } return array("code" => $response_code, "header" => $response_header_array, "cookies" => $cookie_array, "body" => $response_body); } // Step 9: Congratulate the user function congrats() { $blog = (int) $_GET['blog']; echo '

    '.__('Congratulations!').'

    '.__('Now that you have imported your Blogger blog into WordPress, what are you going to do? Here are some suggestions:').'

    • '.__('That was hard work! Take a break.').'
    • '; if ( count($this->import['blogs']) > 1 ) echo '
    • '.__('In case you haven\'t done it already, you can import the posts from your other blogs:'). $this->show_blogs() . '
    • '; if ( $n = count($this->import['blogs'][$blog]['newusers']) ) echo '
    • '.sprintf(__('Go to Authors & Users, where you can modify the new user(s) or delete them. If you want to make all of the imported posts yours, you will be given that option when you delete the new authors.'), 'users.php', '_parent').'
    • '; echo '
    • '.__('For security, click the link below to reset this importer.').'
    • '; echo '
    '; } // Figures out what to do, then does it. function start() { if ( isset($_POST['restart']) ) $this->restart(); $options = get_option('blogger_importer'); if ( is_array($options) ) foreach ( $options as $key => $value ) $this->$key = $value; if ( isset( $_REQUEST['blog'] ) ) { $blog = is_array($_REQUEST['blog']) ? array_shift( array_keys( $_REQUEST['blog'] ) ) : $_REQUEST['blog']; $blog = (int) $blog; $this->import_blog( $blog ); } elseif ( isset($_GET['token']) ) $this->auth(); elseif ( $this->token && $this->token_is_valid() ) $this->show_blogs(); else $this->greet(); $saved = $this->save_vars(); if ( $saved && !isset($_GET['noheader']) ) { $restart = __('Restart'); $message = __('We have saved some information about your Blogger account in your WordPress database. Clearing this information will allow you to start over. Restarting will not affect any posts you have already imported. If you attempt to re-import a blog, duplicate posts and comments will be skipped.'); $submit = __('Clear account information'); echo "

    $restart

    $message

    "; } } function save_vars() { $vars = get_object_vars($this); update_option( 'blogger_importer', $vars ); return !empty($vars); } function admin_head() { ?> entry = new AtomEntry(); $this->map_attrs_func = create_function('$k,$v', 'return "$k=\"$v\"";'); $this->map_xmlns_func = create_function('$p,$n', '$xd = "xmlns"; if(strlen($n[0])>0) $xd .= ":{$n[0]}"; return "{$xd}=\"{$n[1]}\"";'); } function parse($xml) { global $app_logging; array_unshift($this->ns_contexts, array()); $parser = xml_parser_create_ns(); xml_set_object($parser, $this); xml_set_element_handler($parser, "start_element", "end_element"); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); xml_set_character_data_handler($parser, "cdata"); xml_set_default_handler($parser, "_default"); xml_set_start_namespace_decl_handler($parser, "start_ns"); xml_set_end_namespace_decl_handler($parser, "end_ns"); $contents = ""; xml_parse($parser, $xml); xml_parser_free($parser); return true; } function start_element($parser, $name, $attrs) { $tag = array_pop(split(":", $name)); array_unshift($this->ns_contexts, $this->ns_decls); $this->depth++; if(!empty($this->in_content)) { $attrs_prefix = array(); // resolve prefixes for attributes foreach($attrs as $key => $value) { $attrs_prefix[$this->ns_to_prefix($key)] = $this->xml_escape($value); } $attrs_str = join(' ', array_map($this->map_attrs_func, array_keys($attrs_prefix), array_values($attrs_prefix))); if(strlen($attrs_str) > 0) { $attrs_str = " " . $attrs_str; } $xmlns_str = join(' ', array_map($this->map_xmlns_func, array_keys($this->ns_contexts[0]), array_values($this->ns_contexts[0]))); if(strlen($xmlns_str) > 0) { $xmlns_str = " " . $xmlns_str; } // handle self-closing tags (case: a new child found right-away, no text node) if(count($this->in_content) == 2) { array_push($this->in_content, ">"); } array_push($this->in_content, "<". $this->ns_to_prefix($name) ."{$xmlns_str}{$attrs_str}"); } else if(in_array($tag, $this->ATOM_CONTENT_ELEMENTS) || in_array($tag, $this->ATOM_SIMPLE_ELEMENTS)) { $this->in_content = array(); $this->is_xhtml = $attrs['type'] == 'xhtml'; array_push($this->in_content, array($tag,$this->depth)); } else if($tag == 'link') { array_push($this->entry->links, $attrs); } else if($tag == 'category') { array_push($this->entry->categories, $attrs['term']); } $this->ns_decls = array(); } function end_element($parser, $name) { $tag = array_pop(split(":", $name)); if(!empty($this->in_content)) { if($this->in_content[0][0] == $tag && $this->in_content[0][1] == $this->depth) { array_shift($this->in_content); if($this->is_xhtml) { $this->in_content = array_slice($this->in_content, 2, count($this->in_content)-3); } $this->entry->$tag = join('',$this->in_content); $this->in_content = array(); } else { $endtag = $this->ns_to_prefix($name); if (strpos($this->in_content[count($this->in_content)-1], '<' . $endtag) != false) { array_push($this->in_content, "/>"); } else { array_push($this->in_content, ""); } } } array_shift($this->ns_contexts); #print str_repeat(" ", $this->depth * $this->indent) . "end_element('$name')" ."\n"; $this->depth--; } function start_ns($parser, $prefix, $uri) { #print str_repeat(" ", $this->depth * $this->indent) . "starting: " . $prefix . ":" . $uri . "\n"; array_push($this->ns_decls, array($prefix,$uri)); } function end_ns($parser, $prefix) { #print str_repeat(" ", $this->depth * $this->indent) . "ending: #" . $prefix . "#\n"; } function cdata($parser, $data) { #print str_repeat(" ", $this->depth * $this->indent) . "data: #" . $data . "#\n"; if(!empty($this->in_content)) { // handle self-closing tags (case: text node found, need to close element started) if (strpos($this->in_content[count($this->in_content)-1], '<') != false) { array_push($this->in_content, ">"); } array_push($this->in_content, $this->xml_escape($data)); } } function _default($parser, $data) { # when does this gets called? } function ns_to_prefix($qname) { $components = split(":", $qname); $name = array_pop($components); if(!empty($components)) { $ns = join(":",$components); foreach($this->ns_contexts as $context) { foreach($context as $mapping) { if($mapping[1] == $ns && strlen($mapping[0]) > 0) { return "$mapping[0]:$name"; } } } } return $name; } function xml_escape($string) { return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $string ); } } ?> >wordpress/wp-admin/import/.svn/text-base/blogware.php.svn-baseY'; echo '

    '.__('Import Blogware').'

    '; } function footer() { echo ''; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! This importer allows you to extract posts from Blogware XML export file into your blog. Pick a Blogware file to upload and click Import.').'

    '; wp_import_upload_form("admin.php?import=blogware&step=1"); echo '
    '; } function import_posts() { global $wpdb, $current_user; set_magic_quotes_runtime(0); $importdata = file($this->file); // Read the file into an array $importdata = implode('', $importdata); // squish it $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata); preg_match_all('|(]+>(.*?))|is', $importdata, $posts); $posts = $posts[1]; unset($importdata); echo '
      '; foreach ($posts as $post) { flush(); preg_match('||is', $post, $post_type); $post_type = $post_type[1]; if($post_type == "photo") { preg_match('|(.*?)|is', $post, $post_title); } else { preg_match('|(.*?)|is', $post, $post_title); } $post_title = $wpdb->escape(trim($post_title[1])); preg_match('|(.*?)|is', $post, $post_date); $post_date = strtotime($post_date[1]); $post_date = gmdate('Y-m-d H:i:s', $post_date); preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; $cat_index = 0; foreach ($categories as $category) { $categories[$cat_index] = $wpdb->escape($this->unhtmlentities($category)); $cat_index++; } if(strcasecmp($post_type, "photo") == 0) { preg_match('|(.*?)|is', $post, $post_content); $post_content = ''; $post_content = $this->unhtmlentities($post_content); } else { preg_match('|(.*?)|is', $post, $post_content); $post_content = str_replace(array (''), '', trim($post_content[1])); $post_content = $this->unhtmlentities($post_content); } // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = $wpdb->escape($post_content); $post_author = $current_user->ID; preg_match('|(.*?)|is', $post, $post_status); $post_status = trim($post_status[1]); echo '
    1. '; if ($post_id = post_exists($post_title, $post_content, $post_date)) { printf(__('Post %s already exists.'), stripslashes($post_title)); } else { printf(__('Importing post %s...'), stripslashes($post_title)); $postdata = compact('post_author', 'post_date', 'post_content', 'post_title', 'post_status'); $post_id = wp_insert_post($postdata); if (!$post_id) { _e("Couldn't get post ID"); echo '
    2. '; break; } if(0 != count($categories)) wp_create_categories($categories, $post_id); } preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; if ( $comments ) { $comment_post_ID = (int) $post_id; $num_comments = 0; foreach ($comments as $comment) { preg_match('|(.*?)|is', $comment, $comment_content); $comment_content = str_replace(array (''), '', trim($comment_content[1])); $comment_content = $this->unhtmlentities($comment_content); // Clean up content $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = $wpdb->escape($comment_content); preg_match('|(.*?)|is', $comment, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); preg_match('|(.*?)|is', $comment, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); $comment_author_email = NULL; $comment_approved = 1; // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) { echo ' '; printf(__('(%s comments)'), $num_comments); } echo ''; flush(); ob_flush(); } echo '
    '; } function import() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo $file['error']; return; } $this->file = $file['file']; $this->import_posts(); wp_import_cleanup($file['id']); echo '

    '; printf(__('All done. Have fun!'), get_option('home')); echo '

    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : $this->import(); break; } $this->footer(); } function BW_Import() { // Nothing. } } $blogware_import = new BW_Import(); register_importer('blogware', __('Blogware'), __('Import posts from Blogware'), array ($blogware_import, 'dispatch')); ?> >wordpress/wp-admin/import/.svn/text-base/dotclear.php.svn-base[+get_var('SELECT cat_ID FROM '.$wpdb->categories.' WHERE category_nicename="'.$category_nicename.'"'); return $name; } } if(!function_exists('get_comment_count')) { function get_comment_count($post_ID) { global $wpdb; return $wpdb->get_var('SELECT count(*) FROM '.$wpdb->comments.' WHERE comment_post_ID = '.$post_ID); } } if(!function_exists('link_cat_exists')) { function link_cat_exists($catname) { global $wpdb; return $wpdb->get_var('SELECT cat_id FROM '.$wpdb->linkcategories.' WHERE cat_name = "'.$wpdb->escape($catname).'"'); } } if(!function_exists('link_exists')) { function link_exists($linkname) { global $wpdb; return $wpdb->get_var('SELECT link_id FROM '.$wpdb->links.' WHERE link_name = "'.$linkname.'"'); } } /* Identify UTF-8 text Taken from http://www.php.net/manual/fr/function.mb-detect-encoding.php#50087 */ // // utf8 encoding validation developed based on Wikipedia entry at: // http://en.wikipedia.org/wiki/UTF-8 // // Implemented as a recursive descent parser based on a simple state machine // copyright 2005 Maarten Meijer // // This cries out for a C-implementation to be included in PHP core // function valid_1byte($char) { if(!is_int($char)) return false; return ($char & 0x80) == 0x00; } function valid_2byte($char) { if(!is_int($char)) return false; return ($char & 0xE0) == 0xC0; } function valid_3byte($char) { if(!is_int($char)) return false; return ($char & 0xF0) == 0xE0; } function valid_4byte($char) { if(!is_int($char)) return false; return ($char & 0xF8) == 0xF0; } function valid_nextbyte($char) { if(!is_int($char)) return false; return ($char & 0xC0) == 0x80; } function valid_utf8($string) { $len = strlen($string); $i = 0; while( $i < $len ) { $char = ord(substr($string, $i++, 1)); if(valid_1byte($char)) { // continue continue; } else if(valid_2byte($char)) { // check 1 byte if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; } else if(valid_3byte($char)) { // check 2 bytes if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; } else if(valid_4byte($char)) { // check 3 bytes if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; if(!valid_nextbyte(ord(substr($string, $i++, 1)))) return false; } // goto next char } return true; // done } function csc ($s) { if (valid_utf8 ($s)) { return $s; } else { return iconv(get_option ("dccharset"),"UTF-8",$s); } } function textconv ($s) { return csc (preg_replace ('|(?)\s*\n|', ' ', $s)); } /** The Main Importer Class **/ class Dotclear_Import { function header() { echo '
    '; echo '

    '.__('Import DotClear').'

    '; echo '

    '.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'

    '; } function footer() { echo '
    '; } function greet() { echo '

    '.__('Howdy! This importer allows you to extract posts from a DotClear database into your blog. Mileage may vary.').'

    '; echo '

    '.__('Your DotClear Configuration settings are as follows:').'

    '; echo '
    '; wp_nonce_field('import-dotclear'); $this->db_form(); echo '

    '; echo '
    '; } function get_dc_cats() { global $wpdb; // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Categories return $dcdb->get_results('SELECT * FROM '.$dbprefix.'categorie', ARRAY_A); } function get_dc_users() { global $wpdb; // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Users return $dcdb->get_results('SELECT * FROM '.$dbprefix.'user', ARRAY_A); } function get_dc_posts() { // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Posts return $dcdb->get_results('SELECT '.$dbprefix.'post.*, '.$dbprefix.'categorie.cat_libelle_url AS post_cat_name FROM '.$dbprefix.'post INNER JOIN '.$dbprefix.'categorie ON '.$dbprefix.'post.cat_id = '.$dbprefix.'categorie.cat_id', ARRAY_A); } function get_dc_comments() { global $wpdb; // General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); // Get Comments return $dcdb->get_results('SELECT * FROM '.$dbprefix.'comment', ARRAY_A); } function get_dc_links() { //General Housekeeping $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); set_magic_quotes_runtime(0); $dbprefix = get_option('dcdbprefix'); return $dcdb->get_results('SELECT * FROM '.$dbprefix.'link ORDER BY position', ARRAY_A); } function cat2wp($categories='') { // General Housekeeping global $wpdb; $count = 0; $dccat2wpcat = array(); // Do the Magic if(is_array($categories)) { echo '

    '.__('Importing Categories...').'

    '; foreach ($categories as $category) { $count++; extract($category); // Make Nice Variables $name = $wpdb->escape($cat_libelle_url); $title = $wpdb->escape(csc ($cat_libelle)); $desc = $wpdb->escape(csc ($cat_desc)); if($cinfo = category_exists($name)) { $ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title, 'category_description' => $desc)); } else { $ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title, 'category_description' => $desc)); } $dccat2wpcat[$id] = $ret_id; } // Store category translation for future use add_option('dccat2wpcat',$dccat2wpcat); echo '

    '.sprintf(__('Done! %1$s categories imported.'), $count).'

    '; return true; } echo __('No Categories to Import!'); return false; } function users2wp($users='') { // General Housekeeping global $wpdb; $count = 0; $dcid2wpid = array(); // Midnight Mojo if(is_array($users)) { echo '

    '.__('Importing Users...').'

    '; foreach($users as $user) { $count++; extract($user); // Make Nice Variables $name = $wpdb->escape(csc ($name)); $RealName = $wpdb->escape(csc ($user_pseudo)); if($uinfo = get_userdatabylogin($name)) { $ret_id = wp_insert_user(array( 'ID' => $uinfo->ID, 'user_login' => $user_id, 'user_nicename' => $Realname, 'user_email' => $user_email, 'user_url' => 'http://', 'display_name' => $Realname) ); } else { $ret_id = wp_insert_user(array( 'user_login' => $user_id, 'user_nicename' => csc ($user_pseudo), 'user_email' => $user_email, 'user_url' => 'http://', 'display_name' => $Realname) ); } $dcid2wpid[$user_id] = $ret_id; // Set DotClear-to-WordPress permissions translation // Update Usermeta Data $user = new WP_User($ret_id); $wp_perms = $user_level + 1; if(10 == $wp_perms) { $user->set_role('administrator'); } else if(9 == $wp_perms) { $user->set_role('editor'); } else if(5 <= $wp_perms) { $user->set_role('editor'); } else if(4 <= $wp_perms) { $user->set_role('author'); } else if(3 <= $wp_perms) { $user->set_role('contributor'); } else if(2 <= $wp_perms) { $user->set_role('contributor'); } else { $user->set_role('subscriber'); } update_usermeta( $ret_id, 'wp_user_level', $wp_perms); update_usermeta( $ret_id, 'rich_editing', 'false'); update_usermeta( $ret_id, 'first_name', csc ($user_prenom)); update_usermeta( $ret_id, 'last_name', csc ($user_nom)); }// End foreach($users as $user) // Store id translation array for future use add_option('dcid2wpid',$dcid2wpid); echo '

    '.sprintf(__('Done! %1$s users imported.'), $count).'

    '; return true; }// End if(is_array($users) echo __('No Users to Import!'); return false; }// End function user2wp() function posts2wp($posts='') { // General Housekeeping global $wpdb; $count = 0; $dcposts2wpposts = array(); $cats = array(); // Do the Magic if(is_array($posts)) { echo '

    '.__('Importing Posts...').'

    '; foreach($posts as $post) { $count++; extract($post); // Set DotClear-to-WordPress status translation $stattrans = array(0 => 'draft', 1 => 'publish'); $comment_status_map = array (0 => 'closed', 1 => 'open'); //Can we do this more efficiently? $uinfo = ( get_userdatabylogin( $user_id ) ) ? get_userdatabylogin( $user_id ) : 1; $authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ; $Title = $wpdb->escape(csc ($post_titre)); $post_content = textconv ($post_content); $post_excerpt = ""; if ($post_chapo != "") { $post_excerpt = textconv ($post_chapo); $post_content = $post_excerpt ."\n\n".$post_content; } $post_excerpt = $wpdb->escape ($post_excerpt); $post_content = $wpdb->escape ($post_content); $post_status = $stattrans[$post_pub]; // Import Post data into WordPress if($pinfo = post_exists($Title,$post_content)) { $ret_id = wp_insert_post(array( 'ID' => $pinfo, 'post_author' => $authorid, 'post_date' => $post_dt, 'post_date_gmt' => $post_dt, 'post_modified' => $post_upddt, 'post_modified_gmt' => $post_upddt, 'post_title' => $Title, 'post_content' => $post_content, 'post_excerpt' => $post_excerpt, 'post_status' => $post_status, 'post_name' => $post_titre_url, 'comment_status' => $comment_status_map[$post_open_comment], 'ping_status' => $comment_status_map[$post_open_tb], 'comment_count' => $post_nb_comment + $post_nb_trackback) ); } else { $ret_id = wp_insert_post(array( 'post_author' => $authorid, 'post_date' => $post_dt, 'post_date_gmt' => $post_dt, 'post_modified' => $post_modified_gmt, 'post_modified_gmt' => $post_modified_gmt, 'post_title' => $Title, 'post_content' => $post_content, 'post_excerpt' => $post_excerpt, 'post_status' => $post_status, 'post_name' => $post_titre_url, 'comment_status' => $comment_status_map[$post_open_comment], 'ping_status' => $comment_status_map[$post_open_tb], 'comment_count' => $post_nb_comment + $post_nb_trackback) ); } $dcposts2wpposts[$post_id] = $ret_id; // Make Post-to-Category associations $cats = array(); if($cat1 = get_catbynicename($post_cat_name)) { $cats[1] = $cat1; } if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); } } } // Store ID translation for later use add_option('dcposts2wpposts',$dcposts2wpposts); echo '

    '.sprintf(__('Done! %1$s posts imported.'), $count).'

    '; return true; } function comments2wp($comments='') { // General Housekeeping global $wpdb; $count = 0; $dccm2wpcm = array(); $postarr = get_option('dcposts2wpposts'); // Magic Mojo if(is_array($comments)) { echo '

    '.__('Importing Comments...').'

    '; foreach($comments as $comment) { $count++; extract($comment); // WordPressify Data $comment_ID = (int) ltrim($comment_id, '0'); $comment_post_ID = (int) $postarr[$post_id]; $comment_approved = "$comment_pub"; $name = $wpdb->escape(csc ($comment_auteur)); $email = $wpdb->escape($comment_email); $web = "http://".$wpdb->escape($comment_site); $message = $wpdb->escape(textconv ($comment_content)); if($cinfo = comment_exists($name, $comment_dt)) { // Update comments $ret_id = wp_update_comment(array( 'comment_ID' => $cinfo, 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_author_IP' => $comment_ip, 'comment_date' => $comment_dt, 'comment_date_gmt' => $comment_dt, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } else { // Insert comments $ret_id = wp_insert_comment(array( 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_author_IP' => $comment_ip, 'comment_date' => $comment_dt, 'comment_date_gmt' => $comment_dt, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } $dccm2wpcm[$comment_ID] = $ret_id; } // Store Comment ID translation for future use add_option('dccm2wpcm', $dccm2wpcm); // Associate newly formed categories with posts get_comment_count($ret_id); echo '

    '.sprintf(__('Done! %1$s comments imported.'), $count).'

    '; return true; } echo __('No Comments to Import!'); return false; } function links2wp($links='') { // General Housekeeping global $wpdb; $count = 0; // Deal with the links if(is_array($links)) { echo '

    '.__('Importing Links...').'

    '; foreach($links as $link) { $count++; extract($link); if ($title != "") { if ($cinfo = link_cat_exists (csc ($title))) { $category = $cinfo; } else { //??????????????? $cat_ident = $wpdb->get_col("SELECT cat_ID from $wpdb->categories WHERE cat_name = ''"); // $wpdb->insert ("INSERT INTO $wpdb->link2cat (cat_name) VALUES ('". // $wpdb->escape (csc ($title))."')", $wpdb->linkcategories, ); $category = 0;//$wpdb->insert_id; } } else { $linkname = $wpdb->escape(csc ($label)); $description = $wpdb->escape(csc ($title)); if($linfo = link_exists($linkname)) { $ret_id = wp_update_link(array( 'link_id' => $linfo, 'link_url' => $href, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description) ); } else { $ret_id = wp_insert_link(array( 'link_url' => $url, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description) ); } $dclinks2wplinks[$link_id] = $ret_id; } } add_option('dclinks2wplinks',$dclinks2wplinks); echo '

    '; printf(__('Done! %s links or link categories imported'), $count); echo '

    '; return true; } echo __('No Links to Import!'); return false; } function import_categories() { // Category Import $cats = $this->get_dc_cats(); $this->cat2wp($cats); add_option('dc_cats', $cats); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Users'))); echo '
    '; } function import_users() { // User Import $users = $this->get_dc_users(); $this->users2wp($users); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Posts'))); echo '
    '; } function import_posts() { // Post Import $posts = $this->get_dc_posts(); $this->posts2wp($posts); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Comments'))); echo '
    '; } function import_comments() { // Comment Import $comments = $this->get_dc_comments(); $this->comments2wp($comments); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Import Links'))); echo '
    '; } function import_links() { //Link Import $links = $this->get_dc_links(); $this->links2wp($links); add_option('dc_links', $links); echo '
    '; wp_nonce_field('import-dotclear'); printf('', attribute_escape(__('Finish'))); echo '
    '; } function cleanup_dcimport() { delete_option('dcdbprefix'); delete_option('dc_cats'); delete_option('dcid2wpid'); delete_option('dccat2wpcat'); delete_option('dcposts2wpposts'); delete_option('dccm2wpcm'); delete_option('dclinks2wplinks'); delete_option('dcuser'); delete_option('dcpass'); delete_option('dcname'); delete_option('dchost'); delete_option('dccharset'); $this->tips(); } function tips() { echo '

    '.__('Welcome to WordPress. We hope (and expect!) that you will find this platform incredibly rewarding! As a new WordPress user coming from DotClear, there are some things that we would like to point out. Hopefully, they will help your transition go as smoothly as possible.').'

    '; echo '

    '.__('Users').'

    '; echo '

    '.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password. Forget it. You didn\'t have that login in DotClear, why should you have it here? Instead we have taken care to import all of your users into our system. Unfortunately there is one downside. Because both WordPress and DotClear uses a strong encryption hash with passwords, it is impossible to decrypt it and we are forced to assign temporary passwords to all your users. Every user has the same username, but their passwords are reset to password123. So Login and change it.'), '/wp-login.php').'

    '; echo '

    '.__('Preserving Authors').'

    '; echo '

    '.__('Secondly, we have attempted to preserve post authors. If you are the only author or contributor to your blog, then you are safe. In most cases, we are successful in this preservation endeavor. However, if we cannot ascertain the name of the writer due to discrepancies between database tables, we assign it to you, the administrative user.').'

    '; echo '

    '.__('Textile').'

    '; echo '

    '.__('Also, since you\'re coming from DotClear, you probably have been using Textile to format your comments and posts. If this is the case, we recommend downloading and installing Textile for WordPress. Trust me... You\'ll want it.').'

    '; echo '

    '.__('WordPress Resources').'

    '; echo '

    '.__('Finally, there are numerous WordPress resources around the internet. Some of them are:').'

    '; echo ''; echo '

    '.sprintf(__('That\'s it! What are you waiting for? Go login!'), '../wp-login.php').'

    '; } function db_form() { echo ''; printf('', __('DotClear Database User:')); printf('', __('DotClear Database Password:')); printf('', __('DotClear Database Name:')); printf('', __('DotClear Database Host:')); printf('', __('DotClear Table prefix:')); printf('', __('Originating character set:')); echo '
    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); if ( $step > 0 ) { check_admin_referer('import-dotclear'); if($_POST['dbuser']) { if(get_option('dcuser')) delete_option('dcuser'); add_option('dcuser', sanitize_user($_POST['dbuser'], true)); } if($_POST['dbpass']) { if(get_option('dcpass')) delete_option('dcpass'); add_option('dcpass', sanitize_user($_POST['dbpass'], true)); } if($_POST['dbname']) { if(get_option('dcname')) delete_option('dcname'); add_option('dcname', sanitize_user($_POST['dbname'], true)); } if($_POST['dbhost']) { if(get_option('dchost')) delete_option('dchost'); add_option('dchost', sanitize_user($_POST['dbhost'], true)); } if($_POST['dccharset']) { if(get_option('dccharset')) delete_option('dccharset'); add_option('dccharset', sanitize_user($_POST['dccharset'], true)); } if($_POST['dbprefix']) { if(get_option('dcdbprefix')) delete_option('dcdbprefix'); add_option('dcdbprefix', sanitize_user($_POST['dbprefix'], true)); } } switch ($step) { default: case 0 : $this->greet(); break; case 1 : $this->import_categories(); break; case 2 : $this->import_users(); break; case 3 : $this->import_posts(); break; case 4 : $this->import_comments(); break; case 5 : $this->import_links(); break; case 6 : $this->cleanup_dcimport(); break; } $this->footer(); } function Dotclear_Import() { // Nothing. } } $dc_import = new Dotclear_Import(); register_importer('dotclear', __('DotClear'), __('Import categories, users, posts, comments, and links from a DotClear blog'), array ($dc_import, 'dispatch')); ?> @wordpress/wp-admin/import/.svn/text-base/greymatter.php.svn-base)7'; echo '

    '.__('Import GreyMatter').'

    '; } function footer() { echo ''; } function greet() { $this->header(); ?>

    • If authors are found not to be in gm-authors.cgi, imports them at level 0.') ?>

     


    so you need to enter the number of the last GM post here.
    (if you don't know that number, just log into your FTP and look it out
    in the entries' folder)") ?>

     

    footer(); } function gm2autobr($string) { // transforms GM's |*| into b2's
    \n $string = str_replace("|*|","
    \n",$string); return($string); } function import() { global $wpdb; $wpvarstoreset = array('gmpath', 'archivespath', 'lastentry'); for ($i=0; $iheader(); ?>

      • escape($userdata[0]); $pass1=$wpdb->escape($userdata[1]); $user_nickname=$wpdb->escape($userdata[0]); $user_email=$wpdb->escape($userdata[2]); $user_url=$wpdb->escape($userdata[3]); $user_joindate=$wpdb->escape($user_joindate); $user_id = username_exists($user_login); if ($user_id) { printf('
      • '.__('user %s').''.__('Already exists').'
      • ', "$user_login"); $this->gmnames[$userdata[0]] = $user_id; continue; } $user_info = array("user_login"=>"$user_login", "user_pass"=>"$pass1", "user_nickname"=>"$user_nickname", "user_email"=>"$user_email", "user_url"=>"$user_url", "user_ip"=>"$user_ip", "user_domain"=>"$user_domain", "user_browser"=>"$user_browser", "dateYMDhour"=>"$user_joindate", "user_level"=>"1", "user_idmode"=>"nickname"); $user_id = wp_insert_user($user_info); $this->gmnames[$userdata[0]] = $user_id; printf('
      • '.__('user %s...').' '.__('Done').'
      • ', "$user_login"); } ?>

      • gm2autobr($entry[2]); $postmorecontent=$this->gm2autobr($entry[3]); $post_author=trim($wpdb->escape($postinfo[1])); $post_title=$this->gm2autobr($postinfo[2]); printf('
      • '.__('entry # %s : %s : by %s'), $entryfile, $post_title, $postinfo[1]); $post_title=$wpdb->escape($post_title); $postyear=$postinfo[6]; $postmonth=zeroise($postinfo[4],2); $postday=zeroise($postinfo[5],2); $posthour=zeroise($postinfo[7],2); $postminute=zeroise($postinfo[8],2); $postsecond=zeroise($postinfo[9],2); if (($postinfo[10]=="PM") && ($posthour!="12")) $posthour=$posthour+12; $post_date="$postyear-$postmonth-$postday $posthour:$postminute:$postsecond"; $post_content=$postmaincontent; if (strlen($postmorecontent)>3) $post_content .= "

        ".$postmorecontent; $post_content=$wpdb->escape($post_content); $post_karma=$postinfo[12]; $post_status = 'publish'; //in greymatter, there are no drafts $comment_status = 'open'; $ping_status = 'closed'; if ($post_ID = post_exists($post_title, '', $post_date)) { echo ' '; _e('(already exists)'); } else { //just so that if a post already exists, new users are not created by checkauthor // we'll check the author is registered, or if it's a deleted author $user_id = username_exists($post_author); if (!$user_id) { // if deleted from GM, we register the author as a level 0 user $user_ip="127.0.0.1"; $user_domain="localhost"; $user_browser="server"; $user_joindate="1979-06-06 00:41:00"; $user_login=$wpdb->escape($post_author); $pass1=$wpdb->escape("password"); $user_nickname=$wpdb->escape($post_author); $user_email=$wpdb->escape("user@deleted.com"); $user_url=$wpdb->escape(""); $user_joindate=$wpdb->escape($user_joindate); $user_info = array("user_login"=>$user_login, "user_pass"=>$pass1, "user_nickname"=>$user_nickname, "user_email"=>$user_email, "user_url"=>$user_url, "user_ip"=>$user_ip, "user_domain"=>$user_domain, "user_browser"=>$user_browser, "dateYMDhour"=>$user_joindate, "user_level"=>0, "user_idmode"=>"nickname"); $user_id = wp_insert_user($user_info); $this->gmnames[$postinfo[1]] = $user_id; echo ': '; printf(__('registered deleted user %s at level 0 '), "$user_login"); } if (array_key_exists($postinfo[1], $this->gmnames)) { $post_author = $this->gmnames[$postinfo[1]]; } else { $post_author = $user_id; } $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt'); $post_ID = wp_insert_post($postdata); } $c=count($entry); if ($c>4) { $numAddedComments = 0; $numComments = 0; for ($j=4;$j<$c;$j++) { $entry[$j]=$this->gm2autobr($entry[$j]); $commentinfo=explode("|",$entry[$j]); $comment_post_ID=$post_ID; $comment_author=$wpdb->escape($commentinfo[0]); $comment_author_email=$wpdb->escape($commentinfo[2]); $comment_author_url=$wpdb->escape($commentinfo[3]); $comment_author_IP=$wpdb->escape($commentinfo[1]); $commentyear=$commentinfo[7]; $commentmonth=zeroise($commentinfo[5],2); $commentday=zeroise($commentinfo[6],2); $commenthour=zeroise($commentinfo[8],2); $commentminute=zeroise($commentinfo[9],2); $commentsecond=zeroise($commentinfo[10],2); if (($commentinfo[11]=="PM") && ($commenthour!="12")) $commenthour=$commenthour+12; $comment_date="$commentyear-$commentmonth-$commentday $commenthour:$commentminute:$commentsecond"; $comment_content=$wpdb->escape($commentinfo[12]); if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $numAddedComments++; } $numComments++; } if ($numAddedComments > 0) { echo ': '; printf(__('imported %d comment(s)'), $numAddedComments); } $preExisting = $numComments - numAddedComments; if ($preExisting > 0) { echo ' '; printf(__('ignored %d pre-existing comments'), $preExisting); } } echo '... '.__('Done').'
      • '; } } ?>

     

    footer(); } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; switch ($step) { case 0 : $this->greet(); break; case 1: check_admin_referer('import-greymatter'); $this->import(); break; } } function GM_Import() { // Nothing. } } $gm_import = new GM_Import(); register_importer('greymatter', __('GreyMatter'), __('Import users, posts, and comments from a Greymatter blog'), array ($gm_import, 'dispatch')); ?> Awordpress/wp-admin/import/.svn/text-base/livejournal.php.svn-base'; echo '

    '.__('Import LiveJournal').'

    '; } function footer() { echo ''; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! Upload your LiveJournal XML export file and we’ll import the posts into this blog.').'

    '; echo '

    '.__('Choose a LiveJournal XML file to upload, then click Upload file and import.').'

    '; wp_import_upload_form("admin.php?import=livejournal&step=1"); echo '
    '; } function import_posts() { global $wpdb, $current_user; set_magic_quotes_runtime(0); $importdata = file($this->file); // Read the file into an array $importdata = implode('', $importdata); // squish it $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata); preg_match_all('|(.*?)|is', $importdata, $posts); $posts = $posts[1]; unset($importdata); echo '
      '; foreach ($posts as $post) { preg_match('|(.*?)|is', $post, $post_title); $post_title = $wpdb->escape(trim($post_title[1])); if ( empty($post_title) ) { preg_match('|(.*?)|is', $post, $post_title); $post_title = $wpdb->escape(trim($post_title[1])); } preg_match('|(.*?)|is', $post, $post_date); $post_date = strtotime($post_date[1]); $post_date = gmdate('Y-m-d H:i:s', $post_date); preg_match('|(.*?)|is', $post, $post_content); $post_content = str_replace(array (''), '', trim($post_content[1])); $post_content = $this->unhtmlentities($post_content); // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = str_replace('
      ', '
      ', $post_content); $post_content = $wpdb->escape($post_content); $post_author = $current_user->ID; $post_status = 'publish'; echo '
    1. '; if ($post_id = post_exists($post_title, $post_content, $post_date)) { printf(__('Post %s already exists.'), stripslashes($post_title)); } else { printf(__('Importing post %s...'), stripslashes($post_title)); $postdata = compact('post_author', 'post_date', 'post_content', 'post_title', 'post_status'); $post_id = wp_insert_post($postdata); if (!$post_id) { _e("Couldn't get post ID"); echo '
    2. '; break; } } preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; if ( $comments ) { $comment_post_ID = (int) $post_id; $num_comments = 0; foreach ($comments as $comment) { preg_match('|(.*?)|is', $comment, $comment_content); $comment_content = str_replace(array (''), '', trim($comment_content[1])); $comment_content = $this->unhtmlentities($comment_content); // Clean up content $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = str_replace('
      ', '
      ', $comment_content); $comment_content = $wpdb->escape($comment_content); preg_match('|(.*?)|is', $comment, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); preg_match('|(.*?)|is', $comment, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); preg_match('|(.*?)|is', $comment, $comment_author_email); $comment_author_email = $wpdb->escape(trim($comment_author_email[1])); $comment_approved = 1; // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) { echo ' '; printf(__('(%s comments)'), $num_comments); } echo ''; } echo '
    '; } function import() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo $file['error']; return; } $this->file = $file['file']; $this->import_posts(); wp_import_cleanup($file['id']); echo '

    '; printf(__('All done. Have fun!'), get_option('home')); echo '

    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->import(); break; } $this->footer(); } function LJ_Import() { // Nothing. } } $livejournal_import = new LJ_Import(); register_importer('livejournal', __('LiveJournal'), __('Import posts from a LiveJournal XML export file'), array ($livejournal_import, 'dispatch')); ?> 8wordpress/wp-admin/import/.svn/text-base/mt.php.svn-base;U'; echo '

    '.__('Import Movable Type or TypePad').'

    '; } function footer() { echo ''; } function greet() { $this->header(); ?>

    out of memory error try splitting up the import file into pieces.'); ?>

    footer(); } function users_form($n) { global $wpdb, $testing; $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY ID"); ?> mtnames))) { //a new mt author name is found ++ $this->j; $this->mtnames[$this->j] = $author; //add that new mt author name to an array $user_id = username_exists($this->newauthornames[$this->j]); //check if the new author name defined by the user is a pre-existing wp user if (!$user_id) { //banging my head against the desk now. if ($newauthornames[$this->j] == 'left_blank') { //check if the user does not want to change the authorname $user_id = wp_create_user($author, $pass); $this->newauthornames[$this->j] = $author; //now we have a name, in the place of left_blank. } else { $user_id = wp_create_user($this->newauthornames[$this->j], $pass); } } else { return $user_id; // return pre-existing wp username if it exists } } else { $key = array_search($author, $this->mtnames); //find the array key for $author in the $mtnames array $user_id = username_exists($this->newauthornames[$key]); //use that key to get the value of the author's name from $newauthornames } return $user_id; } function get_entries() { set_magic_quotes_runtime(0); $importdata = file($this->file); // Read the file into an array $importdata = implode('', $importdata); // squish it $importdata = preg_replace("/(\r\n|\n|\r)/", "\n", $importdata); $importdata = preg_replace("/\n--------\n/", "--MT-ENTRY--\n", $importdata); $this->posts = explode("--MT-ENTRY--", $importdata); } function get_mt_authors() { $temp = array (); $i = -1; foreach ($this->posts as $post) { if ('' != trim($post)) { ++ $i; preg_match("|AUTHOR:(.*)|", $post, $thematch); $thematch = trim($thematch[1]); array_push($temp, "$thematch"); //store the extracted author names in a temporary array } } //we need to find unique values of author names, while preserving the order, so this function emulates the unique_value(); php function, without the sorting. $authors[0] = array_shift($temp); $y = count($temp) + 1; for ($x = 1; $x < $y; $x ++) { $next = array_shift($temp); if (!(in_array($next, $authors))) array_push($authors, "$next"); } return $authors; } function get_authors_from_post() { $formnames = array (); $selectnames = array (); foreach ($_POST['user'] as $key => $line) { $newname = trim(stripslashes($line)); if ($newname == '') $newname = 'left_blank'; //passing author names from step 1 to step 2 is accomplished by using POST. left_blank denotes an empty entry in the form. array_push($formnames, "$newname"); } // $formnames is the array with the form entered names foreach ($_POST['userselect'] as $user => $key) { $selected = trim(stripslashes($key)); array_push($selectnames, "$selected"); } $count = count($formnames); for ($i = 0; $i < $count; $i ++) { if ($selectnames[$i] != '#NONE#') { //if no name was selected from the select menu, use the name entered in the form array_push($this->newauthornames, "$selectnames[$i]"); } else { array_push($this->newauthornames, "$formnames[$i]"); } } } function mt_authors_form() { ?>

    admins entries.'); ?>

    italics. For each of these names, you can either pick an author in your WordPress installation from the menu, or enter a name for the author in the textbox.'); ?>

    get_mt_authors(); echo '
      '; echo '
      '; wp_nonce_field('import-mt'); $j = -1; foreach ($authors as $author) { ++ $j; echo '
    1. '.__('Current author:').' '.$author.'
      '.sprintf(__('Create user %1$s or map to existing'), '
      '); $this->users_form($j); echo '
    2. '; } echo ''.'
      '; echo '
      '; echo '
    '; } function select_authors() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { $this->header(); echo '

    '.__('Sorry, there has been an error').'.

    '; echo '

    ' . $file['error'] . '

    '; $this->footer(); return; } $this->file = $file['file']; $this->id = (int) $file['id']; $this->get_entries(); $this->mt_authors_form(); } function process_posts() { global $wpdb; $i = -1; echo "
      "; foreach ($this->posts as $post) { if ('' != trim($post)) { ++ $i; unset ($post_categories); // Take the pings out first preg_match("|(-----\n\nPING:.*)|s", $post, $pings); $post = preg_replace("|(-----\n\nPING:.*)|s", '', $post); // Then take the comments out preg_match("|(-----\nCOMMENT:.*)|s", $post, $comments); $post = preg_replace("|(-----\nCOMMENT:.*)|s", '', $post); // We ignore the keywords $post = preg_replace("|(-----\nKEYWORDS:.*)|s", '', $post); // We want the excerpt preg_match("|-----\nEXCERPT:(.*)|s", $post, $excerpt); $post_excerpt = $wpdb->escape(trim($excerpt[1])); $post = preg_replace("|(-----\nEXCERPT:.*)|s", '', $post); // We're going to put extended body into main body with a more tag preg_match("|-----\nEXTENDED BODY:(.*)|s", $post, $extended); $extended = trim($extended[1]); if ('' != $extended) $extended = "\n\n$extended"; $post = preg_replace("|(-----\nEXTENDED BODY:.*)|s", '', $post); // Now for the main body preg_match("|-----\nBODY:(.*)|s", $post, $body); $body = trim($body[1]); $post_content = $wpdb->escape($body.$extended); $post = preg_replace("|(-----\nBODY:.*)|s", '', $post); // Grab the metadata from what's left $metadata = explode("\n", $post); foreach ($metadata as $line) { preg_match("/^(.*?):(.*)/", $line, $token); $key = trim($token[1]); $value = trim($token[2]); // Now we decide what it is and what to do with it switch ($key) { case '' : break; case 'AUTHOR' : $post_author = $value; break; case 'TITLE' : $post_title = $wpdb->escape($value); break; case 'STATUS' : // "publish" and "draft" enumeration items match up; no change required $post_status = $value; if (empty ($post_status)) $post_status = 'publish'; break; case 'ALLOW COMMENTS' : $post_allow_comments = $value; if ($post_allow_comments == 1) { $comment_status = 'open'; } else { $comment_status = 'closed'; } break; case 'CONVERT BREAKS' : $post_convert_breaks = $value; break; case 'ALLOW PINGS' : $ping_status = trim($meta[2][0]); if ($ping_status == 1) { $ping_status = 'open'; } else { $ping_status = 'closed'; } break; case 'PRIMARY CATEGORY' : if (! empty ($value) ) $post_categories[] = $wpdb->escape($value); break; case 'CATEGORY' : if (! empty ($value) ) $post_categories[] = $wpdb->escape($value); break; case 'DATE' : $post_modified = strtotime($value); $post_modified = date('Y-m-d H:i:s', $post_modified); $post_modified_gmt = get_gmt_from_date("$post_modified"); $post_date = $post_modified; $post_date_gmt = $post_modified_gmt; break; default : // echo "\n$key: $value"; break; } // end switch } // End foreach // Let's check to see if it's in already if ($post_id = post_exists($post_title, '', $post_date)) { echo '
    1. '; printf(__('Post %s already exists.'), stripslashes($post_title)); } else { echo '
    2. '; printf(__('Importing post %s...'), stripslashes($post_title)); $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt'); $post_id = wp_insert_post($postdata); // Add categories. if (0 != count($post_categories)) { wp_create_categories($post_categories, $post_id); } } $comment_post_ID = (int) $post_id; $comment_approved = 1; // Now for comments $comments = explode("-----\nCOMMENT:", $comments[0]); $num_comments = 0; foreach ($comments as $comment) { if ('' != trim($comment)) { // Author preg_match("|AUTHOR:(.*)|", $comment, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); $comment = preg_replace('|(\n?AUTHOR:.*)|', '', $comment); preg_match("|EMAIL:(.*)|", $comment, $comment_author_email); $comment_author_email = $wpdb->escape(trim($comment_author_email[1])); $comment = preg_replace('|(\n?EMAIL:.*)|', '', $comment); preg_match("|IP:(.*)|", $comment, $comment_author_IP); $comment_author_IP = trim($comment_author_IP[1]); $comment = preg_replace('|(\n?IP:.*)|', '', $comment); preg_match("|URL:(.*)|", $comment, $comment_author_url); $comment_author_url = $wpdb->escape(trim($comment_author_url[1])); $comment = preg_replace('|(\n?URL:.*)|', '', $comment); preg_match("|DATE:(.*)|", $comment, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); $comment = preg_replace('|(\n?DATE:.*)|', '', $comment); $comment_content = $wpdb->escape(trim($comment)); $comment_content = str_replace('-----', '', $comment_content); // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) printf(' '.__('(%s comments)'), $num_comments); // Finally the pings // fix the double newline on the first one $pings[0] = str_replace("-----\n\n", "-----\n", $pings[0]); $pings = explode("-----\nPING:", $pings[0]); $num_pings = 0; foreach ($pings as $ping) { if ('' != trim($ping)) { // 'Author' preg_match("|BLOG NAME:(.*)|", $ping, $comment_author); $comment_author = $wpdb->escape(trim($comment_author[1])); $ping = preg_replace('|(\n?BLOG NAME:.*)|', '', $ping); preg_match("|IP:(.*)|", $ping, $comment_author_IP); $comment_author_IP = trim($comment_author_IP[1]); $ping = preg_replace('|(\n?IP:.*)|', '', $ping); preg_match("|URL:(.*)|", $ping, $comment_author_url); $comment_author_url = $wpdb->escape(trim($comment_author_url[1])); $ping = preg_replace('|(\n?URL:.*)|', '', $ping); preg_match("|DATE:(.*)|", $ping, $comment_date); $comment_date = trim($comment_date[1]); $comment_date = date('Y-m-d H:i:s', strtotime($comment_date)); $ping = preg_replace('|(\n?DATE:.*)|', '', $ping); preg_match("|TITLE:(.*)|", $ping, $ping_title); $ping_title = $wpdb->escape(trim($ping_title[1])); $ping = preg_replace('|(\n?TITLE:.*)|', '', $ping); $comment_content = $wpdb->escape(trim($ping)); $comment_content = str_replace('-----', '', $comment_content); $comment_content = "$ping_title\n\n$comment_content"; $comment_type = 'trackback'; // Check if it's already there if (!comment_exists($comment_author, $comment_date)) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_type', 'comment_approved'); $commentdata = wp_filter_comment($commentdata); wp_insert_comment($commentdata); $num_pings++; } } } if ( $num_pings ) printf(' '.__('(%s pings)'), $num_pings); echo "
    3. "; } } echo '
    '; wp_import_cleanup($this->id); echo '

    '.sprintf(__('All done. Have fun!'), get_option('home')).'

    '; } function import() { $this->id = (int) $_GET['id']; $this->file = get_attached_file($this->id); $this->get_authors_from_post(); $this->get_entries(); $this->process_posts(); } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->select_authors(); break; case 2: check_admin_referer('import-mt'); $this->import(); break; } } function MT_Import() { // Nothing. } } $mt_import = new MT_Import(); register_importer('mt', __('Movable Type and TypePad'), __('Import posts and comments from a Movable Type or Typepad blog'), array ($mt_import, 'dispatch')); ?>9wordpress/wp-admin/import/.svn/text-base/rss.php.svn-base'; echo '

    '.__('Import RSS').'

    '; } function footer() { echo ''; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! This importer allows you to extract posts from an RSS 2.0 file into your blog. This is useful if you want to import your posts from a system that is not handled by a custom import tool. Pick an RSS file to upload and click Import.').'

    '; wp_import_upload_form("admin.php?import=rss&step=1"); echo '
    '; } function get_posts() { global $wpdb; set_magic_quotes_runtime(0); $datalines = file($this->file); // Read the file into an array $importdata = implode('', $datalines); // squish it $importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata); preg_match_all('|(.*?)|is', $importdata, $this->posts); $this->posts = $this->posts[1]; $index = 0; foreach ($this->posts as $post) { preg_match('|(.*?)|is', $post, $post_title); $post_title = str_replace(array(''), '', $wpdb->escape( trim($post_title[1]) )); preg_match('|(.*?)|is', $post, $post_date_gmt); if ($post_date_gmt) { $post_date_gmt = strtotime($post_date_gmt[1]); } else { // if we don't already have something from pubDate preg_match('|(.*?)|is', $post, $post_date_gmt); $post_date_gmt = preg_replace('|([-+])([0-9]+):([0-9]+)$|', '\1\2\3', $post_date_gmt[1]); $post_date_gmt = str_replace('T', ' ', $post_date_gmt); $post_date_gmt = strtotime($post_date_gmt); } $post_date_gmt = gmdate('Y-m-d H:i:s', $post_date_gmt); $post_date = get_date_from_gmt( $post_date_gmt ); preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; if (!$categories) { preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; } $cat_index = 0; foreach ($categories as $category) { $categories[$cat_index] = $wpdb->escape($this->unhtmlentities($category)); $cat_index++; } preg_match('|(.*?)|is', $post, $guid); if ($guid) $guid = $wpdb->escape(trim($guid[1])); else $guid = ''; preg_match('|(.*?)|is', $post, $post_content); $post_content = str_replace(array (''), '', $wpdb->escape(trim($post_content[1]))); if (!$post_content) { // This is for feeds that put content in description preg_match('|(.*?)|is', $post, $post_content); $post_content = $wpdb->escape($this->unhtmlentities(trim($post_content[1]))); } // Clean up content $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_author = 1; $post_status = 'publish'; $this->posts[$index] = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_status', 'guid', 'categories'); $index++; } } function import_posts() { echo '
      '; foreach ($this->posts as $post) { echo "
    1. ".__('Importing post...'); extract($post); if ($post_id = post_exists($post_title, $post_content, $post_date)) { _e('Post already imported'); } else { $post_id = wp_insert_post($post); if (!$post_id) { _e("Couldn't get post ID"); return; } if (0 != count($categories)) wp_create_categories($categories, $post_id); _e('Done !'); } echo '
    2. '; } echo '
    '; } function import() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo $file['error']; return; } $this->file = $file['file']; $this->get_posts(); $this->import_posts(); wp_import_cleanup($file['id']); echo '

    '; printf(__('All done. Have fun!'), get_option('home')); echo '

    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->import(); break; } $this->footer(); } function RSS_Import() { // Nothing. } } $rss_import = new RSS_Import(); register_importer('rss', __('RSS'), __('Import posts from an RSS feed'), array ($rss_import, 'dispatch')); ?> Awordpress/wp-admin/import/.svn/text-base/textpattern.php.svn-baseMget_var('SELECT cat_ID FROM '.$wpdb->categories.' WHERE category_nicename="'.$category_nicename.'"'); return $name; } } if(!function_exists('get_comment_count')) { function get_comment_count($post_ID) { global $wpdb; return $wpdb->get_var('SELECT count(*) FROM '.$wpdb->comments.' WHERE comment_post_ID = '.$post_ID); } } if(!function_exists('link_exists')) { function link_exists($linkname) { global $wpdb; return $wpdb->get_var('SELECT link_id FROM '.$wpdb->links.' WHERE link_name = "'.$wpdb->escape($linkname).'"'); } } /** The Main Importer Class **/ class Textpattern_Import { function header() { echo '
    '; echo '

    '.__('Import Textpattern').'

    '; echo '

    '.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'

    '; } function footer() { echo '
    '; } function greet() { echo '
    '; echo '

    '.__('Howdy! This imports categories, users, posts, comments, and links from any Textpattern 4.0.2+ into this blog.').'

    '; echo '

    '.__('This has not been tested on previous versions of Textpattern. Mileage may vary.').'

    '; echo '

    '.__('Your Textpattern Configuration settings are as follows:').'

    '; echo '
    '; wp_nonce_field('import-textpattern'); $this->db_form(); echo '

    '; echo '
    '; echo '
    '; } function get_txp_cats() { global $wpdb; // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Categories return $txpdb->get_results('SELECT id, name, title FROM '.$prefix.'txp_category WHERE type = "article"', ARRAY_A); } function get_txp_users() { global $wpdb; // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Users return $txpdb->get_results('SELECT user_id, name, RealName, email, privs FROM '.$prefix.'txp_users', ARRAY_A); } function get_txp_posts() { // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Posts return $txpdb->get_results('SELECT ID, Posted, AuthorID, LastMod, Title, Body, Excerpt, Category1, Category2, Status, Keywords, url_title, comments_count FROM '.$prefix.'textpattern ', ARRAY_A); } function get_txp_comments() { global $wpdb; // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Comments return $txpdb->get_results('SELECT * FROM '.$prefix.'txp_discuss', ARRAY_A); } function get_txp_links() { //General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); return $txpdb->get_results('SELECT id, date, category, url, linkname, description FROM '.$prefix.'txp_link', ARRAY_A); } function cat2wp($categories='') { // General Housekeeping global $wpdb; $count = 0; $txpcat2wpcat = array(); // Do the Magic if(is_array($categories)) { echo '

    '.__('Importing Categories...').'

    '; foreach ($categories as $category) { $count++; extract($category); // Make Nice Variables $name = $wpdb->escape($name); $title = $wpdb->escape($title); if($cinfo = category_exists($name)) { $ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title)); } else { $ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title)); } $txpcat2wpcat[$id] = $ret_id; } // Store category translation for future use add_option('txpcat2wpcat',$txpcat2wpcat); echo '

    '.sprintf(__('Done! %1$s categories imported.'), $count).'

    '; return true; } echo __('No Categories to Import!'); return false; } function users2wp($users='') { // General Housekeeping global $wpdb; $count = 0; $txpid2wpid = array(); // Midnight Mojo if(is_array($users)) { echo '

    '.__('Importing Users...').'

    '; foreach($users as $user) { $count++; extract($user); // Make Nice Variables $name = $wpdb->escape($name); $RealName = $wpdb->escape($RealName); if($uinfo = get_userdatabylogin($name)) { $ret_id = wp_insert_user(array( 'ID' => $uinfo->ID, 'user_login' => $name, 'user_nicename' => $RealName, 'user_email' => $email, 'user_url' => 'http://', 'display_name' => $name) ); } else { $ret_id = wp_insert_user(array( 'user_login' => $name, 'user_nicename' => $RealName, 'user_email' => $email, 'user_url' => 'http://', 'display_name' => $name) ); } $txpid2wpid[$user_id] = $ret_id; // Set Textpattern-to-WordPress permissions translation $transperms = array(1 => '10', 2 => '9', 3 => '5', 4 => '4', 5 => '3', 6 => '2', 7 => '0'); // Update Usermeta Data $user = new WP_User($ret_id); if('10' == $transperms[$privs]) { $user->set_role('administrator'); } if('9' == $transperms[$privs]) { $user->set_role('editor'); } if('5' == $transperms[$privs]) { $user->set_role('editor'); } if('4' == $transperms[$privs]) { $user->set_role('author'); } if('3' == $transperms[$privs]) { $user->set_role('contributor'); } if('2' == $transperms[$privs]) { $user->set_role('contributor'); } if('0' == $transperms[$privs]) { $user->set_role('subscriber'); } update_usermeta( $ret_id, 'wp_user_level', $transperms[$privs] ); update_usermeta( $ret_id, 'rich_editing', 'false'); }// End foreach($users as $user) // Store id translation array for future use add_option('txpid2wpid',$txpid2wpid); echo '

    '.sprintf(__('Done! %1$s users imported.'), $count).'

    '; return true; }// End if(is_array($users) echo __('No Users to Import!'); return false; }// End function user2wp() function posts2wp($posts='') { // General Housekeeping global $wpdb; $count = 0; $txpposts2wpposts = array(); $cats = array(); // Do the Magic if(is_array($posts)) { echo '

    '.__('Importing Posts...').'

    '; foreach($posts as $post) { $count++; extract($post); // Set Textpattern-to-WordPress status translation $stattrans = array(1 => 'draft', 2 => 'private', 3 => 'draft', 4 => 'publish', 5 => 'publish'); //Can we do this more efficiently? $uinfo = ( get_userdatabylogin( $AuthorID ) ) ? get_userdatabylogin( $AuthorID ) : 1; $authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ; $Title = $wpdb->escape($Title); $Body = $wpdb->escape($Body); $Excerpt = $wpdb->escape($Excerpt); $post_status = $stattrans[$Status]; // Import Post data into WordPress if($pinfo = post_exists($Title,$Body)) { $ret_id = wp_insert_post(array( 'ID' => $pinfo, 'post_date' => $Posted, 'post_date_gmt' => $post_date_gmt, 'post_author' => $authorid, 'post_modified' => $LastMod, 'post_modified_gmt' => $post_modified_gmt, 'post_title' => $Title, 'post_content' => $Body, 'post_excerpt' => $Excerpt, 'post_status' => $post_status, 'post_name' => $url_title, 'comment_count' => $comments_count) ); } else { $ret_id = wp_insert_post(array( 'post_date' => $Posted, 'post_date_gmt' => $post_date_gmt, 'post_author' => $authorid, 'post_modified' => $LastMod, 'post_modified_gmt' => $post_modified_gmt, 'post_title' => $Title, 'post_content' => $Body, 'post_excerpt' => $Excerpt, 'post_status' => $post_status, 'post_name' => $url_title, 'comment_count' => $comments_count) ); } $txpposts2wpposts[$ID] = $ret_id; // Make Post-to-Category associations $cats = array(); if($cat1 = get_catbynicename($Category1)) { $cats[1] = $cat1; } if($cat2 = get_catbynicename($Category2)) { $cats[2] = $cat2; } if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); } } } // Store ID translation for later use add_option('txpposts2wpposts',$txpposts2wpposts); echo '

    '.sprintf(__('Done! %1$s posts imported.'), $count).'

    '; return true; } function comments2wp($comments='') { // General Housekeeping global $wpdb; $count = 0; $txpcm2wpcm = array(); $postarr = get_option('txpposts2wpposts'); // Magic Mojo if(is_array($comments)) { echo '

    '.__('Importing Comments...').'

    '; foreach($comments as $comment) { $count++; extract($comment); // WordPressify Data $comment_ID = ltrim($discussid, '0'); $comment_post_ID = $postarr[$parentid]; $comment_approved = (1 == $visible) ? 1 : 0; $name = $wpdb->escape($name); $email = $wpdb->escape($email); $web = $wpdb->escape($web); $message = $wpdb->escape($message); if($cinfo = comment_exists($name, $posted)) { // Update comments $ret_id = wp_update_comment(array( 'comment_ID' => $cinfo, 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_date' => $posted, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } else { // Insert comments $ret_id = wp_insert_comment(array( 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_author_IP' => $ip, 'comment_date' => $posted, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } $txpcm2wpcm[$comment_ID] = $ret_id; } // Store Comment ID translation for future use add_option('txpcm2wpcm', $txpcm2wpcm); // Associate newly formed categories with posts get_comment_count($ret_id); echo '

    '.sprintf(__('Done! %1$s comments imported.'), $count).'

    '; return true; } echo __('No Comments to Import!'); return false; } function links2wp($links='') { // General Housekeeping global $wpdb; $count = 0; // Deal with the links if(is_array($links)) { echo '

    '.__('Importing Links...').'

    '; foreach($links as $link) { $count++; extract($link); // Make nice vars $category = $wpdb->escape($category); $linkname = $wpdb->escape($linkname); $description = $wpdb->escape($description); if($linfo = link_exists($linkname)) { $ret_id = wp_insert_link(array( 'link_id' => $linfo, 'link_url' => $url, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description, 'link_updated' => $date) ); } else { $ret_id = wp_insert_link(array( 'link_url' => $url, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description, 'link_updated' => $date) ); } $txplinks2wplinks[$link_id] = $ret_id; } add_option('txplinks2wplinks',$txplinks2wplinks); echo '

    '; printf(__('Done! %s Links imported'), $count); echo '

    '; return true; } echo __('No Links to Import!'); return false; } function import_categories() { // Category Import $cats = $this->get_txp_cats(); $this->cat2wp($cats); add_option('txp_cats', $cats); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Users'))); echo '
    '; } function import_users() { // User Import $users = $this->get_txp_users(); $this->users2wp($users); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Posts'))); echo '
    '; } function import_posts() { // Post Import $posts = $this->get_txp_posts(); $this->posts2wp($posts); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Comments'))); echo '
    '; } function import_comments() { // Comment Import $comments = $this->get_txp_comments(); $this->comments2wp($comments); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Links'))); echo '
    '; } function import_links() { //Link Import $links = $this->get_txp_links(); $this->links2wp($links); add_option('txp_links', $links); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Finish'))); echo '
    '; } function cleanup_txpimport() { delete_option('tpre'); delete_option('txp_cats'); delete_option('txpid2wpid'); delete_option('txpcat2wpcat'); delete_option('txpposts2wpposts'); delete_option('txpcm2wpcm'); delete_option('txplinks2wplinks'); delete_option('txpuser'); delete_option('txppass'); delete_option('txpname'); delete_option('txphost'); $this->tips(); } function tips() { echo '

    '.__('Welcome to WordPress. We hope (and expect!) that you will find this platform incredibly rewarding! As a new WordPress user coming from Textpattern, there are some things that we would like to point out. Hopefully, they will help your transition go as smoothly as possible.').'

    '; echo '

    '.__('Users').'

    '; echo '

    '.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password. Forget it. You didn\'t have that login in Textpattern, why should you have it here? Instead we have taken care to import all of your users into our system. Unfortunately there is one downside. Because both WordPress and Textpattern uses a strong encryption hash with passwords, it is impossible to decrypt it and we are forced to assign temporary passwords to all your users. Every user has the same username, but their passwords are reset to password123. So Login and change it.'), '/wp-login.php').'

    '; echo '

    '.__('Preserving Authors').'

    '; echo '

    '.__('Secondly, we have attempted to preserve post authors. If you are the only author or contributor to your blog, then you are safe. In most cases, we are successful in this preservation endeavor. However, if we cannot ascertain the name of the writer due to discrepancies between database tables, we assign it to you, the administrative user.').'

    '; echo '

    '.__('Textile').'

    '; echo '

    '.__('Also, since you\'re coming from Textpattern, you probably have been using Textile to format your comments and posts. If this is the case, we recommend downloading and installing Textile for WordPress. Trust me... You\'ll want it.').'

    '; echo '

    '.__('WordPress Resources').'

    '; echo '

    '.__('Finally, there are numerous WordPress resources around the internet. Some of them are:').'

    '; echo ''; echo '

    '.sprintf(__('That\'s it! What are you waiting for? Go login!'), '/wp-login.php').'

    '; } function db_form() { echo ''; printf('', __('Textpattern Database User:')); printf('', __('Textpattern Database Password:')); printf('', __('Textpattern Database Name:')); printf('', __('Textpattern Database Host:')); printf('', __('Textpattern Table prefix (if any):')); echo '
    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); if ( $step > 0 ) { check_admin_referer('import-textpattern'); if($_POST['dbuser']) { if(get_option('txpuser')) delete_option('txpuser'); add_option('txpuser', sanitize_user($_POST['dbuser'], true)); } if($_POST['dbpass']) { if(get_option('txppass')) delete_option('txppass'); add_option('txppass', sanitize_user($_POST['dbpass'], true)); } if($_POST['dbname']) { if(get_option('txpname')) delete_option('txpname'); add_option('txpname', sanitize_user($_POST['dbname'], true)); } if($_POST['dbhost']) { if(get_option('txphost')) delete_option('txphost'); add_option('txphost', sanitize_user($_POST['dbhost'], true)); } if($_POST['dbprefix']) { if(get_option('tpre')) delete_option('tpre'); add_option('tpre', sanitize_user($_POST['dbprefix'])); } } switch ($step) { default: case 0 : $this->greet(); break; case 1 : $this->import_categories(); break; case 2 : $this->import_users(); break; case 3 : $this->import_posts(); break; case 4 : $this->import_comments(); break; case 5 : $this->import_links(); break; case 6 : $this->cleanup_txpimport(); break; } $this->footer(); } function Textpattern_Import() { // Nothing. } } $txp_import = new Textpattern_Import(); register_importer('textpattern', __('Textpattern'), __('Import categories, users, posts, comments, and links from a Textpattern blog'), array ($txp_import, 'dispatch')); ?> ?wordpress/wp-admin/import/.svn/text-base/wordpress.php.svn-base6 XML fragment, [1] => New post ID] var $file; var $id; var $mtnames = array (); var $newauthornames = array (); var $j = -1; function header() { echo '
    '; echo '

    '.__('Import WordPress').'

    '; } function footer() { echo '
    '; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, comments, custom fields, and categories into this blog.').'

    '; echo '

    '.__('Choose a WordPress WXR file to upload, then click Upload file and import.').'

    '; wp_import_upload_form("admin.php?import=wordpress&step=1"); echo '
    '; } function get_tag( $string, $tag ) { global $wpdb; preg_match("|<$tag.*?>(.*?)|is", $string, $return); $return = preg_replace('|^$|s', '$1', $return[1]); $return = $wpdb->escape( trim( $return ) ); return $return; } function users_form($n) { global $wpdb, $testing; $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY ID"); ?> mtnames))) { //a new mt author name is found ++ $this->j; $this->mtnames[$this->j] = $author; //add that new mt author name to an array $user_id = username_exists($this->newauthornames[$this->j]); //check if the new author name defined by the user is a pre-existing wp user if (!$user_id) { //banging my head against the desk now. if ($this->newauthornames[$this->j] == 'left_blank') { //check if the user does not want to change the authorname $user_id = wp_create_user($author, $pass); $this->newauthornames[$this->j] = $author; //now we have a name, in the place of left_blank. } else { $user_id = wp_create_user($this->newauthornames[$this->j], $pass); } } else { return $user_id; // return pre-existing wp username if it exists } } else { $key = array_search($author, $this->mtnames); //find the array key for $author in the $mtnames array $user_id = username_exists($this->newauthornames[$key]); //use that key to get the value of the author's name from $newauthornames } return $user_id; } function get_entries() { set_magic_quotes_runtime(0); $importdata = array_map('rtrim', file($this->file)); // Read the file into an array $this->posts = array(); $this->categories = array(); $num = 0; $doing_entry = false; foreach ($importdata as $importline) { if ( false != strpos($importline, '') ) { preg_match('|(.*?)|is', $importline, $category); $this->categories[] = $category[1]; continue; } if ( false != strpos($importline, '') ) { $this->posts[$num] = ''; $doing_entry = true; continue; } if ( false != strpos($importline, '') ) { $num++; $doing_entry = false; continue; } if ( $doing_entry ) { $this->posts[$num] .= $importline . "\n"; } } foreach ($this->posts as $post) { $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); if ($post_ID) { $this->posts_processed[$post_ID][0] = &$post; $this->posts_processed[$post_ID][1] = 0; } } } function get_wp_authors() { $temp = array (); $i = -1; foreach ($this->posts as $post) { if ('' != trim($post)) { ++ $i; $author = $this->get_tag( $post, 'dc:creator' ); array_push($temp, "$author"); //store the extracted author names in a temporary array } } // We need to find unique values of author names, while preserving the order, so this function emulates the unique_value(); php function, without the sorting. $authors[0] = array_shift($temp); $y = count($temp) + 1; for ($x = 1; $x < $y; $x ++) { $next = array_shift($temp); if (!(in_array($next, $authors))) array_push($authors, "$next"); } return $authors; } function get_authors_from_post() { $formnames = array (); $selectnames = array (); foreach ($_POST['user'] as $key => $line) { $newname = trim(stripslashes($line)); if ($newname == '') $newname = 'left_blank'; //passing author names from step 1 to step 2 is accomplished by using POST. left_blank denotes an empty entry in the form. array_push($formnames, "$newname"); } // $formnames is the array with the form entered names foreach ($_POST['userselect'] as $user => $key) { $selected = trim(stripslashes($key)); array_push($selectnames, "$selected"); } $count = count($formnames); for ($i = 0; $i < $count; $i ++) { if ($selectnames[$i] != '#NONE#') { //if no name was selected from the select menu, use the name entered in the form array_push($this->newauthornames, "$selectnames[$i]"); } else { array_push($this->newauthornames, "$formnames[$i]"); } } } function wp_authors_form() { ?>

    admins entries.'); ?>

    get_wp_authors(); echo '
      '; echo '
      '; wp_nonce_field('import-wordpress'); $j = -1; foreach ($authors as $author) { ++ $j; echo '
    1. '.__('Current author:').' '.$author.'
      '.sprintf(__('Create user %1$s or map to existing'), '
      '); $this->users_form($j); echo '
    2. '; } echo ''.'
      '; echo '
      '; echo '
    '; } function select_authors() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo '

    '.__('Sorry, there has been an error.').'

    '; echo '

    ' . $file['error'] . '

    '; return; } $this->file = $file['file']; $this->id = (int) $file['id']; $this->get_entries(); $this->wp_authors_form(); } function process_categories() { global $wpdb; $cat_names = (array) $wpdb->get_col("SELECT cat_name FROM $wpdb->categories"); while ( $c = array_shift($this->categories) ) { $cat_name = trim($this->get_tag( $c, 'wp:cat_name' )); // If the category exists we leave it alone if ( in_array($cat_name, $cat_names) ) continue; $category_nicename = $this->get_tag( $c, 'wp:category_nicename' ); $posts_private = (int) $this->get_tag( $c, 'wp:posts_private' ); $links_private = (int) $this->get_tag( $c, 'wp:links_private' ); $parent = $this->get_tag( $c, 'wp:category_parent' ); if ( empty($parent) ) $category_parent = '0'; else $category_parent = category_exists($parent); $catarr = compact('category_nicename', 'category_parent', 'posts_private', 'links_private', 'posts_private', 'cat_name'); $cat_ID = wp_insert_category($catarr); } } function process_posts() { $i = -1; echo '
      '; foreach ($this->posts as $post) $this->process_post($post); echo '
    '; wp_import_cleanup($this->id); echo '

    '.sprintf(__('All done.').' '.__('Have fun!').'', get_option('home')).'

    '; } function process_post($post) { global $wpdb; $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); if ( $post_ID && !empty($this->posts_processed[$post_ID][1]) ) // Processed already return 0; // There are only ever one of these $post_title = $this->get_tag( $post, 'title' ); $post_date = $this->get_tag( $post, 'wp:post_date' ); $post_date_gmt = $this->get_tag( $post, 'wp:post_date_gmt' ); $comment_status = $this->get_tag( $post, 'wp:comment_status' ); $ping_status = $this->get_tag( $post, 'wp:ping_status' ); $post_status = $this->get_tag( $post, 'wp:status' ); $post_name = $this->get_tag( $post, 'wp:post_name' ); $post_parent = $this->get_tag( $post, 'wp:post_parent' ); $menu_order = $this->get_tag( $post, 'wp:menu_order' ); $post_type = $this->get_tag( $post, 'wp:post_type' ); $guid = $this->get_tag( $post, 'guid' ); $post_author = $this->get_tag( $post, 'dc:creator' ); $post_content = $this->get_tag( $post, 'content:encoded' ); $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; $cat_index = 0; foreach ($categories as $category) { $categories[$cat_index] = $wpdb->escape($this->unhtmlentities(str_replace(array (''), '', $category))); $cat_index++; } if ($post_id = post_exists($post_title, '', $post_date)) { echo '
  • '; printf(__('Post %s already exists.'), stripslashes($post_title)); } else { // If it has parent, process parent first. $post_parent = (int) $post_parent; if ($parent = $this->posts_processed[$post_parent]) { if (!$parent[1]) $this->process_post($parent[0]); // If not yet, process the parent first. $post_parent = $parent[1]; // New ID of the parent; } echo '
  • '; printf(__('Importing post %s...'), stripslashes($post_title)); $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'post_name', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt', 'guid', 'post_parent', 'menu_order', 'post_type'); $comment_post_ID = $post_id = wp_insert_post($postdata); // Memorize old and new ID. if ( $post_id && $post_ID && $this->posts_processed[$post_ID] ) $this->posts_processed[$post_ID][1] = $post_id; // New ID. // Add categories. if (count($categories) > 0) { $post_cats = array(); foreach ($categories as $category) { $cat_ID = (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name = '$category'"); if ($cat_ID == 0) { $cat_ID = wp_insert_category(array('cat_name' => $category)); } $post_cats[] = $cat_ID; } wp_set_post_categories($post_id, $post_cats); } } // Now for comments preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; $num_comments = 0; if ( $comments) { foreach ($comments as $comment) { $comment_author = $this->get_tag( $comment, 'wp:comment_author'); $comment_author_email = $this->get_tag( $comment, 'wp:comment_author_email'); $comment_author_IP = $this->get_tag( $comment, 'wp:comment_author_IP'); $comment_author_url = $this->get_tag( $comment, 'wp:comment_author_url'); $comment_date = $this->get_tag( $comment, 'wp:comment_date'); $comment_date_gmt = $this->get_tag( $comment, 'wp:comment_date_gmt'); $comment_content = $this->get_tag( $comment, 'wp:comment_content'); $comment_approved = $this->get_tag( $comment, 'wp:comment_approved'); $comment_type = $this->get_tag( $comment, 'wp:comment_type'); $comment_parent = $this->get_tag( $comment, 'wp:comment_parent'); if ( !comment_exists($comment_author, $comment_date) ) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_date_gmt', 'comment_content', 'comment_approved', 'comment_type', 'comment_parent'); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) printf(' '.__('(%s comments)'), $num_comments); // Now for post meta preg_match_all('|(.*?)|is', $post, $postmeta); $postmeta = $postmeta[1]; if ( $postmeta) { foreach ($postmeta as $p) { $key = $this->get_tag( $p, 'wp:meta_key' ); $value = $this->get_tag( $p, 'wp:meta_value' ); $value = stripslashes($value); // add_post_meta() will escape. add_post_meta( $post_id, $key, $value ); } } } function import() { $this->id = (int) $_GET['id']; $this->file = get_attached_file($this->id); $this->get_authors_from_post(); $this->get_entries(); $this->process_categories(); $this->process_posts(); } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->select_authors(); break; case 2: check_admin_referer('import-wordpress'); $this->import(); break; } $this->footer(); } function WP_Import() { // Nothing. } } $wp_import = new WP_Import(); register_importer('wordpress', 'WordPress', __('Import posts, comments, custom fields, pages, and categories from a WordPress export file'), array ($wp_import, 'dispatch')); ?> )wordpress/wp-admin/import/textpattern.phpMget_var('SELECT cat_ID FROM '.$wpdb->categories.' WHERE category_nicename="'.$category_nicename.'"'); return $name; } } if(!function_exists('get_comment_count')) { function get_comment_count($post_ID) { global $wpdb; return $wpdb->get_var('SELECT count(*) FROM '.$wpdb->comments.' WHERE comment_post_ID = '.$post_ID); } } if(!function_exists('link_exists')) { function link_exists($linkname) { global $wpdb; return $wpdb->get_var('SELECT link_id FROM '.$wpdb->links.' WHERE link_name = "'.$wpdb->escape($linkname).'"'); } } /** The Main Importer Class **/ class Textpattern_Import { function header() { echo '
    '; echo '

    '.__('Import Textpattern').'

    '; echo '

    '.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'

    '; } function footer() { echo '
    '; } function greet() { echo '
    '; echo '

    '.__('Howdy! This imports categories, users, posts, comments, and links from any Textpattern 4.0.2+ into this blog.').'

    '; echo '

    '.__('This has not been tested on previous versions of Textpattern. Mileage may vary.').'

    '; echo '

    '.__('Your Textpattern Configuration settings are as follows:').'

    '; echo '
    '; wp_nonce_field('import-textpattern'); $this->db_form(); echo '

    '; echo '
    '; echo '
    '; } function get_txp_cats() { global $wpdb; // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Categories return $txpdb->get_results('SELECT id, name, title FROM '.$prefix.'txp_category WHERE type = "article"', ARRAY_A); } function get_txp_users() { global $wpdb; // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Users return $txpdb->get_results('SELECT user_id, name, RealName, email, privs FROM '.$prefix.'txp_users', ARRAY_A); } function get_txp_posts() { // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Posts return $txpdb->get_results('SELECT ID, Posted, AuthorID, LastMod, Title, Body, Excerpt, Category1, Category2, Status, Keywords, url_title, comments_count FROM '.$prefix.'textpattern ', ARRAY_A); } function get_txp_comments() { global $wpdb; // General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); // Get Comments return $txpdb->get_results('SELECT * FROM '.$prefix.'txp_discuss', ARRAY_A); } function get_txp_links() { //General Housekeeping $txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost')); set_magic_quotes_runtime(0); $prefix = get_option('tpre'); return $txpdb->get_results('SELECT id, date, category, url, linkname, description FROM '.$prefix.'txp_link', ARRAY_A); } function cat2wp($categories='') { // General Housekeeping global $wpdb; $count = 0; $txpcat2wpcat = array(); // Do the Magic if(is_array($categories)) { echo '

    '.__('Importing Categories...').'

    '; foreach ($categories as $category) { $count++; extract($category); // Make Nice Variables $name = $wpdb->escape($name); $title = $wpdb->escape($title); if($cinfo = category_exists($name)) { $ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title)); } else { $ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title)); } $txpcat2wpcat[$id] = $ret_id; } // Store category translation for future use add_option('txpcat2wpcat',$txpcat2wpcat); echo '

    '.sprintf(__('Done! %1$s categories imported.'), $count).'

    '; return true; } echo __('No Categories to Import!'); return false; } function users2wp($users='') { // General Housekeeping global $wpdb; $count = 0; $txpid2wpid = array(); // Midnight Mojo if(is_array($users)) { echo '

    '.__('Importing Users...').'

    '; foreach($users as $user) { $count++; extract($user); // Make Nice Variables $name = $wpdb->escape($name); $RealName = $wpdb->escape($RealName); if($uinfo = get_userdatabylogin($name)) { $ret_id = wp_insert_user(array( 'ID' => $uinfo->ID, 'user_login' => $name, 'user_nicename' => $RealName, 'user_email' => $email, 'user_url' => 'http://', 'display_name' => $name) ); } else { $ret_id = wp_insert_user(array( 'user_login' => $name, 'user_nicename' => $RealName, 'user_email' => $email, 'user_url' => 'http://', 'display_name' => $name) ); } $txpid2wpid[$user_id] = $ret_id; // Set Textpattern-to-WordPress permissions translation $transperms = array(1 => '10', 2 => '9', 3 => '5', 4 => '4', 5 => '3', 6 => '2', 7 => '0'); // Update Usermeta Data $user = new WP_User($ret_id); if('10' == $transperms[$privs]) { $user->set_role('administrator'); } if('9' == $transperms[$privs]) { $user->set_role('editor'); } if('5' == $transperms[$privs]) { $user->set_role('editor'); } if('4' == $transperms[$privs]) { $user->set_role('author'); } if('3' == $transperms[$privs]) { $user->set_role('contributor'); } if('2' == $transperms[$privs]) { $user->set_role('contributor'); } if('0' == $transperms[$privs]) { $user->set_role('subscriber'); } update_usermeta( $ret_id, 'wp_user_level', $transperms[$privs] ); update_usermeta( $ret_id, 'rich_editing', 'false'); }// End foreach($users as $user) // Store id translation array for future use add_option('txpid2wpid',$txpid2wpid); echo '

    '.sprintf(__('Done! %1$s users imported.'), $count).'

    '; return true; }// End if(is_array($users) echo __('No Users to Import!'); return false; }// End function user2wp() function posts2wp($posts='') { // General Housekeeping global $wpdb; $count = 0; $txpposts2wpposts = array(); $cats = array(); // Do the Magic if(is_array($posts)) { echo '

    '.__('Importing Posts...').'

    '; foreach($posts as $post) { $count++; extract($post); // Set Textpattern-to-WordPress status translation $stattrans = array(1 => 'draft', 2 => 'private', 3 => 'draft', 4 => 'publish', 5 => 'publish'); //Can we do this more efficiently? $uinfo = ( get_userdatabylogin( $AuthorID ) ) ? get_userdatabylogin( $AuthorID ) : 1; $authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ; $Title = $wpdb->escape($Title); $Body = $wpdb->escape($Body); $Excerpt = $wpdb->escape($Excerpt); $post_status = $stattrans[$Status]; // Import Post data into WordPress if($pinfo = post_exists($Title,$Body)) { $ret_id = wp_insert_post(array( 'ID' => $pinfo, 'post_date' => $Posted, 'post_date_gmt' => $post_date_gmt, 'post_author' => $authorid, 'post_modified' => $LastMod, 'post_modified_gmt' => $post_modified_gmt, 'post_title' => $Title, 'post_content' => $Body, 'post_excerpt' => $Excerpt, 'post_status' => $post_status, 'post_name' => $url_title, 'comment_count' => $comments_count) ); } else { $ret_id = wp_insert_post(array( 'post_date' => $Posted, 'post_date_gmt' => $post_date_gmt, 'post_author' => $authorid, 'post_modified' => $LastMod, 'post_modified_gmt' => $post_modified_gmt, 'post_title' => $Title, 'post_content' => $Body, 'post_excerpt' => $Excerpt, 'post_status' => $post_status, 'post_name' => $url_title, 'comment_count' => $comments_count) ); } $txpposts2wpposts[$ID] = $ret_id; // Make Post-to-Category associations $cats = array(); if($cat1 = get_catbynicename($Category1)) { $cats[1] = $cat1; } if($cat2 = get_catbynicename($Category2)) { $cats[2] = $cat2; } if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); } } } // Store ID translation for later use add_option('txpposts2wpposts',$txpposts2wpposts); echo '

    '.sprintf(__('Done! %1$s posts imported.'), $count).'

    '; return true; } function comments2wp($comments='') { // General Housekeeping global $wpdb; $count = 0; $txpcm2wpcm = array(); $postarr = get_option('txpposts2wpposts'); // Magic Mojo if(is_array($comments)) { echo '

    '.__('Importing Comments...').'

    '; foreach($comments as $comment) { $count++; extract($comment); // WordPressify Data $comment_ID = ltrim($discussid, '0'); $comment_post_ID = $postarr[$parentid]; $comment_approved = (1 == $visible) ? 1 : 0; $name = $wpdb->escape($name); $email = $wpdb->escape($email); $web = $wpdb->escape($web); $message = $wpdb->escape($message); if($cinfo = comment_exists($name, $posted)) { // Update comments $ret_id = wp_update_comment(array( 'comment_ID' => $cinfo, 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_date' => $posted, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } else { // Insert comments $ret_id = wp_insert_comment(array( 'comment_post_ID' => $comment_post_ID, 'comment_author' => $name, 'comment_author_email' => $email, 'comment_author_url' => $web, 'comment_author_IP' => $ip, 'comment_date' => $posted, 'comment_content' => $message, 'comment_approved' => $comment_approved) ); } $txpcm2wpcm[$comment_ID] = $ret_id; } // Store Comment ID translation for future use add_option('txpcm2wpcm', $txpcm2wpcm); // Associate newly formed categories with posts get_comment_count($ret_id); echo '

    '.sprintf(__('Done! %1$s comments imported.'), $count).'

    '; return true; } echo __('No Comments to Import!'); return false; } function links2wp($links='') { // General Housekeeping global $wpdb; $count = 0; // Deal with the links if(is_array($links)) { echo '

    '.__('Importing Links...').'

    '; foreach($links as $link) { $count++; extract($link); // Make nice vars $category = $wpdb->escape($category); $linkname = $wpdb->escape($linkname); $description = $wpdb->escape($description); if($linfo = link_exists($linkname)) { $ret_id = wp_insert_link(array( 'link_id' => $linfo, 'link_url' => $url, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description, 'link_updated' => $date) ); } else { $ret_id = wp_insert_link(array( 'link_url' => $url, 'link_name' => $linkname, 'link_category' => $category, 'link_description' => $description, 'link_updated' => $date) ); } $txplinks2wplinks[$link_id] = $ret_id; } add_option('txplinks2wplinks',$txplinks2wplinks); echo '

    '; printf(__('Done! %s Links imported'), $count); echo '

    '; return true; } echo __('No Links to Import!'); return false; } function import_categories() { // Category Import $cats = $this->get_txp_cats(); $this->cat2wp($cats); add_option('txp_cats', $cats); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Users'))); echo '
    '; } function import_users() { // User Import $users = $this->get_txp_users(); $this->users2wp($users); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Posts'))); echo '
    '; } function import_posts() { // Post Import $posts = $this->get_txp_posts(); $this->posts2wp($posts); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Comments'))); echo '
    '; } function import_comments() { // Comment Import $comments = $this->get_txp_comments(); $this->comments2wp($comments); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Import Links'))); echo '
    '; } function import_links() { //Link Import $links = $this->get_txp_links(); $this->links2wp($links); add_option('txp_links', $links); echo '
    '; wp_nonce_field('import-textpattern'); printf('', attribute_escape(__('Finish'))); echo '
    '; } function cleanup_txpimport() { delete_option('tpre'); delete_option('txp_cats'); delete_option('txpid2wpid'); delete_option('txpcat2wpcat'); delete_option('txpposts2wpposts'); delete_option('txpcm2wpcm'); delete_option('txplinks2wplinks'); delete_option('txpuser'); delete_option('txppass'); delete_option('txpname'); delete_option('txphost'); $this->tips(); } function tips() { echo '

    '.__('Welcome to WordPress. We hope (and expect!) that you will find this platform incredibly rewarding! As a new WordPress user coming from Textpattern, there are some things that we would like to point out. Hopefully, they will help your transition go as smoothly as possible.').'

    '; echo '

    '.__('Users').'

    '; echo '

    '.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password. Forget it. You didn\'t have that login in Textpattern, why should you have it here? Instead we have taken care to import all of your users into our system. Unfortunately there is one downside. Because both WordPress and Textpattern uses a strong encryption hash with passwords, it is impossible to decrypt it and we are forced to assign temporary passwords to all your users. Every user has the same username, but their passwords are reset to password123. So Login and change it.'), '/wp-login.php').'

    '; echo '

    '.__('Preserving Authors').'

    '; echo '

    '.__('Secondly, we have attempted to preserve post authors. If you are the only author or contributor to your blog, then you are safe. In most cases, we are successful in this preservation endeavor. However, if we cannot ascertain the name of the writer due to discrepancies between database tables, we assign it to you, the administrative user.').'

    '; echo '

    '.__('Textile').'

    '; echo '

    '.__('Also, since you\'re coming from Textpattern, you probably have been using Textile to format your comments and posts. If this is the case, we recommend downloading and installing Textile for WordPress. Trust me... You\'ll want it.').'

    '; echo '

    '.__('WordPress Resources').'

    '; echo '

    '.__('Finally, there are numerous WordPress resources around the internet. Some of them are:').'

    '; echo ''; echo '

    '.sprintf(__('That\'s it! What are you waiting for? Go login!'), '/wp-login.php').'

    '; } function db_form() { echo ''; printf('', __('Textpattern Database User:')); printf('', __('Textpattern Database Password:')); printf('', __('Textpattern Database Name:')); printf('', __('Textpattern Database Host:')); printf('', __('Textpattern Table prefix (if any):')); echo '
    '; } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); if ( $step > 0 ) { check_admin_referer('import-textpattern'); if($_POST['dbuser']) { if(get_option('txpuser')) delete_option('txpuser'); add_option('txpuser', sanitize_user($_POST['dbuser'], true)); } if($_POST['dbpass']) { if(get_option('txppass')) delete_option('txppass'); add_option('txppass', sanitize_user($_POST['dbpass'], true)); } if($_POST['dbname']) { if(get_option('txpname')) delete_option('txpname'); add_option('txpname', sanitize_user($_POST['dbname'], true)); } if($_POST['dbhost']) { if(get_option('txphost')) delete_option('txphost'); add_option('txphost', sanitize_user($_POST['dbhost'], true)); } if($_POST['dbprefix']) { if(get_option('tpre')) delete_option('tpre'); add_option('tpre', sanitize_user($_POST['dbprefix'])); } } switch ($step) { default: case 0 : $this->greet(); break; case 1 : $this->import_categories(); break; case 2 : $this->import_users(); break; case 3 : $this->import_posts(); break; case 4 : $this->import_comments(); break; case 5 : $this->import_links(); break; case 6 : $this->cleanup_txpimport(); break; } $this->footer(); } function Textpattern_Import() { // Nothing. } } $txp_import = new Textpattern_Import(); register_importer('textpattern', __('Textpattern'), __('Import categories, users, posts, comments, and links from a Textpattern blog'), array ($txp_import, 'dispatch')); ?> 'wordpress/wp-admin/import/wordpress.php6 XML fragment, [1] => New post ID] var $file; var $id; var $mtnames = array (); var $newauthornames = array (); var $j = -1; function header() { echo '
    '; echo '

    '.__('Import WordPress').'

    '; } function footer() { echo '
    '; } function unhtmlentities($string) { // From php.net for < 4.3 compat $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } function greet() { echo '
    '; echo '

    '.__('Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, comments, custom fields, and categories into this blog.').'

    '; echo '

    '.__('Choose a WordPress WXR file to upload, then click Upload file and import.').'

    '; wp_import_upload_form("admin.php?import=wordpress&step=1"); echo '
    '; } function get_tag( $string, $tag ) { global $wpdb; preg_match("|<$tag.*?>(.*?)|is", $string, $return); $return = preg_replace('|^$|s', '$1', $return[1]); $return = $wpdb->escape( trim( $return ) ); return $return; } function users_form($n) { global $wpdb, $testing; $users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY ID"); ?> mtnames))) { //a new mt author name is found ++ $this->j; $this->mtnames[$this->j] = $author; //add that new mt author name to an array $user_id = username_exists($this->newauthornames[$this->j]); //check if the new author name defined by the user is a pre-existing wp user if (!$user_id) { //banging my head against the desk now. if ($this->newauthornames[$this->j] == 'left_blank') { //check if the user does not want to change the authorname $user_id = wp_create_user($author, $pass); $this->newauthornames[$this->j] = $author; //now we have a name, in the place of left_blank. } else { $user_id = wp_create_user($this->newauthornames[$this->j], $pass); } } else { return $user_id; // return pre-existing wp username if it exists } } else { $key = array_search($author, $this->mtnames); //find the array key for $author in the $mtnames array $user_id = username_exists($this->newauthornames[$key]); //use that key to get the value of the author's name from $newauthornames } return $user_id; } function get_entries() { set_magic_quotes_runtime(0); $importdata = array_map('rtrim', file($this->file)); // Read the file into an array $this->posts = array(); $this->categories = array(); $num = 0; $doing_entry = false; foreach ($importdata as $importline) { if ( false != strpos($importline, '') ) { preg_match('|(.*?)|is', $importline, $category); $this->categories[] = $category[1]; continue; } if ( false != strpos($importline, '') ) { $this->posts[$num] = ''; $doing_entry = true; continue; } if ( false != strpos($importline, '') ) { $num++; $doing_entry = false; continue; } if ( $doing_entry ) { $this->posts[$num] .= $importline . "\n"; } } foreach ($this->posts as $post) { $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); if ($post_ID) { $this->posts_processed[$post_ID][0] = &$post; $this->posts_processed[$post_ID][1] = 0; } } } function get_wp_authors() { $temp = array (); $i = -1; foreach ($this->posts as $post) { if ('' != trim($post)) { ++ $i; $author = $this->get_tag( $post, 'dc:creator' ); array_push($temp, "$author"); //store the extracted author names in a temporary array } } // We need to find unique values of author names, while preserving the order, so this function emulates the unique_value(); php function, without the sorting. $authors[0] = array_shift($temp); $y = count($temp) + 1; for ($x = 1; $x < $y; $x ++) { $next = array_shift($temp); if (!(in_array($next, $authors))) array_push($authors, "$next"); } return $authors; } function get_authors_from_post() { $formnames = array (); $selectnames = array (); foreach ($_POST['user'] as $key => $line) { $newname = trim(stripslashes($line)); if ($newname == '') $newname = 'left_blank'; //passing author names from step 1 to step 2 is accomplished by using POST. left_blank denotes an empty entry in the form. array_push($formnames, "$newname"); } // $formnames is the array with the form entered names foreach ($_POST['userselect'] as $user => $key) { $selected = trim(stripslashes($key)); array_push($selectnames, "$selected"); } $count = count($formnames); for ($i = 0; $i < $count; $i ++) { if ($selectnames[$i] != '#NONE#') { //if no name was selected from the select menu, use the name entered in the form array_push($this->newauthornames, "$selectnames[$i]"); } else { array_push($this->newauthornames, "$formnames[$i]"); } } } function wp_authors_form() { ?>

    admins entries.'); ?>

    get_wp_authors(); echo '
      '; echo '
      '; wp_nonce_field('import-wordpress'); $j = -1; foreach ($authors as $author) { ++ $j; echo '
    1. '.__('Current author:').' '.$author.'
      '.sprintf(__('Create user %1$s or map to existing'), '
      '); $this->users_form($j); echo '
    2. '; } echo ''.'
      '; echo '
      '; echo '
    '; } function select_authors() { $file = wp_import_handle_upload(); if ( isset($file['error']) ) { echo '

    '.__('Sorry, there has been an error.').'

    '; echo '

    ' . $file['error'] . '

    '; return; } $this->file = $file['file']; $this->id = (int) $file['id']; $this->get_entries(); $this->wp_authors_form(); } function process_categories() { global $wpdb; $cat_names = (array) $wpdb->get_col("SELECT cat_name FROM $wpdb->categories"); while ( $c = array_shift($this->categories) ) { $cat_name = trim($this->get_tag( $c, 'wp:cat_name' )); // If the category exists we leave it alone if ( in_array($cat_name, $cat_names) ) continue; $category_nicename = $this->get_tag( $c, 'wp:category_nicename' ); $posts_private = (int) $this->get_tag( $c, 'wp:posts_private' ); $links_private = (int) $this->get_tag( $c, 'wp:links_private' ); $parent = $this->get_tag( $c, 'wp:category_parent' ); if ( empty($parent) ) $category_parent = '0'; else $category_parent = category_exists($parent); $catarr = compact('category_nicename', 'category_parent', 'posts_private', 'links_private', 'posts_private', 'cat_name'); $cat_ID = wp_insert_category($catarr); } } function process_posts() { $i = -1; echo '
      '; foreach ($this->posts as $post) $this->process_post($post); echo '
    '; wp_import_cleanup($this->id); echo '

    '.sprintf(__('All done.').' '.__('Have fun!').'', get_option('home')).'

    '; } function process_post($post) { global $wpdb; $post_ID = (int) $this->get_tag( $post, 'wp:post_id' ); if ( $post_ID && !empty($this->posts_processed[$post_ID][1]) ) // Processed already return 0; // There are only ever one of these $post_title = $this->get_tag( $post, 'title' ); $post_date = $this->get_tag( $post, 'wp:post_date' ); $post_date_gmt = $this->get_tag( $post, 'wp:post_date_gmt' ); $comment_status = $this->get_tag( $post, 'wp:comment_status' ); $ping_status = $this->get_tag( $post, 'wp:ping_status' ); $post_status = $this->get_tag( $post, 'wp:status' ); $post_name = $this->get_tag( $post, 'wp:post_name' ); $post_parent = $this->get_tag( $post, 'wp:post_parent' ); $menu_order = $this->get_tag( $post, 'wp:menu_order' ); $post_type = $this->get_tag( $post, 'wp:post_type' ); $guid = $this->get_tag( $post, 'guid' ); $post_author = $this->get_tag( $post, 'dc:creator' ); $post_content = $this->get_tag( $post, 'content:encoded' ); $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); $post_content = str_replace('
    ', '
    ', $post_content); $post_content = str_replace('
    ', '
    ', $post_content); preg_match_all('|(.*?)|is', $post, $categories); $categories = $categories[1]; $cat_index = 0; foreach ($categories as $category) { $categories[$cat_index] = $wpdb->escape($this->unhtmlentities(str_replace(array (''), '', $category))); $cat_index++; } if ($post_id = post_exists($post_title, '', $post_date)) { echo '
  • '; printf(__('Post %s already exists.'), stripslashes($post_title)); } else { // If it has parent, process parent first. $post_parent = (int) $post_parent; if ($parent = $this->posts_processed[$post_parent]) { if (!$parent[1]) $this->process_post($parent[0]); // If not yet, process the parent first. $post_parent = $parent[1]; // New ID of the parent; } echo '
  • '; printf(__('Importing post %s...'), stripslashes($post_title)); $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'post_name', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt', 'guid', 'post_parent', 'menu_order', 'post_type'); $comment_post_ID = $post_id = wp_insert_post($postdata); // Memorize old and new ID. if ( $post_id && $post_ID && $this->posts_processed[$post_ID] ) $this->posts_processed[$post_ID][1] = $post_id; // New ID. // Add categories. if (count($categories) > 0) { $post_cats = array(); foreach ($categories as $category) { $cat_ID = (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name = '$category'"); if ($cat_ID == 0) { $cat_ID = wp_insert_category(array('cat_name' => $category)); } $post_cats[] = $cat_ID; } wp_set_post_categories($post_id, $post_cats); } } // Now for comments preg_match_all('|(.*?)|is', $post, $comments); $comments = $comments[1]; $num_comments = 0; if ( $comments) { foreach ($comments as $comment) { $comment_author = $this->get_tag( $comment, 'wp:comment_author'); $comment_author_email = $this->get_tag( $comment, 'wp:comment_author_email'); $comment_author_IP = $this->get_tag( $comment, 'wp:comment_author_IP'); $comment_author_url = $this->get_tag( $comment, 'wp:comment_author_url'); $comment_date = $this->get_tag( $comment, 'wp:comment_date'); $comment_date_gmt = $this->get_tag( $comment, 'wp:comment_date_gmt'); $comment_content = $this->get_tag( $comment, 'wp:comment_content'); $comment_approved = $this->get_tag( $comment, 'wp:comment_approved'); $comment_type = $this->get_tag( $comment, 'wp:comment_type'); $comment_parent = $this->get_tag( $comment, 'wp:comment_parent'); if ( !comment_exists($comment_author, $comment_date) ) { $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_date_gmt', 'comment_content', 'comment_approved', 'comment_type', 'comment_parent'); wp_insert_comment($commentdata); $num_comments++; } } } if ( $num_comments ) printf(' '.__('(%s comments)'), $num_comments); // Now for post meta preg_match_all('|(.*?)|is', $post, $postmeta); $postmeta = $postmeta[1]; if ( $postmeta) { foreach ($postmeta as $p) { $key = $this->get_tag( $p, 'wp:meta_key' ); $value = $this->get_tag( $p, 'wp:meta_value' ); $value = stripslashes($value); // add_post_meta() will escape. add_post_meta( $post_id, $key, $value ); } } } function import() { $this->id = (int) $_GET['id']; $this->file = get_attached_file($this->id); $this->get_authors_from_post(); $this->get_entries(); $this->process_categories(); $this->process_posts(); } function dispatch() { if (empty ($_GET['step'])) $step = 0; else $step = (int) $_GET['step']; $this->header(); switch ($step) { case 0 : $this->greet(); break; case 1 : check_admin_referer('import-upload'); $this->select_authors(); break; case 2: check_admin_referer('import-wordpress'); $this->import(); break; } $this->footer(); } function WP_Import() { // Nothing. } } $wp_import = new WP_Import(); register_importer('wordpress', 'WordPress', __('Import posts, comments, custom fields, pages, and categories from a WordPress export file'), array ($wp_import, 'dispatch')); ?> "wordpress/wp-admin/index-extra.phpitems) && 1 < count($rss->items) ) { // Technorati returns a 1-item feed when it has no results ?>

      items = array_slice($rss->items, 0, 10); foreach ($rss->items as $item ) { ?>
    items) && 0 != count($rss->items) ) { ?>

    items = array_slice($rss->items, 0, 3); foreach ($rss->items as $item ) { ?>

    '>

    items) && 0 != count($rss->items) ) { ?>

      items = array_slice($rss->items, 0, 20); foreach ($rss->items as $item ) { $title = wp_specialchars($item['title']); $author = preg_replace( '|(.+?):.+|s', '$1', $item['title'] ); $post = preg_replace( '|.+?:(.+)|s', '$1', $item['title'] ); ?>
    • '>

    »

    wordpress/wp-admin/index.php^

    get_results("SELECT comment_author, comment_author_url, comment_ID, comment_post_ID FROM $wpdb->comments WHERE comment_approved = 1 ORDER BY comment_date_gmt DESC"); $numcomments = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 0"); if ( $comments || $numcomments ) : ?>

    »

    »

    get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql('post') . " AND post_date_gmt < '$today' ORDER BY post_date DESC") ) : ?>

    »

      post_title == '') $post->post_title = sprintf(__('Post #%s'), $post->ID); echo "
    • "; the_title(); echo '
    • '; } ?>
    get_results("SELECT ID, post_title, post_date_gmt FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'future' ORDER BY post_date ASC") ) : ?>

      post_title == '') $post->post_title = sprintf(__('Post #%s'), $post->ID); echo "
    • " . sprintf(__('%1$s in %2$s'), "$post->post_title", human_time_diff( current_time('timestamp', 1), strtotime($post->post_date_gmt. ' GMT') )) . "
    • "; } ?>

    get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'"); $numcomms = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '1'"); $numcats = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->categories"); $post_str = sprintf(__ngettext('%1$s post', '%1$s posts', $numposts), number_format($numposts), 'edit.php'); $comm_str = sprintf(__ngettext('%1$s comment', '%1$s comments', $numcomms), number_format($numcomms), 'edit-comments.php'); $cat_str = sprintf(__ngettext('%1$s category', '%1$s categories', $numcats), number_format($numcats), 'categories.php'); ?>

    documentation or visit the support forums."); ?>

     
    wordpress/wp-admin/install.cssehtml { background: #eee; } body { background: #fff; color: #000; font-family: Georgia, "Times New Roman", Times, serif; margin-left: 20%; margin-right: 20%; padding: .2em 2em; } h1 { color: #006; font-size: 18px; font-weight: lighter; } h2 { font-size: 16px; } p, li, dt { line-height: 140%; padding-bottom: 2px; } ul, ol { padding: 5px 5px 5px 20px; } #logo { margin-bottom: 2em; } .step a, .step input { font-size: 2em; } td input { font-size: 1.5em; } .step, th { text-align: right; } #footer { text-align: center; border-top: 1px solid #ccc; padding-top: 1em; font-style: italic; }%wordpress/wp-admin/install-helper.phpget_tables() as $table ) { if ($table == $table_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_table() as $table ) { if ($table == $table_name) { return true; } } return false; } /** ** maybe_add_column() ** Add column to db table if it doesn't exist. ** Returns: true if already exists or on successful completion ** false on error */ function maybe_add_column($table_name, $column_name, $create_ddl) { global $wpdb, $debug; foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($debug) echo("checking $column == $column_name
    "); if ($column == $column_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($column == $column_name) { return true; } } return false; } /** ** maybe_drop_column() ** Drop column from db table if it exists. ** Returns: true if it doesn't already exist or on successful drop ** false on error */ function maybe_drop_column($table_name, $column_name, $drop_ddl) { global $wpdb; foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($column == $column_name) { //found it try to drop it. $q = $wpdb->query($drop_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($column == $column_name) { return false; } } } } // else didn't find it return true; } /** ** check_column() ** Check column matches passed in criteria. ** Pass in null to skip checking that criteria ** Returns: true if it matches ** false otherwise ** (case sensitive) Column names returned from DESC table are: ** Field ** Type ** Null ** Key ** Default ** Extra */ function check_column($table_name, $col_name, $col_type, $is_null = null, $key = null, $default = null, $extra = null) { global $wpdb, $debug; $diffs = 0; $results = $wpdb->get_results("DESC $table_name"); foreach ($results as $row ) { if ($debug > 1) print_r($row); if ($row->Field == $col_name) { // got our column, check the params if ($debug) echo ("checking $row->Type against $col_type\n"); if (($col_type != null) && ($row->Type != $col_type)) { ++$diffs; } if (($is_null != null) && ($row->Null != $is_null)) { ++$diffs; } if (($key != null) && ($row->Key != $key)) { ++$diffs; } if (($default != null) && ($row->Default != $default)) { ++$diffs; } if (($extra != null) && ($row->Extra != $extra)) { ++$diffs; } if ($diffs > 0) { if ($debug) echo ("diffs = $diffs returning false\n"); return false; } return true; } // end if found our column } return false; } /* echo "

    testing

    "; echo "
    ";
    
    //check_column('wp_links', 'link_description', 'mediumtext');
    //if (check_column($wpdb->comments, 'comment_author', 'tinytext'))
    //    echo "ok\n";
    $error_count = 0;
    $tablename = $wpdb->links;
    // check the column
    if (!check_column($wpdb->links, 'link_description', 'varchar(255)'))
    {
    	$ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' ";
    	$q = $wpdb->query($ddl);
    }
    if (check_column($wpdb->links, 'link_description', 'varchar(255)')) {
    	$res .= $tablename . ' - ok 
    '; } else { $res .= 'There was a problem with ' . $tablename . '
    '; ++$error_count; } echo "
    "; */ ?>wordpress/wp-admin/install.php/wp-config.php file. I need this before we can get started. Need more help? We got it. You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file.", "WordPress › Error"); } require_once('../wp-config.php'); require_once('./upgrade-functions.php'); if (isset($_GET['step'])) $step = $_GET['step']; else $step = 0; header( 'Content-Type: text/html; charset=utf-8' ); ?> > <?php _e('WordPress › Installation'); ?> text_direction) ) : ?>

    WordPress

    '.__('Already Installed').'

    '.__('You appear to have already installed WordPress. To reinstall please clear your old database tables first.').'

    '); switch($step) { case 0: ?>

    ReadMe documentation at your leisure.'), '../readme.html'); ?>

    ERROR: please type your e-mail address")); } else if (!is_email($admin_email)) { die(__("ERROR: the e-mail address isn't correct")); } ?>

    log in with the username "admin" and password "%2$s".'), '../wp-login.php', $password); ?>

    Note that password carefully! It is a random password that was generated just for you. If you lose it, you will have to delete the tables from the database yourself, and re-install WordPress. So to review:'); ?>

    admin
    wp-login.php

    "wordpress/wp-admin/install-rtl.cssbody { font: 13px Tahoma, Georgia, "Times New Roman", Times, serif; } ul, ol { padding: 5px 20px 5px 5px; } h1, h2, h3 { font-family: "Times New Roman", Times, serif; font-weight: 700 } .step, th { text-align: left } input { font-family: "Times New Roman", Times, serif; padding: 1px } #logo { background: url(../wp-content/plugins/WP-Jalali/wp-fa-logo.png) center right no-repeat; text-align: left; } #admin_email {direction: ltr; text-align: left; } #footer { font-style: normal; }wordpress/wp-admin/link-add.php

    "wordpress/wp-admin/link-import.phpu


    false, 'test_type' => false); $file = wp_handle_upload($_FILES['userfile'], $overrides); if ( isset($file['error']) ) wp_die($file['error']); $url = $file['url']; $opml_url = $file['file']; $blogrolling = false; } if ( isset($opml_url) && $opml_url != '' ) { if ( $blogrolling == true ) { $opml = wp_remote_fopen($opml_url); } else { $opml = file_get_contents($opml_url); } include_once('link-parse-opml.php'); $link_count = count($names); for ( $i = 0; $i < $link_count; $i++ ) { if ('Last' == substr($titles[$i], 0, 4)) $titles[$i] = ''; if ( 'http' == substr($titles[$i], 0, 4) ) $titles[$i] = ''; $link = array( 'link_url' => $urls[$i], 'link_name' => $wpdb->escape($names[$i]), 'link_category' => array($cat_id), 'link_description' => $wpdb->escape($descriptions[$i]), 'link_owner' => $user_ID, 'link_rss' => $feeds[$i]); wp_insert_link($link); echo sprintf('

    '.__('Inserted %s').'

    ', $names[$i]); } ?>

    manage those links.'), $link_count, $cat_id, 'link-manager.php') ?>

    " . __("You need to supply your OPML url. Press back on your browser and try again") . "

    \n"; } // end else if ( ! $blogrolling ) apply_filters( 'wp_delete_file', $opml_url); @unlink($opml_url); ?>
    #wordpress/wp-admin/link-manager.php2

    '; $deleted = (int) $_GET['deleted']; printf(__ngettext('%s link deleted.', '%s links deleted', $deleted), $deleted); echo '

    '; } ?>

    add links to sites that you visit often and share them on your blog. When you have a list of links in your sidebar to other blogs, it’s called a “blogroll.”'); ?>

    \n"; $select_cat .= '\n"; foreach ((array) $categories as $cat) $select_cat .= '\n"; $select_cat .= "\n"; $select_order = "\n"; printf(__('Currently showing %1$s links ordered by %2$s'), $select_cat, $select_order); ?>

    '' . __('Name') . '', 'url' => '' . __('URL') . '', 'categories' => '' . __('Categories') . '', 'rel' => '' . __('rel') . '', 'visible' => '' . __('Visible') . '', 'action' => '' . __('Action') . '', ); $link_columns = apply_filters('manage_link_columns', $link_columns); ?>
    &wordpress/wp-admin/link-parse-opml.php 'link_url', 'HTMLURL' => 'link_url', 'TEXT' => 'link_name', 'TITLE' => 'link_name', 'TARGET' => 'link_target', 'DESCRIPTION' => 'link_description', 'XMLURL' => 'link_rss' ); $map = $opml_map; /** ** startElement() ** Callback function. Called at the start of a new xml tag. **/ function startElement($parser, $tagName, $attrs) { global $updated_timestamp, $all_links, $map; global $names, $urls, $targets, $descriptions, $feeds; if ($tagName == 'OUTLINE') { foreach (array_keys($map) as $key) { if (isset($attrs[$key])) { $$map[$key] = $attrs[$key]; } } //echo("got data: link_url = [$link_url], link_name = [$link_name], link_target = [$link_target], link_description = [$link_description]
    \n"); // save the data away. $names[] = $link_name; $urls[] = $link_url; $targets[] = $link_target; $feeds[] = $link_rss; $descriptions[] = $link_description; } // end if outline } /** ** endElement() ** Callback function. Called at the end of an xml tag. **/ function endElement($parser, $tagName) { // nothing to do. } // Create an XML parser $xml_parser = xml_parser_create(); // Set the functions to handle opening and closing tags xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!xml_parse($xml_parser, $opml, true)) { echo(sprintf(__('XML error: %1$s at line %2$s'), xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } // Free up memory used by the XML parser xml_parser_free($xml_parser); ?> wordpress/wp-admin/link.php query("update $wpdb->links SET link_category='$category' WHERE link_id IN ($all_links)"); wp_redirect($this_file); exit; break; case 'add' : check_admin_referer('add-bookmark'); add_link(); wp_redirect(wp_get_referer().'?added=true'); exit; break; case 'save' : $link_id = (int) $_POST['link_id']; check_admin_referer('update-bookmark_' . $link_id); edit_link($link_id); wp_redirect($this_file); exit; break; case 'delete' : $link_id = (int) $_GET['link_id']; check_admin_referer('delete-bookmark_' . $link_id); if (!current_user_can('manage_links')) wp_die(__('Cheatin’ uh?')); wp_delete_link($link_id); wp_redirect($this_file); exit; break; case 'edit' : wp_enqueue_script( array('xfn', 'dbx-admin-key?pagenow=link.php') ); if ( current_user_can( 'manage_categories' ) ) wp_enqueue_script( 'ajaxcat' ); $parent_file = 'link-manager.php'; $submenu_file = 'link-manager.php'; $title = __('Edit Link'); include_once ('admin-header.php'); if (!current_user_can('manage_links')) wp_die(__('You do not have sufficient permissions to edit the links for this blog.')); $link_id = (int) $_GET['link_id']; if (!$link = get_link_to_edit($link_id)) wp_die(__('Link not found.')); include ('edit-link-form.php'); break; default : break; } include ('admin-footer.php'); ?> "wordpress/wp-admin/menu-header.php>
    wordpress/wp-admin/menu.phpget_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'"); $submenu['edit-comments.php'][25] = array(sprintf(__("Awaiting Moderation (%s)"), "$awaiting_mod"), 'edit_posts', 'moderation.php'); $submenu['edit.php'][5] = array(__('Posts'), 'edit_posts', 'edit.php'); $submenu['edit.php'][10] = array(__('Pages'), 'edit_pages', 'edit-pages.php'); $submenu['edit.php'][12] = array(__('Uploads'), 'upload_files', 'upload.php'); $submenu['edit.php'][15] = array(__('Categories'), 'manage_categories', 'categories.php'); $submenu['edit.php'][30] = array(__('Files'), 'edit_files', 'templates.php'); $submenu['edit.php'][35] = array(__('Import'), 'import', 'import.php'); $submenu['edit.php'][40] = array(__('Export'), 'import', 'export.php'); $submenu['link-manager.php'][5] = array(__('Manage Blogroll'), 'manage_links', 'link-manager.php'); $submenu['link-manager.php'][10] = array(__('Add Link'), 'manage_links', 'link-add.php'); $submenu['link-manager.php'][20] = array(__('Import Links'), 'manage_links', 'link-import.php'); if ( current_user_can('edit_users') ) { $_wp_real_parent_file['profile.php'] = 'users.php'; // Back-compat for plugins adding submenus to profile.php. $submenu['users.php'][5] = array(__('Authors & Users'), 'edit_users', 'users.php'); $submenu['users.php'][10] = array(__('Your Profile'), 'read', 'profile.php'); } else { $submenu['profile.php'][5] = array(__('Your Profile'), 'read', 'profile.php'); } $submenu['options-general.php'][10] = array(__('General'), 'manage_options', 'options-general.php'); $submenu['options-general.php'][15] = array(__('Writing'), 'manage_options', 'options-writing.php'); $submenu['options-general.php'][20] = array(__('Reading'), 'manage_options', 'options-reading.php'); $submenu['options-general.php'][25] = array(__('Discussion'), 'manage_options', 'options-discussion.php'); $submenu['options-general.php'][30] = array(__('Privacy'), 'manage_options', 'options-privacy.php'); $submenu['options-general.php'][35] = array(__('Permalinks'), 'manage_options', 'options-permalink.php'); $submenu['options-general.php'][40] = array(__('Miscellaneous'), 'manage_options', 'options-misc.php'); $submenu['plugins.php'][5] = array(__('Plugins'), 'activate_plugins', 'plugins.php'); $submenu['plugins.php'][10] = array(__('Plugin Editor'), 'edit_plugins', 'plugin-editor.php'); $submenu['themes.php'][5] = array(__('Themes'), 'switch_themes', 'themes.php'); $submenu['themes.php'][10] = array(__('Theme Editor'), 'edit_themes', 'theme-editor.php'); do_action('_admin_menu'); // Create list of page plugin hook names. foreach ($menu as $menu_page) { $admin_page_hooks[$menu_page[2]] = sanitize_title($menu_page[0]); } $_wp_submenu_nopriv = array(); $_wp_menu_nopriv = array(); // Loop over submenus and remove pages for which the user does not have privs. foreach ($submenu as $parent => $sub) { foreach ($sub as $index => $data) { if ( ! current_user_can($data[1]) ) { unset($submenu[$parent][$index]); $_wp_submenu_nopriv[$parent][$data[2]] = true; } } if ( empty($submenu[$parent]) ) unset($submenu[$parent]); } // Loop over the top-level menu. // Menus for which the original parent is not acessible due to lack of privs will have the next // submenu in line be assigned as the new menu parent. foreach ( $menu as $id => $data ) { if ( empty($submenu[$data[2]]) ) continue; $subs = $submenu[$data[2]]; $first_sub = array_shift($subs); $old_parent = $data[2]; $new_parent = $first_sub[2]; // If the first submenu is not the same as the assigned parent, // make the first submenu the new parent. if ( $new_parent != $old_parent ) { $_wp_real_parent_file[$old_parent] = $new_parent; $menu[$id][2] = $new_parent; foreach ($submenu[$old_parent] as $index => $data) { $submenu[$new_parent][$index] = $submenu[$old_parent][$index]; unset($submenu[$old_parent][$index]); } unset($submenu[$old_parent]); $_wp_submenu_nopriv[$new_parent] = $_wp_submenu_nopriv[$old_parent]; } } do_action('admin_menu', ''); // Remove menus that have no accessible submenus and require privs that the user does not have. // Run re-parent loop again. foreach ( $menu as $id => $data ) { // If submenu is empty... if ( empty($submenu[$data[2]]) ) { // And user doesn't have privs, remove menu. if ( ! current_user_can($data[1]) ) { $_wp_menu_nopriv[$data[2]] = true; unset($menu[$id]); } } } unset($id); uksort($menu, "strnatcasecmp"); // make it all pretty if (! user_can_access_admin_page()) { wp_die( __('You do not have sufficient permissions to access this page.') ); } ?> !wordpress/wp-admin/moderation.php# $v) { $comment[intval($k)] = $v; } } switch($action) { case 'update': check_admin_referer('moderate-comments'); if ( !current_user_can('moderate_comments') ) wp_die(__('Your level is not high enough to moderate comments.')); $item_ignored = 0; $item_deleted = 0; $item_approved = 0; $item_spam = 0; foreach($comment as $key => $value) { if ($feelinglucky && 'later' == $value) $value = 'delete'; switch($value) { case 'later': // do nothing with that comment // wp_set_comment_status($key, "hold"); ++$item_ignored; break; case 'delete': wp_set_comment_status($key, 'delete'); ++$item_deleted; break; case 'spam': wp_set_comment_status($key, 'spam'); ++$item_spam; break; case 'approve': wp_set_comment_status($key, 'approve'); if ( get_option('comments_notify') == true ) { wp_notify_postauthor($key); } ++$item_approved; break; } } $file = basename(__FILE__); wp_redirect("$file?ignored=$item_ignored&deleted=$item_deleted&approved=$item_approved&spam=$item_spam"); exit(); break; default: require_once('admin-header.php'); if ( isset($_GET['deleted']) || isset($_GET['approved']) || isset($_GET['ignored']) ) { echo "
    \n

    "; $approved = (int) $_GET['approved']; $deleted = (int) $_GET['deleted']; $ignored = (int) $_GET['ignored']; $spam = (int) $_GET['spam']; if ($approved) { printf(__ngettext('%s comment approved', '%s comments approved', $approved), $approved); echo "
    \n"; } if ($deleted) { printf(__ngettext('%s comment deleted', '%s comments deleted', $deleted), $deleted); echo "
    \n"; } if ($spam) { printf(__ngettext('%s comment marked as spam', '%s comments marked as spam', $spam), $spam); echo "
    \n"; } if ($ignored) { printf(__ngettext('%s comment unchanged', '%s comments unchanged', $ignored), $ignored); echo "
    \n"; } echo "

    \n"; } ?>
    get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = '0'"); else $comments = ''; if ($comments) { // list all comments that are waiting for approval $file = basename(__FILE__); ?>

      comment_date); $post_title = $wpdb->get_var("SELECT post_title FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID); if ($i % 2) $class = 'js-unapproved alternate'; else $class = 'js-unapproved'; echo "\n\t
    1. "; ?>

      comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

      — [ comment_ID.'">' . __('Edit') . ' | '; echo " comment_post_ID."&comment=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by '%s'.\n'Cancel' to stop, 'OK' to delete."), $comment->comment_author )) . "', theCommentList );\">" . __('Delete') . " | "; ?> comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title; ?> ] —      

    '.__("Currently there are no comments for you to moderate.") . "

    \n"; } ?>
    %wordpress/wp-admin/mysql/.svn/entrieso8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-admin/mysql svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 upgrade-schema.php file 2008-11-20T16:30:49.000000Z 7720b5b2e088d4537aeb00dd6b4d319d 2008-10-28T18:17:06.112729Z 97 paul $wordpress/wp-admin/mysql/.svn/format8 Cwordpress/wp-admin/mysql/.svn/text-base/upgrade-schema.php.svn-base:3=') ) { if ( ! empty($wpdb->charset) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; } $wp_queries="CREATE TABLE $wpdb->categories ( cat_ID bigint(20) NOT NULL auto_increment, cat_name varchar(55) NOT NULL default '', category_nicename varchar(200) NOT NULL default '', category_description longtext NOT NULL, category_parent bigint(20) NOT NULL default '0', category_count bigint(20) NOT NULL default '0', link_count bigint(20) NOT NULL default '0', posts_private tinyint(1) NOT NULL default '0', links_private tinyint(1) NOT NULL default '0', PRIMARY KEY (cat_ID), KEY category_nicename (category_nicename) ) $charset_collate; CREATE TABLE $wpdb->comments ( comment_ID bigint(20) unsigned NOT NULL auto_increment, comment_post_ID int(11) NOT NULL default '0', comment_author tinytext NOT NULL, comment_author_email varchar(100) NOT NULL default '', comment_author_url varchar(200) NOT NULL default '', comment_author_IP varchar(100) NOT NULL default '', comment_date datetime NOT NULL default '0000-00-00 00:00:00', comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', comment_content text NOT NULL, comment_karma int(11) NOT NULL default '0', comment_approved enum('0','1','spam') NOT NULL default '1', comment_agent varchar(255) NOT NULL default '', comment_type varchar(20) NOT NULL default '', comment_parent bigint(20) NOT NULL default '0', user_id bigint(20) NOT NULL default '0', PRIMARY KEY (comment_ID), KEY comment_approved (comment_approved), KEY comment_post_ID (comment_post_ID) ) $charset_collate; CREATE TABLE $wpdb->link2cat ( rel_id bigint(20) NOT NULL auto_increment, link_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY link_id (link_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->links ( link_id bigint(20) NOT NULL auto_increment, link_url varchar(255) NOT NULL default '', link_name varchar(255) NOT NULL default '', link_image varchar(255) NOT NULL default '', link_target varchar(25) NOT NULL default '', link_category bigint(20) NOT NULL default '0', link_description varchar(255) NOT NULL default '', link_visible enum('Y','N') NOT NULL default 'Y', link_owner int(11) NOT NULL default '1', link_rating int(11) NOT NULL default '0', link_updated datetime NOT NULL default '0000-00-00 00:00:00', link_rel varchar(255) NOT NULL default '', link_notes mediumtext NOT NULL, link_rss varchar(255) NOT NULL default '', PRIMARY KEY (link_id), KEY link_category (link_category), KEY link_visible (link_visible) ) $charset_collate; CREATE TABLE $wpdb->options ( option_id bigint(20) NOT NULL auto_increment, blog_id int(11) NOT NULL default '0', option_name varchar(64) NOT NULL default '', option_can_override enum('Y','N') NOT NULL default 'Y', option_type int(11) NOT NULL default '1', option_value longtext NOT NULL, option_width int(11) NOT NULL default '20', option_height int(11) NOT NULL default '8', option_description tinytext NOT NULL, option_admin_level int(11) NOT NULL default '1', autoload enum('yes','no') NOT NULL default 'yes', PRIMARY KEY (option_id,blog_id,option_name), KEY option_name (option_name) ) $charset_collate; CREATE TABLE $wpdb->post2cat ( rel_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY post_id (post_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->postmeta ( meta_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY post_id (post_id), KEY meta_key (meta_key) ) $charset_collate; CREATE TABLE $wpdb->posts ( ID bigint(20) unsigned NOT NULL auto_increment, post_author bigint(20) NOT NULL default '0', post_date datetime NOT NULL default '0000-00-00 00:00:00', post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content longtext NOT NULL, post_title text NOT NULL, post_category int(4) NOT NULL default '0', post_excerpt text NOT NULL, post_status enum('publish','draft','private','static','object','attachment','inherit','future') NOT NULL default 'publish', comment_status enum('open','closed','registered_only') NOT NULL default 'open', ping_status enum('open','closed') NOT NULL default 'open', post_password varchar(20) NOT NULL default '', post_name varchar(200) NOT NULL default '', to_ping text NOT NULL, pinged text NOT NULL, post_modified datetime NOT NULL default '0000-00-00 00:00:00', post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content_filtered text NOT NULL, post_parent bigint(20) NOT NULL default '0', guid varchar(255) NOT NULL default '', menu_order int(11) NOT NULL default '0', post_type varchar(20) NOT NULL default 'post', post_mime_type varchar(100) NOT NULL default '', comment_count bigint(20) NOT NULL default '0', PRIMARY KEY (ID), KEY post_name (post_name), KEY type_status_date (post_type,post_status,post_date,ID) ) $charset_collate; CREATE TABLE $wpdb->users ( ID bigint(20) unsigned NOT NULL auto_increment, user_login varchar(60) NOT NULL default '', user_pass varchar(64) NOT NULL default '', user_nicename varchar(50) NOT NULL default '', user_email varchar(100) NOT NULL default '', user_url varchar(100) NOT NULL default '', user_registered datetime NOT NULL default '0000-00-00 00:00:00', user_activation_key varchar(60) NOT NULL default '', user_status int(11) NOT NULL default '0', display_name varchar(250) NOT NULL default '', PRIMARY KEY (ID), KEY user_login_key (user_login) ) $charset_collate; CREATE TABLE $wpdb->usermeta ( umeta_id bigint(20) NOT NULL auto_increment, user_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (umeta_id), KEY user_id (user_id), KEY meta_key (meta_key) ) $charset_collate;"; function populate_options() { global $wpdb, $wp_db_version; $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); add_option('siteurl', $guessurl, __('WordPress web address')); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another WordPress weblog'), __('Short tagline')); add_option('new_users_can_blog', 0); add_option('users_can_register', 0); add_option('admin_email', 'you@example.com'); add_option('start_of_week', 1); add_option('use_balanceTags', 0); add_option('use_smilies', 1); add_option('require_name_email', 1); add_option('comments_notify', 1); add_option('posts_per_rss', 10); add_option('rss_excerpt_length', 50); add_option('rss_use_excerpt', 0); add_option('mailserver_url', 'mail.example.com'); add_option('mailserver_login', 'login@example.com'); add_option('mailserver_pass', 'password'); add_option('mailserver_port', 110); add_option('default_category', 1); add_option('default_comment_status', 'open'); add_option('default_ping_status', 'open'); add_option('default_pingback_flag', 1); add_option('default_post_edit_rows', 10); add_option('posts_per_page', 10); add_option('what_to_show', 'posts'); add_option('date_format', __('F j, Y')); add_option('time_format', __('g:i a')); add_option('links_updated_date_format', __('F j, Y g:i a')); add_option('links_recently_updated_prepend', ''); add_option('links_recently_updated_append', ''); add_option('links_recently_updated_time', 120); add_option('comment_moderation', 0); add_option('moderation_notify', 1); add_option('permalink_structure'); add_option('gzipcompression', 0); add_option('hack_file', 0); add_option('blog_charset', 'UTF-8'); add_option('moderation_keys'); add_option('active_plugins'); add_option('home', $guessurl); // in case it is set, but blank, update "home" if ( !__get_option('home') ) update_option('home', $guessurl); add_option('category_base'); add_option('ping_sites', 'http://rpc.pingomatic.com/'); add_option('advanced_edit', 0); add_option('comment_max_links', 2); add_option('gmt_offset', date('Z') / 3600); // 1.5 add_option('default_email_category', 1, __('Posts by email go to this category')); add_option('recently_edited'); add_option('use_linksupdate', 0); add_option('template', 'default'); add_option('stylesheet', 'default'); add_option('comment_whitelist', 1); add_option('page_uris'); add_option('blacklist_keys'); add_option('comment_registration', 0); add_option('rss_language', 'en'); add_option('html_type', 'text/html'); // 1.5.1 add_option('use_trackback', 0); // 2.0 add_option('default_role', 'subscriber'); add_option('db_version', $wp_db_version); // 2.0.1 if ( ini_get('safe_mode') ) { // Safe mode screws up mkdir(), so we must use a flat structure. add_option('uploads_use_yearmonth_folders', 0); add_option('upload_path', 'wp-content'); } else { add_option('uploads_use_yearmonth_folders', 1); add_option('upload_path', 'wp-content/uploads'); } // 2.0.3 add_option('secret', md5(uniqid(microtime()))); // 2.1 add_option('blog_public', '1'); add_option('default_link_category', 2); add_option('show_on_front', 'posts'); // Delete unused options $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing'); foreach ($unusedoptions as $option) : delete_option($option); endforeach; // Set up a few options not to load by default $fatoptions = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); foreach ($fatoptions as $fatoption) : $wpdb->query("UPDATE $wpdb->options SET autoload = 'no' WHERE option_name = '$fatoption'"); endforeach; } function populate_roles() { populate_roles_160(); populate_roles_210(); } function populate_roles_160() { global $wp_roles; // Add roles add_role('administrator', __('Administrator')); add_role('editor', __('Editor')); add_role('author', __('Author')); add_role('contributor', __('Contributor')); add_role('subscriber', __('Subscriber')); // Add caps for Administrator role $role = get_role('administrator'); $role->add_cap('switch_themes'); $role->add_cap('edit_themes'); $role->add_cap('activate_plugins'); $role->add_cap('edit_plugins'); $role->add_cap('edit_users'); $role->add_cap('edit_files'); $role->add_cap('manage_options'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('import'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_10'); $role->add_cap('level_9'); $role->add_cap('level_8'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Editor role $role = get_role('editor'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Author role $role = get_role('author'); $role->add_cap('upload_files'); $role->add_cap('edit_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('read'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Contributor role $role = get_role('contributor'); $role->add_cap('edit_posts'); $role->add_cap('read'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Subscriber role $role = get_role('subscriber'); $role->add_cap('read'); $role->add_cap('level_0'); } function populate_roles_210() { $roles = array('administrator', 'editor'); foreach ($roles as $role) { $role = get_role($role); if ( empty($role) ) continue; $role->add_cap('edit_others_pages'); $role->add_cap('edit_published_pages'); $role->add_cap('publish_pages'); $role->add_cap('delete_pages'); $role->add_cap('delete_others_pages'); $role->add_cap('delete_published_pages'); $role->add_cap('delete_posts'); $role->add_cap('delete_others_posts'); $role->add_cap('delete_published_posts'); $role->add_cap('delete_private_posts'); $role->add_cap('edit_private_posts'); $role->add_cap('read_private_posts'); $role->add_cap('delete_private_pages'); $role->add_cap('edit_private_pages'); $role->add_cap('read_private_pages'); } $role = get_role('administrator'); if ( ! empty($role) ) { $role->add_cap('delete_users'); $role->add_cap('create_users'); } $role = get_role('author'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); $role->add_cap('delete_published_posts'); } $role = get_role('contributor'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); } } ?>+wordpress/wp-admin/mysql/upgrade-schema.php:3=') ) { if ( ! empty($wpdb->charset) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; } $wp_queries="CREATE TABLE $wpdb->categories ( cat_ID bigint(20) NOT NULL auto_increment, cat_name varchar(55) NOT NULL default '', category_nicename varchar(200) NOT NULL default '', category_description longtext NOT NULL, category_parent bigint(20) NOT NULL default '0', category_count bigint(20) NOT NULL default '0', link_count bigint(20) NOT NULL default '0', posts_private tinyint(1) NOT NULL default '0', links_private tinyint(1) NOT NULL default '0', PRIMARY KEY (cat_ID), KEY category_nicename (category_nicename) ) $charset_collate; CREATE TABLE $wpdb->comments ( comment_ID bigint(20) unsigned NOT NULL auto_increment, comment_post_ID int(11) NOT NULL default '0', comment_author tinytext NOT NULL, comment_author_email varchar(100) NOT NULL default '', comment_author_url varchar(200) NOT NULL default '', comment_author_IP varchar(100) NOT NULL default '', comment_date datetime NOT NULL default '0000-00-00 00:00:00', comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', comment_content text NOT NULL, comment_karma int(11) NOT NULL default '0', comment_approved enum('0','1','spam') NOT NULL default '1', comment_agent varchar(255) NOT NULL default '', comment_type varchar(20) NOT NULL default '', comment_parent bigint(20) NOT NULL default '0', user_id bigint(20) NOT NULL default '0', PRIMARY KEY (comment_ID), KEY comment_approved (comment_approved), KEY comment_post_ID (comment_post_ID) ) $charset_collate; CREATE TABLE $wpdb->link2cat ( rel_id bigint(20) NOT NULL auto_increment, link_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY link_id (link_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->links ( link_id bigint(20) NOT NULL auto_increment, link_url varchar(255) NOT NULL default '', link_name varchar(255) NOT NULL default '', link_image varchar(255) NOT NULL default '', link_target varchar(25) NOT NULL default '', link_category bigint(20) NOT NULL default '0', link_description varchar(255) NOT NULL default '', link_visible enum('Y','N') NOT NULL default 'Y', link_owner int(11) NOT NULL default '1', link_rating int(11) NOT NULL default '0', link_updated datetime NOT NULL default '0000-00-00 00:00:00', link_rel varchar(255) NOT NULL default '', link_notes mediumtext NOT NULL, link_rss varchar(255) NOT NULL default '', PRIMARY KEY (link_id), KEY link_category (link_category), KEY link_visible (link_visible) ) $charset_collate; CREATE TABLE $wpdb->options ( option_id bigint(20) NOT NULL auto_increment, blog_id int(11) NOT NULL default '0', option_name varchar(64) NOT NULL default '', option_can_override enum('Y','N') NOT NULL default 'Y', option_type int(11) NOT NULL default '1', option_value longtext NOT NULL, option_width int(11) NOT NULL default '20', option_height int(11) NOT NULL default '8', option_description tinytext NOT NULL, option_admin_level int(11) NOT NULL default '1', autoload enum('yes','no') NOT NULL default 'yes', PRIMARY KEY (option_id,blog_id,option_name), KEY option_name (option_name) ) $charset_collate; CREATE TABLE $wpdb->post2cat ( rel_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY post_id (post_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->postmeta ( meta_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY post_id (post_id), KEY meta_key (meta_key) ) $charset_collate; CREATE TABLE $wpdb->posts ( ID bigint(20) unsigned NOT NULL auto_increment, post_author bigint(20) NOT NULL default '0', post_date datetime NOT NULL default '0000-00-00 00:00:00', post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content longtext NOT NULL, post_title text NOT NULL, post_category int(4) NOT NULL default '0', post_excerpt text NOT NULL, post_status enum('publish','draft','private','static','object','attachment','inherit','future') NOT NULL default 'publish', comment_status enum('open','closed','registered_only') NOT NULL default 'open', ping_status enum('open','closed') NOT NULL default 'open', post_password varchar(20) NOT NULL default '', post_name varchar(200) NOT NULL default '', to_ping text NOT NULL, pinged text NOT NULL, post_modified datetime NOT NULL default '0000-00-00 00:00:00', post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content_filtered text NOT NULL, post_parent bigint(20) NOT NULL default '0', guid varchar(255) NOT NULL default '', menu_order int(11) NOT NULL default '0', post_type varchar(20) NOT NULL default 'post', post_mime_type varchar(100) NOT NULL default '', comment_count bigint(20) NOT NULL default '0', PRIMARY KEY (ID), KEY post_name (post_name), KEY type_status_date (post_type,post_status,post_date,ID) ) $charset_collate; CREATE TABLE $wpdb->users ( ID bigint(20) unsigned NOT NULL auto_increment, user_login varchar(60) NOT NULL default '', user_pass varchar(64) NOT NULL default '', user_nicename varchar(50) NOT NULL default '', user_email varchar(100) NOT NULL default '', user_url varchar(100) NOT NULL default '', user_registered datetime NOT NULL default '0000-00-00 00:00:00', user_activation_key varchar(60) NOT NULL default '', user_status int(11) NOT NULL default '0', display_name varchar(250) NOT NULL default '', PRIMARY KEY (ID), KEY user_login_key (user_login) ) $charset_collate; CREATE TABLE $wpdb->usermeta ( umeta_id bigint(20) NOT NULL auto_increment, user_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (umeta_id), KEY user_id (user_id), KEY meta_key (meta_key) ) $charset_collate;"; function populate_options() { global $wpdb, $wp_db_version; $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); add_option('siteurl', $guessurl, __('WordPress web address')); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another WordPress weblog'), __('Short tagline')); add_option('new_users_can_blog', 0); add_option('users_can_register', 0); add_option('admin_email', 'you@example.com'); add_option('start_of_week', 1); add_option('use_balanceTags', 0); add_option('use_smilies', 1); add_option('require_name_email', 1); add_option('comments_notify', 1); add_option('posts_per_rss', 10); add_option('rss_excerpt_length', 50); add_option('rss_use_excerpt', 0); add_option('mailserver_url', 'mail.example.com'); add_option('mailserver_login', 'login@example.com'); add_option('mailserver_pass', 'password'); add_option('mailserver_port', 110); add_option('default_category', 1); add_option('default_comment_status', 'open'); add_option('default_ping_status', 'open'); add_option('default_pingback_flag', 1); add_option('default_post_edit_rows', 10); add_option('posts_per_page', 10); add_option('what_to_show', 'posts'); add_option('date_format', __('F j, Y')); add_option('time_format', __('g:i a')); add_option('links_updated_date_format', __('F j, Y g:i a')); add_option('links_recently_updated_prepend', ''); add_option('links_recently_updated_append', ''); add_option('links_recently_updated_time', 120); add_option('comment_moderation', 0); add_option('moderation_notify', 1); add_option('permalink_structure'); add_option('gzipcompression', 0); add_option('hack_file', 0); add_option('blog_charset', 'UTF-8'); add_option('moderation_keys'); add_option('active_plugins'); add_option('home', $guessurl); // in case it is set, but blank, update "home" if ( !__get_option('home') ) update_option('home', $guessurl); add_option('category_base'); add_option('ping_sites', 'http://rpc.pingomatic.com/'); add_option('advanced_edit', 0); add_option('comment_max_links', 2); add_option('gmt_offset', date('Z') / 3600); // 1.5 add_option('default_email_category', 1, __('Posts by email go to this category')); add_option('recently_edited'); add_option('use_linksupdate', 0); add_option('template', 'default'); add_option('stylesheet', 'default'); add_option('comment_whitelist', 1); add_option('page_uris'); add_option('blacklist_keys'); add_option('comment_registration', 0); add_option('rss_language', 'en'); add_option('html_type', 'text/html'); // 1.5.1 add_option('use_trackback', 0); // 2.0 add_option('default_role', 'subscriber'); add_option('db_version', $wp_db_version); // 2.0.1 if ( ini_get('safe_mode') ) { // Safe mode screws up mkdir(), so we must use a flat structure. add_option('uploads_use_yearmonth_folders', 0); add_option('upload_path', 'wp-content'); } else { add_option('uploads_use_yearmonth_folders', 1); add_option('upload_path', 'wp-content/uploads'); } // 2.0.3 add_option('secret', md5(uniqid(microtime()))); // 2.1 add_option('blog_public', '1'); add_option('default_link_category', 2); add_option('show_on_front', 'posts'); // Delete unused options $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing'); foreach ($unusedoptions as $option) : delete_option($option); endforeach; // Set up a few options not to load by default $fatoptions = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); foreach ($fatoptions as $fatoption) : $wpdb->query("UPDATE $wpdb->options SET autoload = 'no' WHERE option_name = '$fatoption'"); endforeach; } function populate_roles() { populate_roles_160(); populate_roles_210(); } function populate_roles_160() { global $wp_roles; // Add roles add_role('administrator', __('Administrator')); add_role('editor', __('Editor')); add_role('author', __('Author')); add_role('contributor', __('Contributor')); add_role('subscriber', __('Subscriber')); // Add caps for Administrator role $role = get_role('administrator'); $role->add_cap('switch_themes'); $role->add_cap('edit_themes'); $role->add_cap('activate_plugins'); $role->add_cap('edit_plugins'); $role->add_cap('edit_users'); $role->add_cap('edit_files'); $role->add_cap('manage_options'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('import'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_10'); $role->add_cap('level_9'); $role->add_cap('level_8'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Editor role $role = get_role('editor'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Author role $role = get_role('author'); $role->add_cap('upload_files'); $role->add_cap('edit_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('read'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Contributor role $role = get_role('contributor'); $role->add_cap('edit_posts'); $role->add_cap('read'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Subscriber role $role = get_role('subscriber'); $role->add_cap('read'); $role->add_cap('level_0'); } function populate_roles_210() { $roles = array('administrator', 'editor'); foreach ($roles as $role) { $role = get_role($role); if ( empty($role) ) continue; $role->add_cap('edit_others_pages'); $role->add_cap('edit_published_pages'); $role->add_cap('publish_pages'); $role->add_cap('delete_pages'); $role->add_cap('delete_others_pages'); $role->add_cap('delete_published_pages'); $role->add_cap('delete_posts'); $role->add_cap('delete_others_posts'); $role->add_cap('delete_published_posts'); $role->add_cap('delete_private_posts'); $role->add_cap('edit_private_posts'); $role->add_cap('read_private_posts'); $role->add_cap('delete_private_pages'); $role->add_cap('edit_private_pages'); $role->add_cap('read_private_pages'); } $role = get_role('administrator'); if ( ! empty($role) ) { $role->add_cap('delete_users'); $role->add_cap('create_users'); } $role = get_role('author'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); $role->add_cap('delete_published_posts'); } $role = get_role('contributor'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); } } ?>$wordpress/wp-admin/odbc/.svn/entriesx8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-admin/odbc svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 upgrade-schema.php file 2008-11-20T16:30:49.000000Z 30e67e0e8bc53b930f9ec556c9f79408 2008-10-28T18:17:06.112729Z 97 paul has-props #wordpress/wp-admin/odbc/.svn/format8 Bwordpress/wp-admin/odbc/.svn/prop-base/upgrade-schema.php.svn-baseK 14 svn:executable V 1 * END Bwordpress/wp-admin/odbc/.svn/text-base/upgrade-schema.php.svn-base5categories ( cat_ID int NOT NULL IDENTITY (START WITH 1), cat_name varchar NOT NULL default '', category_nicename varchar NOT NULL default '', category_description VARCHAR NOT NULL default '', category_parent int NOT NULL default 0, category_count int NOT NULL default 0, link_count int NOT NULL default 0, posts_private int NOT NULL default 0, links_private int NOT NULL default 0, PRIMARY KEY (cat_ID) ); CREATE TABLE $wpdb->comments ( comment_ID int NOT NULL IDENTITY (START WITH 1), comment_post_ID int NOT NULL default 0, comment_author VARCHAR NOT NULL default '', comment_author_email varchar NOT NULL default '', comment_author_url varchar NOT NULL default '', comment_author_IP varchar NOT NULL default '', comment_date VARCHAR NOT NULL default '1900-01-01 00:00:00', comment_date_gmt VARCHAR NOT NULL default '1900-01-01 00:00:00', comment_content varchar NOT NULL default '', comment_karma int NOT NULL default 0, comment_approved varchar NOT NULL default '1', comment_agent varchar NOT NULL default '', comment_type varchar NOT NULL default '', comment_parent int NOT NULL default 0, user_id int NOT NULL default 0, PRIMARY KEY (comment_ID) ); CREATE TABLE $wpdb->link2cat ( rel_id int NOT NULL IDENTITY (START WITH 1), link_id int NOT NULL default 0, category_id int NOT NULL default 0, PRIMARY KEY (rel_id) ); CREATE TABLE $wpdb->links ( link_id int NOT NULL IDENTITY (START WITH 1), link_url varchar NOT NULL default '', link_name varchar NOT NULL default '', link_image varchar NOT NULL default '', link_target varchar NOT NULL default '', link_category int NOT NULL default 0, link_description varchar NOT NULL default '', link_visible char(1) NOT NULL default 'Y', link_owner int NOT NULL default 1, link_rating int NOT NULL default 0, link_updated VARCHAR NOT NULL default '1900-01-01 00:00:00', link_rel varchar NOT NULL default '', link_notes varchar NOT NULL default '', link_rss varchar NOT NULL default '', PRIMARY KEY (link_id) ); CREATE TABLE $wpdb->options ( option_id int NOT NULL IDENTITY (START WITH 1), blog_id int NOT NULL default 0, option_name varchar NOT NULL default '', option_can_override char(1) NOT NULL default 'Y', option_type int NOT NULL default 1, option_value long varchar NOT NULL default '', option_width int NOT NULL default 20, option_height int NOT NULL default 8, option_description varchar NOT NULL default '', option_admin_level int NOT NULL default 1, autoload char(3) NOT NULL default 'yes', PRIMARY KEY (option_id,blog_id,option_name) ); CREATE TABLE $wpdb->post2cat ( rel_id int NOT NULL IDENTITY (START WITH 1), post_id int NOT NULL default 0, category_id int NOT NULL default 0, PRIMARY KEY (rel_id) ); CREATE TABLE $wpdb->postmeta ( meta_id int NOT NULL IDENTITY (START WITH 1), post_id int NOT NULL default 0, meta_key varchar default NULL, meta_value varchar default '', PRIMARY KEY (meta_id) ); CREATE TABLE $wpdb->posts ( ID int NOT NULL IDENTITY (START WITH 1), post_author int NOT NULL default 0, post_date VARCHAR NOT NULL default '1900-01-01 00:00:00', post_date_gmt VARCHAR NOT NULL default '1900-01-01 00:00:00', post_content varchar NOT NULL default '', post_title VARCHAR NOT NULL default '', post_category int NOT NULL default 0, post_excerpt varchar NOT NULL default '', post_status varchar NOT NULL default 'publish', comment_status varchar NOT NULL default 'open', ping_status varchar NOT NULL default 'open', post_password varchar NOT NULL default '', post_name varchar NOT NULL default '', to_ping VARCHAR NOT NULL default '', pinged VARCHAR NOT NULL default '', post_modified VARCHAR NOT NULL default '1900-01-01 00:00:00', post_modified_gmt VARCHAR NOT NULL default '1900-01-01 00:00:00', post_content_filtered varchar NOT NULL default '', post_parent int NOT NULL default 0, guid varchar NOT NULL default '', menu_order int NOT NULL default 0, post_type varchar NOT NULL default '', post_mime_type varchar NOT NULL default '', comment_count int NOT NULL default 0, PRIMARY KEY (ID) ); CREATE TABLE $wpdb->users ( ID int NOT NULL IDENTITY (START WITH 1), user_login varchar NOT NULL default '', user_pass varchar NOT NULL default '', user_nicename varchar NOT NULL default '', user_email varchar NOT NULL default '', user_url varchar NOT NULL default '', user_registered VARCHAR NOT NULL default '1900-01-01 00:00:00', user_activation_key varchar NOT NULL default '', user_status int NOT NULL default 0, display_name varchar NOT NULL default '', PRIMARY KEY (ID) ); CREATE TABLE $wpdb->usermeta ( umeta_id int NOT NULL IDENTITY (START WITH 1), user_id int NOT NULL default 0, meta_key varchar default NULL, meta_value varchar default '', PRIMARY KEY (umeta_id) );"; function populate_options() { global $wpdb, $wp_db_version; $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); add_option('siteurl', $guessurl, __('WordPress web address')); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another WordPress weblog'), __('Short tagline')); add_option('new_users_can_blog', 0); add_option('users_can_register', 0); add_option('admin_email', 'you@example.com'); add_option('start_of_week', 1); add_option('use_balanceTags', 0); add_option('use_smilies', 1); add_option('require_name_email', 1); add_option('comments_notify', 1); add_option('posts_per_rss', 10); add_option('rss_excerpt_length', 50); add_option('rss_use_excerpt', 0); add_option('mailserver_url', 'mail.example.com'); add_option('mailserver_login', 'login@example.com'); add_option('mailserver_pass', 'password'); add_option('mailserver_port', 110); add_option('default_category', 1); add_option('default_comment_status', 'open'); add_option('default_ping_status', 'open'); add_option('default_pingback_flag', 1); add_option('default_post_edit_rows', 10); add_option('posts_per_page', 10); add_option('what_to_show', 'posts'); add_option('date_format', __('F j, Y')); add_option('time_format', __('g:i a')); add_option('links_updated_date_format', __('F j, Y g:i a')); add_option('links_recently_updated_prepend', ''); add_option('links_recently_updated_append', ''); add_option('links_recently_updated_time', 120); add_option('comment_moderation', 0); add_option('moderation_notify', 1); add_option('permalink_structure'); add_option('gzipcompression', 0); add_option('hack_file', 0); add_option('blog_charset', 'UTF-8'); add_option('moderation_keys'); add_option('active_plugins'); add_option('home', $guessurl); // in case it is set, but blank, update "home" if ( !__get_option('home') ) update_option('home', $guessurl); add_option('category_base'); add_option('ping_sites', 'http://rpc.pingomatic.com/'); add_option('advanced_edit', 0); add_option('comment_max_links', 2); add_option('gmt_offset', date('Z') / 3600); // 1.5 add_option('default_email_category', 1, __('Posts by email go to this category')); add_option('recently_edited'); add_option('use_linksupdate', 0); add_option('template', 'default'); add_option('stylesheet', 'default'); add_option('comment_whitelist', 1); add_option('page_uris'); add_option('blacklist_keys'); add_option('comment_registration', 0); add_option('rss_language', 'en'); add_option('html_type', 'text/html'); // 1.5.1 add_option('use_trackback', 0); // 2.0 add_option('default_role', 'subscriber'); add_option('db_version', $wp_db_version); // 2.0.1 if ( ini_get('safe_mode') ) { // Safe mode screws up mkdir(), so we must use a flat structure. add_option('uploads_use_yearmonth_folders', 0); add_option('upload_path', 'wp-content'); } else { add_option('uploads_use_yearmonth_folders', 1); add_option('upload_path', 'wp-content/uploads'); } // 2.0.3 add_option('secret', md5(uniqid(microtime()))); // 2.1 add_option('blog_public', '1'); add_option('default_link_category', 2); add_option('show_on_front', 'posts'); // Delete unused options $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing'); foreach ($unusedoptions as $option) : delete_option($option); endforeach; // Set up a few options not to load by default $fatoptions = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); foreach ($fatoptions as $fatoption) : $wpdb->query("UPDATE $wpdb->options SET autoload = 'no' WHERE option_name = '$fatoption'"); endforeach; } function populate_roles() { populate_roles_160(); populate_roles_210(); } function populate_roles_160() { global $wp_roles; // Add roles add_role('administrator', __('Administrator')); add_role('editor', __('Editor')); add_role('author', __('Author')); add_role('contributor', __('Contributor')); add_role('subscriber', __('Subscriber')); // Add caps for Administrator role $role = get_role('administrator'); $role->add_cap('switch_themes'); $role->add_cap('edit_themes'); $role->add_cap('activate_plugins'); $role->add_cap('edit_plugins'); $role->add_cap('edit_users'); $role->add_cap('edit_files'); $role->add_cap('manage_options'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('import'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_10'); $role->add_cap('level_9'); $role->add_cap('level_8'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Editor role $role = get_role('editor'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Author role $role = get_role('author'); $role->add_cap('upload_files'); $role->add_cap('edit_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('read'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Contributor role $role = get_role('contributor'); $role->add_cap('edit_posts'); $role->add_cap('read'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Subscriber role $role = get_role('subscriber'); $role->add_cap('read'); $role->add_cap('level_0'); } function populate_roles_210() { $roles = array('administrator', 'editor'); foreach ($roles as $role) { $role = get_role($role); if ( empty($role) ) continue; $role->add_cap('edit_others_pages'); $role->add_cap('edit_published_pages'); $role->add_cap('publish_pages'); $role->add_cap('delete_pages'); $role->add_cap('delete_others_pages'); $role->add_cap('delete_published_pages'); $role->add_cap('delete_posts'); $role->add_cap('delete_others_posts'); $role->add_cap('delete_published_posts'); $role->add_cap('delete_private_posts'); $role->add_cap('edit_private_posts'); $role->add_cap('read_private_posts'); $role->add_cap('delete_private_pages'); $role->add_cap('edit_private_pages'); $role->add_cap('read_private_pages'); } $role = get_role('administrator'); if ( ! empty($role) ) { $role->add_cap('delete_users'); $role->add_cap('create_users'); } $role = get_role('author'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); $role->add_cap('delete_published_posts'); } $role = get_role('contributor'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); } } ?> *wordpress/wp-admin/odbc/upgrade-schema.php5categories ( cat_ID int NOT NULL IDENTITY (START WITH 1), cat_name varchar NOT NULL default '', category_nicename varchar NOT NULL default '', category_description VARCHAR NOT NULL default '', category_parent int NOT NULL default 0, category_count int NOT NULL default 0, link_count int NOT NULL default 0, posts_private int NOT NULL default 0, links_private int NOT NULL default 0, PRIMARY KEY (cat_ID) ); CREATE TABLE $wpdb->comments ( comment_ID int NOT NULL IDENTITY (START WITH 1), comment_post_ID int NOT NULL default 0, comment_author VARCHAR NOT NULL default '', comment_author_email varchar NOT NULL default '', comment_author_url varchar NOT NULL default '', comment_author_IP varchar NOT NULL default '', comment_date VARCHAR NOT NULL default '1900-01-01 00:00:00', comment_date_gmt VARCHAR NOT NULL default '1900-01-01 00:00:00', comment_content varchar NOT NULL default '', comment_karma int NOT NULL default 0, comment_approved varchar NOT NULL default '1', comment_agent varchar NOT NULL default '', comment_type varchar NOT NULL default '', comment_parent int NOT NULL default 0, user_id int NOT NULL default 0, PRIMARY KEY (comment_ID) ); CREATE TABLE $wpdb->link2cat ( rel_id int NOT NULL IDENTITY (START WITH 1), link_id int NOT NULL default 0, category_id int NOT NULL default 0, PRIMARY KEY (rel_id) ); CREATE TABLE $wpdb->links ( link_id int NOT NULL IDENTITY (START WITH 1), link_url varchar NOT NULL default '', link_name varchar NOT NULL default '', link_image varchar NOT NULL default '', link_target varchar NOT NULL default '', link_category int NOT NULL default 0, link_description varchar NOT NULL default '', link_visible char(1) NOT NULL default 'Y', link_owner int NOT NULL default 1, link_rating int NOT NULL default 0, link_updated VARCHAR NOT NULL default '1900-01-01 00:00:00', link_rel varchar NOT NULL default '', link_notes varchar NOT NULL default '', link_rss varchar NOT NULL default '', PRIMARY KEY (link_id) ); CREATE TABLE $wpdb->options ( option_id int NOT NULL IDENTITY (START WITH 1), blog_id int NOT NULL default 0, option_name varchar NOT NULL default '', option_can_override char(1) NOT NULL default 'Y', option_type int NOT NULL default 1, option_value long varchar NOT NULL default '', option_width int NOT NULL default 20, option_height int NOT NULL default 8, option_description varchar NOT NULL default '', option_admin_level int NOT NULL default 1, autoload char(3) NOT NULL default 'yes', PRIMARY KEY (option_id,blog_id,option_name) ); CREATE TABLE $wpdb->post2cat ( rel_id int NOT NULL IDENTITY (START WITH 1), post_id int NOT NULL default 0, category_id int NOT NULL default 0, PRIMARY KEY (rel_id) ); CREATE TABLE $wpdb->postmeta ( meta_id int NOT NULL IDENTITY (START WITH 1), post_id int NOT NULL default 0, meta_key varchar default NULL, meta_value varchar default '', PRIMARY KEY (meta_id) ); CREATE TABLE $wpdb->posts ( ID int NOT NULL IDENTITY (START WITH 1), post_author int NOT NULL default 0, post_date VARCHAR NOT NULL default '1900-01-01 00:00:00', post_date_gmt VARCHAR NOT NULL default '1900-01-01 00:00:00', post_content varchar NOT NULL default '', post_title VARCHAR NOT NULL default '', post_category int NOT NULL default 0, post_excerpt varchar NOT NULL default '', post_status varchar NOT NULL default 'publish', comment_status varchar NOT NULL default 'open', ping_status varchar NOT NULL default 'open', post_password varchar NOT NULL default '', post_name varchar NOT NULL default '', to_ping VARCHAR NOT NULL default '', pinged VARCHAR NOT NULL default '', post_modified VARCHAR NOT NULL default '1900-01-01 00:00:00', post_modified_gmt VARCHAR NOT NULL default '1900-01-01 00:00:00', post_content_filtered varchar NOT NULL default '', post_parent int NOT NULL default 0, guid varchar NOT NULL default '', menu_order int NOT NULL default 0, post_type varchar NOT NULL default '', post_mime_type varchar NOT NULL default '', comment_count int NOT NULL default 0, PRIMARY KEY (ID) ); CREATE TABLE $wpdb->users ( ID int NOT NULL IDENTITY (START WITH 1), user_login varchar NOT NULL default '', user_pass varchar NOT NULL default '', user_nicename varchar NOT NULL default '', user_email varchar NOT NULL default '', user_url varchar NOT NULL default '', user_registered VARCHAR NOT NULL default '1900-01-01 00:00:00', user_activation_key varchar NOT NULL default '', user_status int NOT NULL default 0, display_name varchar NOT NULL default '', PRIMARY KEY (ID) ); CREATE TABLE $wpdb->usermeta ( umeta_id int NOT NULL IDENTITY (START WITH 1), user_id int NOT NULL default 0, meta_key varchar default NULL, meta_value varchar default '', PRIMARY KEY (umeta_id) );"; function populate_options() { global $wpdb, $wp_db_version; $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); add_option('siteurl', $guessurl, __('WordPress web address')); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another WordPress weblog'), __('Short tagline')); add_option('new_users_can_blog', 0); add_option('users_can_register', 0); add_option('admin_email', 'you@example.com'); add_option('start_of_week', 1); add_option('use_balanceTags', 0); add_option('use_smilies', 1); add_option('require_name_email', 1); add_option('comments_notify', 1); add_option('posts_per_rss', 10); add_option('rss_excerpt_length', 50); add_option('rss_use_excerpt', 0); add_option('mailserver_url', 'mail.example.com'); add_option('mailserver_login', 'login@example.com'); add_option('mailserver_pass', 'password'); add_option('mailserver_port', 110); add_option('default_category', 1); add_option('default_comment_status', 'open'); add_option('default_ping_status', 'open'); add_option('default_pingback_flag', 1); add_option('default_post_edit_rows', 10); add_option('posts_per_page', 10); add_option('what_to_show', 'posts'); add_option('date_format', __('F j, Y')); add_option('time_format', __('g:i a')); add_option('links_updated_date_format', __('F j, Y g:i a')); add_option('links_recently_updated_prepend', ''); add_option('links_recently_updated_append', ''); add_option('links_recently_updated_time', 120); add_option('comment_moderation', 0); add_option('moderation_notify', 1); add_option('permalink_structure'); add_option('gzipcompression', 0); add_option('hack_file', 0); add_option('blog_charset', 'UTF-8'); add_option('moderation_keys'); add_option('active_plugins'); add_option('home', $guessurl); // in case it is set, but blank, update "home" if ( !__get_option('home') ) update_option('home', $guessurl); add_option('category_base'); add_option('ping_sites', 'http://rpc.pingomatic.com/'); add_option('advanced_edit', 0); add_option('comment_max_links', 2); add_option('gmt_offset', date('Z') / 3600); // 1.5 add_option('default_email_category', 1, __('Posts by email go to this category')); add_option('recently_edited'); add_option('use_linksupdate', 0); add_option('template', 'default'); add_option('stylesheet', 'default'); add_option('comment_whitelist', 1); add_option('page_uris'); add_option('blacklist_keys'); add_option('comment_registration', 0); add_option('rss_language', 'en'); add_option('html_type', 'text/html'); // 1.5.1 add_option('use_trackback', 0); // 2.0 add_option('default_role', 'subscriber'); add_option('db_version', $wp_db_version); // 2.0.1 if ( ini_get('safe_mode') ) { // Safe mode screws up mkdir(), so we must use a flat structure. add_option('uploads_use_yearmonth_folders', 0); add_option('upload_path', 'wp-content'); } else { add_option('uploads_use_yearmonth_folders', 1); add_option('upload_path', 'wp-content/uploads'); } // 2.0.3 add_option('secret', md5(uniqid(microtime()))); // 2.1 add_option('blog_public', '1'); add_option('default_link_category', 2); add_option('show_on_front', 'posts'); // Delete unused options $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing'); foreach ($unusedoptions as $option) : delete_option($option); endforeach; // Set up a few options not to load by default $fatoptions = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); foreach ($fatoptions as $fatoption) : $wpdb->query("UPDATE $wpdb->options SET autoload = 'no' WHERE option_name = '$fatoption'"); endforeach; } function populate_roles() { populate_roles_160(); populate_roles_210(); } function populate_roles_160() { global $wp_roles; // Add roles add_role('administrator', __('Administrator')); add_role('editor', __('Editor')); add_role('author', __('Author')); add_role('contributor', __('Contributor')); add_role('subscriber', __('Subscriber')); // Add caps for Administrator role $role = get_role('administrator'); $role->add_cap('switch_themes'); $role->add_cap('edit_themes'); $role->add_cap('activate_plugins'); $role->add_cap('edit_plugins'); $role->add_cap('edit_users'); $role->add_cap('edit_files'); $role->add_cap('manage_options'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('import'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_10'); $role->add_cap('level_9'); $role->add_cap('level_8'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Editor role $role = get_role('editor'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Author role $role = get_role('author'); $role->add_cap('upload_files'); $role->add_cap('edit_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('read'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Contributor role $role = get_role('contributor'); $role->add_cap('edit_posts'); $role->add_cap('read'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Subscriber role $role = get_role('subscriber'); $role->add_cap('read'); $role->add_cap('level_0'); } function populate_roles_210() { $roles = array('administrator', 'editor'); foreach ($roles as $role) { $role = get_role($role); if ( empty($role) ) continue; $role->add_cap('edit_others_pages'); $role->add_cap('edit_published_pages'); $role->add_cap('publish_pages'); $role->add_cap('delete_pages'); $role->add_cap('delete_others_pages'); $role->add_cap('delete_published_pages'); $role->add_cap('delete_posts'); $role->add_cap('delete_others_posts'); $role->add_cap('delete_published_posts'); $role->add_cap('delete_private_posts'); $role->add_cap('edit_private_posts'); $role->add_cap('read_private_posts'); $role->add_cap('delete_private_pages'); $role->add_cap('edit_private_pages'); $role->add_cap('read_private_pages'); } $role = get_role('administrator'); if ( ! empty($role) ) { $role->add_cap('delete_users'); $role->add_cap('create_users'); } $role = get_role('author'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); $role->add_cap('delete_published_posts'); } $role = get_role('contributor'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); } } ?> )wordpress/wp-admin/options-discussion.php

    ('.__('These settings may be overridden for individual articles.').')'; ?>

    ' ) ?>

    moderation queue. One word or IP per line. It will match inside words, so "press" will match "WordPress".') ?>

    &wordpress/wp-admin/options-general.phpb


    " />
    " />
    to be different from the directory you installed WordPress.'); ?>


    UTC time is:') ?>
    (-6 for Central Time.'); ?>)


      Documentation on date formatting. Click "Update options" to update sample output.') ?>

    #wordpress/wp-admin/options-head.php

    #wordpress/wp-admin/options-misc.php

    :
    wp-content/uploads'); ?>

    />

    (wordpress/wp-admin/options-permalink.php set_permalink_structure($permalink_structure); } if ( isset($_POST['category_base']) ) { $category_base = $_POST['category_base']; if (! empty($category_base) ) $category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']); $wp_rewrite->set_category_base($category_base); } } $permalink_structure = get_option('permalink_structure'); $category_base = get_option('category_base'); if ( (!file_exists($home_path.'.htaccess') && is_writable($home_path)) || is_writable($home_path.'.htaccess') ) $writable = true; else $writable = false; if ($wp_rewrite->using_index_permalinks()) $usingpi = true; else $usingpi = false; $wp_rewrite->flush_rules(); ?>

    URLs which have question marks and lots of numbers in them, however WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started.'); ?>


    :

    URLs here. For example, /taxonomy/tags would make your category links like http://example.org/taxonomy/tags/uncategorized/. If you leave this blank the default will be used.') ?>

    URLs here. For example, /index.php/taxonomy/tags would make your category links like http://example.org/index.php/taxonomy/tags/uncategorized/. If you leave this blank the default will be used.') ?>

    :

    .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file. Click in the field and press CTRL + a to select all.') ?>

    wordpress/wp-admin/options.php  $value) { if ( !in_array($key, array('_wpnonce', '_wp_http_referer')) ) $options[] = $key; } } else { $options = explode(',', stripslashes($_POST['page_options'])); } if ($options) { foreach ($options as $option) { $option = trim($option); $value = trim($_POST[$option]); $value = sanitize_option($option, $value); // This does stripslashes on those that need it update_option($option, $value); } } $referred = remove_query_arg('updated' , wp_get_referer()); $goback = add_query_arg('updated', 'true', wp_get_referer()); $goback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $goback); wp_redirect($goback); break; default: include('admin-header.php'); ?>

    get_results("SELECT * FROM $wpdb->options ORDER BY option_name"); foreach ( (array) $options as $option) : $disabled = ''; $option->option_name = attribute_escape($option->option_name); if ( is_serialized($option->option_value) ) { if ( is_serialized_string($option->option_value) ) { // this is a serialized string, so we should display it $value = maybe_unserialize($option->option_value); $options_to_update[] = $option->option_name; $class = 'all-options'; } else { $value = 'SERIALIZED DATA'; $disabled = ' disabled="disabled"'; $class = 'all-options disabled'; } } else { $value = $option->option_value; $options_to_update[] = $option->option_name; $class = 'all-options'; } echo " "; endforeach; ?>
    "; if (strpos($value, "\n") != false) echo ""; else echo ""; echo " $option->option_description

    &wordpress/wp-admin/options-privacy.php

    />

    />

    &wordpress/wp-admin/options-reading.php

    Warning: these pages should not be the same!'); ?>


    <!--more--> feature, it will cut off posts in RSS feeds.'); ?>


    recommended)') ?>

    &wordpress/wp-admin/options-writing.php


    %s, %s, %s.'), substr(md5(uniqid(microtime())),0,5), substr(md5(uniqid(microtime())),0,5), substr(md5(uniqid(microtime())),0,5)) ?>

    Update Services on the Codex. Separate multiple service URLs with line breaks.') ?>

    Update Services because of your blog\'s privacy settings.'), 'options-privacy.php'); ?>

    wordpress/wp-admin/page-new.phpP

    | »

    post_type = 'page'; include('edit-page-form.php'); } ?> wordpress/wp-admin/page.phpvpost_type ) { wp_redirect("post.php?action=edit&post=$post_ID"); exit(); } if($post->post_status == 'draft') { wp_enqueue_script('prototype'); wp_enqueue_script('interface'); wp_enqueue_script('autosave'); } require_once('admin-header.php'); if ( !current_user_can('edit_page', $page_ID) ) die ( __('You are not allowed to edit this page.') ); include('edit-page-form.php'); break; case 'editattachment': $page_id = $post_ID = (int) $_POST['post_ID']; check_admin_referer('update-attachment_' . $page_id); // Don't let these be changed unset($_POST['guid']); $_POST['post_type'] = 'attachment'; // Update the thumbnail filename $newmeta = wp_get_attachment_metadata( $page_id, true ); $newmeta['thumb'] = $_POST['thumb']; wp_update_attachment_metadata( $newmeta ); case 'editpost': $page_ID = (int) $_POST['post_ID']; check_admin_referer('update-page_' . $page_ID); $page_ID = edit_post(); if ( 'post' == $_POST['originalaction'] ) { if (!empty($_POST['mode'])) { switch($_POST['mode']) { case 'bookmarklet': $location = $_POST['referredby']; break; case 'sidebar': $location = 'sidebar.php?a=b'; break; default: $location = 'page-new.php'; break; } } else { $location = "page-new.php?posted=$page_ID"; } if ( isset($_POST['save']) ) $location = "page.php?action=edit&post=$page_ID"; } else { if ($_POST['save']) { $location = "page.php?action=edit&post=$page_ID"; } elseif ($_POST['updatemeta']) { $location = wp_get_referer() . '&message=2#postcustom'; } elseif ($_POST['deletemeta']) { $location = wp_get_referer() . '&message=3#postcustom'; } elseif (!empty($_POST['referredby']) && $_POST['referredby'] != wp_get_referer()) { $location = $_POST['referredby']; if ( $_POST['referredby'] == 'redo' ) $location = get_permalink( $page_ID ); } elseif ($action == 'editattachment') { $location = 'attachments.php'; } else { $location = 'page-new.php'; } } wp_redirect($location); // Send user on their way while we keep working exit(); break; case 'delete': $page_id = (isset($_GET['post'])) ? intval($_GET['post']) : intval($_POST['post_ID']); check_admin_referer('delete-page_' . $page_id); $page = & get_post($page_id); if ( !current_user_can('delete_page', $page_id) ) wp_die( __('You are not allowed to delete this page.') ); if ( $page->post_type == 'attachment' ) { if ( ! wp_delete_attachment($page_id) ) wp_die( __('Error in deleting...') ); } else { if ( !wp_delete_post($page_id) ) wp_die( __('Error in deleting...') ); } $sendback = wp_get_referer(); if (strpos($sendback, 'page.php') != false) $sendback = get_option('siteurl') .'/wp-admin/page.php'; elseif (strpos($sendback, 'attachments.php') != false) $sendback = get_option('siteurl') .'/wp-admin/attachments.php'; $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback); wp_redirect($sendback); exit(); break; default: wp_redirect('edit-pages.php'); exit(); break; } // end switch include('admin-footer.php'); ?> $wordpress/wp-admin/plugin-editor.php6'.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); $newcontent = stripslashes($_POST['newcontent']); if (is_writeable($real_file)) { $f = fopen($real_file, 'w+'); fwrite($f, $newcontent); fclose($f); // Deactivate so we can test it. $current = get_option('active_plugins'); if ( in_array($file, $current) || isset($_POST['phperror']) ) { if ( in_array($file, $current) ) { array_splice($current, array_search( $file, $current), 1 ); // Array-fu! update_option('active_plugins', $current); } wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('edit-plugin-test_' . $file), "plugin-editor.php?file=$file&liveupdate=1")); exit(); } wp_redirect("plugin-editor.php?file=$file&a=te"); } else { wp_redirect("plugin-editor.php?file=$file"); } exit(); break; default: if ( !current_user_can('edit_plugins') ) wp_die('

    '.__('You do not have sufficient permissions to edit plugins for this blog.').'

    '); if ( $_GET['liveupdate'] ) { check_admin_referer('edit-plugin-test_' . $file); $current = get_option('active_plugins'); $plugin = $file; if ( validate_file($plugin) ) wp_die(__('Invalid plugin.')); if ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) ) wp_die(__('Plugin file does not exist.')); if (!in_array($plugin, $current)) { wp_redirect("plugin-editor.php?file=$file&phperror=1"); // we'll override this later if the plugin can be included without fatal error @include(ABSPATH . PLUGINDIR . '/' . $plugin); $current[] = $plugin; sort($current); update_option('active_plugins', $current); } wp_redirect("plugin-editor.php?file=$file&a=te"); } require_once('admin-header.php'); update_recently_edited(PLUGINDIR . "/$file"); if (!is_file($real_file)) $error = 1; if (!$error) { $f = fopen($real_file, 'r'); $content = fread($f, filesize($real_file)); $content = htmlspecialchars($content); } ?>

    fatal error.') ?>

    ' . sprintf(__('Editing %s (active)'), $file) . ''; } else { echo '

    ' . sprintf(__('Browsing %s (active)'), $file) . '

    '; } } else { if (is_writeable($real_file)) { echo '

    ' . sprintf(__('Editing %s (inactive)'), $file) . '

    '; } else { echo '

    ' . sprintf(__('Browsing %s (inactive)'), $file) . '

    '; } } ?>

    Warning: Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?>

    "; else echo ""; ?>

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; } ?>
     
    wordpress/wp-admin/plugins.php

    fatal error.') ?>

    activated.') ?>

    deactivated.') ?>

    deactivated.'); ?>

    '; _e("Couldn’t open plugins directory or there are no plugins available."); // TODO: make more helpful echo '

    '; } else { ?> $plugin_data) { $style = ('class="alternate"' == $style|| 'class="alternate active"' == $style) ? '' : 'alternate'; if (!empty($current_plugins) && in_array($plugin_file, $current_plugins)) { $toggle = "".__('Deactivate').""; $plugin_data['Title'] = "{$plugin_data['Title']}"; $style .= $style == 'alternate' ? ' active' : 'active'; } else { $toggle = "".__('Activate').""; } $plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()); // Sanitize all displayed data $plugin_data['Title'] = wp_kses($plugin_data['Title'], $plugins_allowedtags); $plugin_data['Version'] = wp_kses($plugin_data['Version'], $plugins_allowedtags); $plugin_data['Description'] = wp_kses($plugin_data['Description'], $plugins_allowedtags); $plugin_data['Author'] = wp_kses($plugin_data['Author'], $plugins_allowedtags); if ( $style != '' ) $style = 'class="' . $style . '"'; if ( is_writable(ABSPATH . PLUGINDIR . '/' . $plugin_file) ) $edit = "".__('Edit').""; else $edit = ''; echo " "; if ( current_user_can('edit_plugins') ) echo " "; echo" "; } ?>
    >
    {$plugin_data['Title']} {$plugin_data['Version']}

    {$plugin_data['Description']} ".sprintf(__('By %s'), $plugin_data['Author']).".

    $toggle$edit
     

    %s directory and it will be automatically deactivated.'), PLUGINDIR); ?>

    WordPress plugin directory.'); ?>

    %s directory. Once a plugin is uploaded, you may activate it here.'), PLUGINDIR); ?>

    wordpress/wp-admin/post-new.php

    You can also e-mail the admin to ask for a promotion.
    When you’re promoted, just reload this page and you’ll be able to blog. :)'), get_option('admin_email')); ?>

    15 ) $num_drafts = 15; for ( $i = 0; $i < $num_drafts; $i++ ) { $draft = $drafts[$i]; if ( 0 != $i ) echo ', '; if ( empty($draft->post_title) ) $draft->post_title = sprintf(__('Post # %s'), $draft->ID); echo "$draft->post_title"; } if ( 15 < count($drafts) ) { ?> , » .




    wordpress/wp-admin/post.phpOpost_type ) { wp_redirect("page.php?action=edit&post=$post_ID"); exit(); } if($post->post_status == 'draft') { wp_enqueue_script('prototype'); wp_enqueue_script('autosave'); } require_once('admin-header.php'); if ( !current_user_can('edit_post', $post_ID) ) die ( __('You are not allowed to edit this post.') ); $post = get_post_to_edit($post_ID); include('edit-form-advanced.php'); break; case 'editattachment': $post_id = (int) $_POST['post_ID']; check_admin_referer('update-attachment_' . $post_id); // Don't let these be changed unset($_POST['guid']); $_POST['post_type'] = 'attachment'; // Update the thumbnail filename $newmeta = wp_get_attachment_metadata( $post_id, true ); $newmeta['thumb'] = $_POST['thumb']; wp_update_attachment_metadata( $post_id, $newmeta ); case 'editpost': $post_ID = (int) $_POST['post_ID']; check_admin_referer('update-post_' . $post_ID); $post_ID = edit_post(); if ( 'post' == $_POST['originalaction'] ) { if (!empty($_POST['mode'])) { switch($_POST['mode']) { case 'bookmarklet': $location = $_POST['referredby']; break; case 'sidebar': $location = 'sidebar.php?a=b'; break; default: $location = 'post-new.php'; break; } } else { $location = "post-new.php?posted=$post_ID"; } if ( isset($_POST['save']) ) $location = "post.php?action=edit&post=$post_ID"; } else { $referredby = ''; if ( !empty($_POST['referredby']) ) $referredby = preg_replace('|https?://[^/]+|i', '', $_POST['referredby']); $referer = preg_replace('|https?://[^/]+|i', '', wp_get_referer()); if ($_POST['save']) { $location = "post.php?action=edit&post=$post_ID"; } elseif ($_POST['updatemeta']) { $location = wp_get_referer() . '&message=2#postcustom'; } elseif ($_POST['deletemeta']) { $location = wp_get_referer() . '&message=3#postcustom'; } elseif (!empty($referredby) && $referredby != $referer) { $location = $_POST['referredby']; if ( $_POST['referredby'] == 'redo' ) $location = get_permalink( $post_ID ); } elseif ($action == 'editattachment') { $location = 'attachments.php'; } else { $location = 'post-new.php'; } } wp_redirect($location); // Send user on their way while we keep working exit(); break; case 'delete': $post_id = (isset($_GET['post'])) ? intval($_GET['post']) : intval($_POST['post_ID']); check_admin_referer('delete-post_' . $post_id); $post = & get_post($post_id); if ( !current_user_can('delete_post', $post_id) ) wp_die( __('You are not allowed to delete this post.') ); if ( $post->post_type == 'attachment' ) { if ( ! wp_delete_attachment($post_id) ) wp_die( __('Error in deleting...') ); } else { if ( !wp_delete_post($post_id) ) wp_die( __('Error in deleting...') ); } $sendback = wp_get_referer(); if (strpos($sendback, 'post.php') != false) $sendback = get_option('siteurl') .'/wp-admin/post-new.php'; elseif (strpos($sendback, 'attachments.php') != false) $sendback = get_option('siteurl') .'/wp-admin/attachments.php'; $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback); wp_redirect($sendback); exit(); break; default: wp_redirect('edit.php'); exit(); break; } // end switch include('admin-footer.php'); ?> wordpress/wp-admin/profile.php



    caps) > count($profileuser->roles)): ?>
    caps as $cap => $value) { if(!$wp_roles->is_role($cap)) { if($output != '') $output .= ', '; $output .= $value ? $cap : "Denied: {$cap}"; } } echo $output; ?>

    %wordpress/wp-admin/profile-update.php get_error_messages() as $message ) echo "$message
    "; exit; } do_action('personal_options_update'); if ( 'profile' == $_POST['from'] ) $to = 'profile.php?updated=true'; else $to = 'profile.php?updated=true'; wp_redirect( $to ); exit; ?> wordpress/wp-admin/rtl.css#viewarc, #viewcat, #namediv, #emaildiv, #uridiv, #planetnews li, #login ul li, #your-profile fieldset, #footer .logo, .alignleft .available-theme { float: right; } #templateside, .alignright { float: left; } #login #send, .readmore, .widefat th { text-align: right; } #postcustomsubmit, form#upload th, .submit, .editform th { text-align: left; } #devnews h4, #wphead h1, #your-profile legend, fieldset.options legend, #planetnews li .post { font-family: Tahoma, Georgia, "Times New Roman", Times, serif; } #wphead { padding: .8em 2em .8em 19em; } #wphead h1 { font-size: 2.4em; } #postdiv, #titlediv, #guiddiv, #tagdiv { margin: 0 0 0 8px; } #ed_toolbar input { margin: 3px 0 2px 2px; } #edButtons input, #edButtons input:active { margin: 0px 0 -1px 2px; } body, td { font: 13px Tahoma, "Lucida Grande", "Lucida Sans Unicode", Verdana; } h1, h2, h3, h4, h5 { font-family: "Times New Roman", Times, serif; } h3.dbx-handle { font-family: tahoma, Verdana, Arial, Helvetica, sans-serif; } textarea, input, select { font: 13px Tahoma, Verdana, Arial, Helvetica, sans-serif; } .quicktags, .search { font: 12px Tahoma, Georgia, "Times New Roman", Times, serif; } .updated, .confirm { padding: 0 3em 0 1em; } .submit input, .submit input:focus, .button, .button:focus { border-left-color: #999; border-right-color: #ccc; } .submit input:active, .button:active { border-left-color: #ccc; border-right-color: #999; } #adminmenu { padding: .2em 2em .3em .2em; height: 28px; } #adminmenu a { margin: 0 0 0 10px; display: block; float: right; font: 700 16px/130% "Times New Roman", Times, serif; } #adminmenu a.current { border-right: 0; border-left: 2px solid #4f96c8; } #submenu, #minisub { padding: 1px 3em 0 2em; } #submenu { height: 28px; } #submenu a { margin: 0 0 0 10px; display: block; float: right; line-height: 155%; } #submenu .current { border-right: 0; border-left: 2px solid #045290; } #currenttheme img { float: right; margin-right: auto; margin-left: 1em; } #postdiv #quicktags { padding-right: 0; padding-left: 6px; } .readmore { margin-right: auto; margin-left: 5em; } #postexcerpt div, #attachmentlinks div { margin-right: auto; margin-left: 8px; } * html #postexcerpt .dbx-toggle-open { padding-right: 0; padding-left: 8px; } #searchform { float: right; margin-right: auto; margin-left: 1em; } #poststuff { margin-right: auto; margin-left: 16em; } #template div { margin-right: auto; margin-left: 190px; } * html #template div { margin-right: auto; margin-left: 0px; } #user_info { right: auto; left: 1em; } #zeitgeist { float: left; margin-left: auto; margin-right: 1em; } #zeitgeist ul { margin: 0 .6em .3em 0; padding: 0 .6em 0 0; } .wrap ul { margin-left: 500px; } #categorydiv ul { margin-left: auto; margin-right: 10px; } #moremeta { margin-right: 0; margin-left: 15px; right: auto; left: 6%; } #moremeta .dbx-content { background: url(images/box-butt.gif) no-repeat bottom left; padding-right: 10px; padding-left: 0; text-align: right; } #moremeta .dbx-handle { background: #2685af url(images/box-head.gif) no-repeat left; margin-top: -2px; } #moremeta .dbx-box { background: url(images/box-bg.gif) repeat-y left; padding-bottom: 0; } a.dbx-toggle, a.dbx-toggle:visited { right: auto; left: 2px; } #categorychecklist { margin-right: auto; margin-left: 6px; } #ajax-response.alignleft { margin-left: auto; margin-right: 2em; } #postdivrich #edButtons { padding-left: 0; padding-right: 3px; } .page-numbers { margin-right: auto; margin-left: 3px; } a.view-link { right:auto; left:5%; margin-right:0; margin-left:220px; } #advancedstuff { direction: ltr; } #advancedstuff .dbx-handle { text-align: right; } #advancedstuff .dbx-content * { direction: rtl; }#wordpress/wp-admin/setup-config.phpl WordPress › Setup Configuration File

    WordPress

    The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now.

    "); switch($step) { case 0: ?>

    Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.

    1. Database name
    2. Database username
    3. Database password
    4. Database host
    5. Table prefix (if you want to run more than one WordPress in a single database)

    If for any reason this automatic file creation doesn't work, don't worry. All this does is fill in the database information to a configuration file. You may also simply open wp-config-sample.php in a text editor, fill in your information, and save it as wp-config.php.

    In all likelihood, these items were supplied to you by your ISP. If you do not have this information, then you will need to contact them before you can continue. If you’re all ready, let’s go!

    Below you should enter your database connection details. If you're not sure about these, contact your host.

    Database Name The name of the database you want to run WP in.
    User Name Your MySQL username
    Password ...and MySQL password.
    Database Host 99% chance you won't need to change this value.
    Table Prefix If you want to run multiple WordPress installations in a single database, change this.

    $line) { switch (substr($line,0,16)) { case "define('DB_NAME'": fwrite($handle, str_replace("putyourdbnamehere", $dbname, $line)); break; case "define('DB_USER'": fwrite($handle, str_replace("'usernamehere'", "'$uname'", $line)); break; case "define('DB_PASSW": fwrite($handle, str_replace("'yourpasswordhere'", "'$passwrd'", $line)); break; case "define('DB_HOST'": fwrite($handle, str_replace("localhost", $dbhost, $line)); break; case '$table_prefix =': fwrite($handle, str_replace('wp_', $prefix, $line)); break; default: fwrite($handle, $line); } } fclose($handle); chmod('../wp-config.php', 0666); ?>

    All right sparky! You've made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to run the install!

    wordpress/wp-admin/sidebar.php WordPress › Posted

    Posted !

    Click here to post again.

    WordPress › Sidebar

    WordPress

    Title:

    Categories:

    Post:

    wordpress/wp-admin/.svn/entries(w8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-admin svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 options-head.php file 2008-11-20T16:30:49.000000Z ac6159ffbedabb0d5455a7abf5ffa74c 2008-10-28T18:17:06.112729Z 97 paul menu-header.php file 2008-11-20T16:30:49.000000Z 335aa155708bb56ffb2a7e5425be0c8b 2008-10-28T18:17:06.112729Z 97 paul edit-comments.js file 2008-11-20T16:30:49.000000Z 8b98dc81013e5510adde5c9280c410b6 2008-10-28T18:17:06.112729Z 97 paul update-links.php file 2008-11-20T16:30:49.000000Z 5ce36e3364c116c47eb58ba78c3e7c2e 2008-10-28T18:17:06.112729Z 97 paul users.php file 2008-11-20T16:30:49.000000Z 53a7a4483ff0d65c8f1dd54abbc7c55d 2008-10-28T18:17:06.112729Z 97 paul custom-fields.js file 2008-11-20T16:30:49.000000Z 5b555632a4efda6f8419e1bff3e35cd9 2008-10-28T18:17:06.112729Z 97 paul options-privacy.php file 2008-11-20T16:30:49.000000Z 31f56f2bf3a2bd7e0bca9851cbe1d0f9 2008-10-28T18:17:06.112729Z 97 paul install.css file 2008-11-20T16:30:49.000000Z 234fed47c9eef92ca35985d459a99dbf 2008-10-28T18:17:06.112729Z 97 paul widgets.css file 2008-11-20T16:30:49.000000Z d751fab844dac51f11dfcde4bcd951fe 2008-10-28T18:17:06.112729Z 97 paul edit-comments.php file 2008-11-20T16:30:49.000000Z 8fcbc5a3cb70438e369e8b7e2b0edd0d 2008-10-28T18:17:06.112729Z 97 paul admin-ajax.php file 2008-11-20T16:30:49.000000Z 5cb2de703d508176f1dc8c0bbb3b8177 2008-10-28T18:17:06.112729Z 97 paul post-new.php file 2008-11-20T16:30:49.000000Z 744850eba1700d266763acd63c27a6bd 2008-10-28T18:17:06.112729Z 97 paul wp-admin.css file 2008-11-20T16:30:49.000000Z cd8134a147e7105f539b171536b6fc12 2008-10-28T18:17:06.112729Z 97 paul profile-update.php file 2008-11-20T16:30:49.000000Z 17066d8468c4b7ea9dea3d0653833036 2008-10-28T18:17:06.112729Z 97 paul install-helper.php file 2008-11-20T16:30:49.000000Z fbbd998c203ee34df2afdd2e28e1024a 2008-10-28T18:17:06.112729Z 97 paul post.php file 2008-11-20T16:30:49.000000Z 1d9d120812700a7f4322e8e3b9038426 2008-10-28T18:17:06.112729Z 97 paul theme-editor.php file 2008-11-20T16:30:49.000000Z 6e263dcdc997100604e6b66a4e2e7497 2008-10-28T18:17:06.112729Z 97 paul admin.php file 2008-11-20T16:30:49.000000Z 2605d9c0540604092663466ceda4433e 2008-10-28T18:17:06.112729Z 97 paul upgrade-functions.php file 2008-11-20T16:30:49.000000Z bbde4b9e669cd8fe585d3828dcda9761 2008-10-28T18:17:06.112729Z 97 paul admin-functions.php file 2008-11-20T16:30:49.000000Z b590aa5322a76069d2676987181420f0 2008-10-28T18:17:06.112729Z 97 paul templates.php file 2008-11-20T16:30:49.000000Z 96819b3b6a866dabb0cd0eb97cf43412 2008-10-28T18:17:06.112729Z 97 paul custom-header.php file 2008-11-20T16:30:49.000000Z d39c9ed9271d86acb265b4ad58d3fdc1 2008-10-28T18:17:06.112729Z 97 paul edit-page-form.php file 2008-11-20T16:30:49.000000Z 17ffd1635bbe275b7b6b41d5f80cd3bd 2008-10-28T18:17:06.112729Z 97 paul moderation.php file 2008-11-20T16:30:49.000000Z 57041cdeea0a6d55a23dbef3189be4b1 2008-10-28T18:17:06.112729Z 97 paul rtl.css file 2008-11-20T16:30:49.000000Z 26fb3af4670b564efdefbf845d84266b 2008-10-28T18:17:06.112729Z 97 paul comment.php file 2008-11-20T16:30:49.000000Z 56c267fe4ea6b6b98c08fbb7de8b927e 2008-10-28T18:17:06.112729Z 97 paul options-general.php file 2008-11-20T16:30:49.000000Z d37a44357376354298b01a5ef740c427 2008-10-28T18:17:06.112729Z 97 paul index.php file 2008-11-20T16:30:49.000000Z e66335a8ce53c500e11e45290f40f7ec 2008-10-28T18:17:06.112729Z 97 paul categories.js__ file 2008-11-20T16:30:49.000000Z bfaebbcc8cbe45ed8eb0b40e0b03d1d3 2008-10-28T18:17:06.112729Z 97 paul upload.js file 2008-11-20T16:30:49.000000Z 12d5041ec2286e75628d255c6bdca9b8 2008-10-28T18:17:06.112729Z 97 paul admin-db.php file 2008-11-20T16:30:49.000000Z 9b9a54e978649d2b601e8efaecd08d99 2008-10-28T18:17:06.112729Z 97 paul edit-link-form.php file 2008-11-20T16:30:49.000000Z 500544009a0e53454afba99067c62dd2 2008-10-28T18:17:06.112729Z 97 paul options-misc.php file 2008-11-20T16:30:49.000000Z 11b8c12044f0ead0773b2e37b32a85a4 2008-10-28T18:17:06.112729Z 97 paul upload-rtl.css file 2008-11-20T16:30:49.000000Z 6ac6023d409ec51409d67d7ee6b5a1b4 2008-10-28T18:17:06.112729Z 97 paul upload.php file 2008-11-20T16:30:49.000000Z 11bdede3f2b4c655cc402525a4f099ac 2008-10-28T18:17:06.112729Z 97 paul import dir edit-form-comment.php file 2008-11-20T16:30:49.000000Z e77dbf1c5a2b320369ec90770e52c1aa 2008-10-28T18:17:06.112729Z 97 paul edit-form.php file 2008-11-20T16:30:49.000000Z e00aa855a6622dbea3145feccc9b2601 2008-10-28T18:17:06.112729Z 97 paul edit-form-advanced.php file 2008-11-20T16:30:49.000000Z 333d1ecc583840090e64278eb321d57e 2008-10-28T18:17:06.112729Z 97 paul cat.js__ file 2008-11-20T16:30:49.000000Z c3ed1d4a7f90e5fc6c067e3565909868 2008-10-28T18:17:06.112729Z 97 paul upload-functions.php file 2008-11-20T16:30:49.000000Z 15b2e608e4c83d9a9f7837144bd0f7dd 2008-10-28T18:17:06.112729Z 97 paul menu.php file 2008-11-20T16:30:49.000000Z df2cc84eb9ad33673a2113fadcbcf47a 2008-10-28T18:17:06.112729Z 97 paul link-import.php file 2008-11-20T16:30:49.000000Z 3695afbab5132e78fabbfd93435792ce 2008-10-28T18:17:06.112729Z 97 paul categories.js file 2008-11-20T16:30:49.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-10-28T18:17:06.112729Z 97 paul options-discussion.php file 2008-11-20T16:30:49.000000Z 640841080039c5e42294af6846a5e622 2008-10-28T18:17:06.112729Z 97 paul admin-header.php file 2008-11-20T16:30:49.000000Z f1db6acae88ff65f6cc81185c2b7de41 2008-10-28T18:17:06.112729Z 97 paul images dir xfn.js file 2008-11-20T16:30:49.000000Z c77c9e9a636feadfd1b2d7c07e2f2ba9 2008-10-28T18:17:06.112729Z 97 paul plugins.php file 2008-11-20T16:30:49.000000Z d6203c093f0f34c7087c7a4fcab82508 2008-10-28T18:17:06.112729Z 97 paul link-add.php file 2008-11-20T16:30:49.000000Z 6795f89ab5d2a88890a2a7041dced723 2008-10-28T18:17:06.112729Z 97 paul edit.php file 2008-11-20T16:30:49.000000Z 7ace083958c9f189c0c1683923237886 2008-10-28T18:17:06.112729Z 97 paul upload.css file 2008-11-20T16:30:49.000000Z b3503aa6a8fd1fe0996951232aedfd58 2008-10-28T18:17:06.112729Z 97 paul users.js file 2008-11-20T16:30:49.000000Z ef8872688bcab72a712e681b5bdd0c36 2008-10-28T18:17:06.112729Z 97 paul upgrade.php file 2008-11-20T16:30:49.000000Z 3247059e95ae2446dd6b5b0213ab0b9a 2008-10-28T18:17:06.112729Z 97 paul index-extra.php file 2008-11-20T16:30:49.000000Z 8528829e6b5d4fb6ba45f69ad500d50c 2008-10-28T18:17:06.112729Z 97 paul options.php file 2008-11-20T16:30:49.000000Z f5671364668c62bb6530fa5c9242d88f 2008-10-28T18:17:06.112729Z 97 paul cat.js file 2008-11-20T16:30:49.000000Z d41d8cd98f00b204e9800998ecf8427e 2008-10-28T18:17:06.112729Z 97 paul link.php file 2008-11-20T16:30:49.000000Z d8ad8226888492a841a822afc012993c 2008-10-28T18:17:06.112729Z 97 paul profile.php file 2008-11-20T16:30:49.000000Z 9228d5fdfaa7e4aba97276dad29d6be5 2008-10-28T18:17:06.112729Z 97 paul edit-category-form.php file 2008-11-20T16:30:49.000000Z 798166b2b889e96c1090dcd0517ed6b2 2008-10-28T18:17:06.112729Z 97 paul user-edit.php file 2008-11-20T16:30:49.000000Z 24c1926757c63ea611c8a2eecfe3708b 2008-10-28T18:17:06.112729Z 97 paul options-reading.php file 2008-11-20T16:30:49.000000Z 8f9325e59dd83ee93fd5badf67f53a4a 2008-10-28T18:17:06.112729Z 97 paul setup-config.php file 2008-11-20T16:30:49.000000Z 5d3bea27b6785bbbeb05278a5f20d030 2008-10-28T18:17:06.112729Z 97 paul page-new.php file 2008-11-20T16:30:49.000000Z a364899053f324c29bd007583af7bbd7 2008-10-28T18:17:06.112729Z 97 paul link-manager.php file 2008-11-20T16:30:49.000000Z 2d34757f81db420b8e4f95ab3c65463e 2008-10-28T18:17:06.112729Z 97 paul install.php file 2008-11-20T16:30:49.000000Z 0ad6cb6438731a0be0d8551fabaf9466 2008-10-28T18:17:06.112729Z 97 paul install-rtl.css file 2008-11-20T16:30:49.000000Z 77b94469c0536617ccf3f128e82629e7 2008-10-28T18:17:06.112729Z 97 paul widgets-rtl.css file 2008-11-20T16:30:49.000000Z 616cfd535e185eab0a2e2035d2367d70 2008-10-28T18:17:06.112729Z 97 paul widgets.php file 2008-11-20T16:30:49.000000Z 3343407d7b0242c9ef708e1af3c263bc 2008-10-28T18:17:06.112729Z 97 paul sidebar.php file 2008-11-20T16:30:49.000000Z 1b2760c8e14688675e826de04bf10720 2008-10-28T18:17:06.112729Z 97 paul link-parse-opml.php file 2008-11-20T16:30:49.000000Z 8b7e5287001d92d6bb0a11ed13a41756 2008-10-28T18:17:06.112729Z 97 paul bookmarklet.php file 2008-11-20T16:30:49.000000Z 2f9183b7ca03a25b249302755ef98ead 2008-10-28T18:17:06.112729Z 97 paul import.php file 2008-11-20T16:30:49.000000Z 19e460727b27fcbefa47baf868d96a60 2008-10-28T18:17:06.112729Z 97 paul options-permalink.php file 2008-11-20T16:30:49.000000Z fc212c88d6454986c4b5c0d1aca9a8fd 2008-10-28T18:17:06.112729Z 97 paul page.php file 2008-11-20T16:30:49.000000Z a159a677bd0c9b7375267c1f8b15a452 2008-10-28T18:17:06.112729Z 97 paul options-writing.php file 2008-11-20T16:30:49.000000Z d397d759b4e550eafbff93bead3eb7ad 2008-10-28T18:17:06.112729Z 97 paul dbx-admin-key.js file 2008-11-20T16:30:49.000000Z 9301b8c88339ada63969bf9c7592c805 2008-10-28T18:17:06.112729Z 97 paul mysql dir odbc dir export.php file 2008-11-20T16:30:49.000000Z c7e551d66bd7d735e4e1436ad8fd6729 2008-10-28T18:17:06.112729Z 97 paul plugin-editor.php file 2008-11-20T16:30:49.000000Z b21b5e65014abc381d92747ae34faed3 2008-10-28T18:17:06.112729Z 97 paul edit-pages.php file 2008-11-20T16:30:49.000000Z a394c135d920e42e403d48d42c10d808 2008-10-28T18:17:06.112729Z 97 paul admin-footer.php file 2008-11-20T16:30:49.000000Z e3c10ba4d4faf8f1ee493b0dfc27a971 2008-10-28T18:17:06.112729Z 97 paul categories.php file 2008-11-20T16:30:49.000000Z c9587289be6a5e9c72044438bd7f183a 2008-10-28T18:17:06.112729Z 97 paul themes.php file 2008-11-20T16:30:49.000000Z 4d1b85f6fd3e0542966b5d04a64ad866 2008-10-28T18:17:06.112729Z 97 paul upgrade-schema.php file 2008-11-20T16:30:49.000000Z 7720b5b2e088d4537aeb00dd6b4d319d 2008-10-28T18:17:06.112729Z 97 paul wordpress/wp-admin/.svn/format8 9wordpress/wp-admin/.svn/text-base/admin-ajax.php.svn-base#3"; $r .= ""; $r .= ""; $r .= "
    "; $r .= ""; return $r; } $id = (int) $_POST['id']; switch ( $_POST['action'] ) : case 'delete-comment' : if ( !$comment = get_comment( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) die('-1'); if ( wp_delete_comment( $comment->comment_ID ) ) die('1'); else die('0'); break; case 'delete-comment-as-spam' : if ( !$comment = get_comment( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) die('-1'); if ( wp_set_comment_status( $comment->comment_ID, 'spam' ) ) die('1'); else die('0'); break; case 'delete-cat' : if ( !current_user_can( 'manage_categories' ) ) die('-1'); if ( wp_delete_category( $id ) ) die('1'); else die('0'); break; case 'delete-link' : if ( !current_user_can( 'manage_links' ) ) die('-1'); if ( wp_delete_link( $id ) ) die('1'); else die('0'); break; case 'delete-meta' : if ( !$meta = get_post_meta_by_id( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $meta->post_id ) ) die('-1'); if ( delete_meta( $meta->meta_id ) ) die('1'); die('0'); break; case 'delete-post' : if ( !current_user_can( 'delete_post', $id ) ) die('-1'); if ( wp_delete_post( $id ) ) die('1'); else die('0'); break; case 'delete-page' : if ( !current_user_can( 'delete_page', $id ) ) die('-1'); if ( wp_delete_post( $id ) ) die('1'); else die('0'); break; case 'dim-comment' : if ( !$comment = get_comment( $id ) ) die('0'); if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) ) die('-1'); if ( !current_user_can( 'moderate_comments' ) ) die('-1'); if ( 'unapproved' == wp_get_comment_status($comment->comment_ID) ) { if ( wp_set_comment_status( $comment->comment_ID, 'approve' ) ) die('1'); } else { if ( wp_set_comment_status( $comment->comment_ID, 'hold' ) ) die('1'); } die('0'); break; case 'add-category' : // On the Fly if ( !current_user_can( 'manage_categories' ) ) die('-1'); $names = explode(',', $_POST['newcat']); $x = new WP_Ajax_Response(); foreach ( $names as $cat_name ) { $cat_name = trim($cat_name); if ( !$category_nicename = sanitize_title($cat_name) ) die('0'); if ( !$cat_id = category_exists( $cat_name ) ) $cat_id = wp_create_category( $cat_name ); $cat_name = wp_specialchars(stripslashes($cat_name)); $x->add( array( 'what' => 'category', 'id' => $cat_id, 'data' => "
  • " ) ); } $x->send(); break; case 'add-cat' : // From Manage->Categories if ( !current_user_can( 'manage_categories' ) ) die('-1'); if ( !$cat = wp_insert_category( $_POST ) ) die('0'); if ( !$cat = get_category( $cat ) ) die('0'); $level = 0; $cat_full_name = $cat->cat_name; $_cat = $cat; while ( $_cat->category_parent ) { $_cat = get_category( $_cat->category_parent ); $cat_full_name = $_cat->cat_name . ' — ' . $cat_full_name; $level++; } $cat_full_name = attribute_escape($cat_full_name); $x = new WP_Ajax_Response( array( 'what' => 'cat', 'id' => $cat->cat_ID, 'data' => _cat_row( $cat, $level, $cat_full_name ), 'supplemental' => array('name' => $cat_full_name, 'show-link' => sprintf(__( 'Category %s added' ), "cat-$cat->cat_ID", $cat_full_name)) ) ); $x->send(); break; case 'add-comment' : if ( !current_user_can( 'edit_post', $id ) ) die('-1'); $search = isset($_POST['s']) ? $_POST['s'] : false; $start = isset($_POST['page']) ? intval($_POST['page']) * 25 : 25; list($comments, $total) = _wp_get_comment_list( $search, $start, 1 ); if ( !$comments ) die('1'); $x = new WP_Ajax_Response(); foreach ( (array) $comments as $comment ) { get_comment( $comment ); ob_start(); _wp_comment_list_item( $comment->comment_ID ); $comment_list_item = ob_get_contents(); ob_end_clean(); $x->add( array( 'what' => 'comment', 'id' => $comment->comment_ID, 'data' => $comment_list_item ) ); } $x->send(); break; case 'add-meta' : if ( !current_user_can( 'edit_post', $id ) ) die('-1'); if ( $id < 0 ) { $now = current_time('timestamp', 1); if ( $pid = wp_insert_post( array( 'post_title' => sprintf('Draft created on %s at %s', date(get_option('date_format'), $now), date(get_option('time_format'), $now)) ) ) ) $mid = add_meta( $pid ); else die('0'); } else if ( !$mid = add_meta( $id ) ) { die('0'); } $meta = get_post_meta_by_id( $mid ); $key = $meta->meta_key; $value = $meta->meta_value; $pid = (int) $meta->post_id; $x = new WP_Ajax_Response( array( 'what' => 'meta', 'id' => $mid, 'data' => wp_ajax_meta_row( $pid, $mid, $key, $value ), 'supplemental' => array('postid' => $pid) ) ); $x->send(); break; case 'update-meta' : $mid = (int) array_pop(array_keys($_POST['meta'])); $key = $_POST['meta'][$mid]['key']; $value = $_POST['meta'][$mid]['value']; if ( !$meta = get_post_meta_by_id( $mid ) ) die('0'); // if meta doesn't exist if ( !current_user_can( 'edit_post', $meta->post_id ) ) die('-1'); if ( $u = update_meta( $mid, $key, $value ) ) { $key = stripslashes($key); $value = stripslashes($value); $x = new WP_Ajax_Response( array( 'what' => 'meta', 'id' => $mid, 'data' => wp_ajax_meta_row( $meta->post_id, $mid, $key, $value ), 'supplemental' => array('postid' => $meta->post_id) ) ); $x->send(); } die('1'); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). break; case 'add-user' : if ( !current_user_can('edit_users') ) die('-1'); require_once(ABSPATH . WPINC . '/registration.php'); if ( !$user_id = add_user() ) die('0'); elseif ( is_wp_error( $user_id ) ) { foreach( $user_id->get_error_messages() as $message ) echo "

    $message

    "; exit; } $user_object = new WP_User( $user_id ); $x = new WP_Ajax_Response( array( 'what' => 'user', 'id' => $user_id, 'data' => user_row( $user_object ), 'supplemental' => array('show-link' => sprintf(__( 'User %s added' ), "user-$user_id", $user_object->user_login)) ) ); $x->send(); break; case 'autosave' : // The name of this action is hardcoded in edit_post() $_POST['post_content'] = $_POST['content']; $_POST['post_excerpt'] = $_POST['excerpt']; $_POST['post_status'] = 'draft'; $_POST['post_category'] = explode(",", $_POST['catslist']); if($_POST['post_type'] == 'page' || empty($_POST['post_category'])) unset($_POST['post_category']); if($_POST['post_ID'] < 0) { $_POST['temp_ID'] = $_POST['post_ID']; $id = wp_write_post(); if( is_wp_error($id) ) die($id->get_error_message()); else die("$id"); } else { $post_ID = (int) $_POST['post_ID']; $_POST['ID'] = $post_ID; $post = get_post($post_ID); if ( 'page' == $post->post_type ) { if ( !current_user_can('edit_page', $post_ID) ) die(__('You are not allowed to edit this page.')); } else { if ( !current_user_can('edit_post', $post_ID) ) die(__('You are not allowed to edit this post.')); } wp_update_post($_POST); } die('0'); break; case 'autosave-generate-nonces' : $ID = (int) $_POST['post_ID']; if($_POST['post_type'] == 'post') { if(current_user_can('edit_post', $ID)) die(wp_create_nonce('update-post_' . $ID)); } if($_POST['post_type'] == 'page') { if(current_user_can('edit_page', $ID)) { die(wp_create_nonce('update-page_' . $ID)); } } die('0'); break; default : do_action( 'wp_ajax_' . $_POST['action'] ); die('0'); break; endswitch; ?> 7wordpress/wp-admin/.svn/text-base/admin-db.php.svn-base:posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author = " . $user_id . " ORDER BY ID DESC"; $query = apply_filters('get_users_drafts', $query); return $wpdb->get_results( $query ); } function get_others_drafts( $user_id ) { global $wpdb; $user = get_userdata( $user_id ); $level_key = $wpdb->prefix . 'user_level'; $editable = get_editable_user_ids( $user_id ); if( !$editable ) { $other_drafts = ''; } else { $editable = join(',', $editable); $other_drafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author IN ($editable) AND post_author <> " . $user_id); } return apply_filters('get_others_drafts', $other_drafts); } function get_editable_authors( $user_id ) { global $wpdb; $editable = get_editable_user_ids( $user_id ); if( !$editable ) { return false; } else { $editable = join(',', $editable); $authors = $wpdb->get_results( "SELECT * FROM $wpdb->users WHERE ID IN ($editable) ORDER BY display_name" ); } return apply_filters('get_editable_authors', $authors); } function get_editable_user_ids( $user_id, $exclude_zeros = true ) { global $wpdb; $user = new WP_User( $user_id ); if ( ! $user->has_cap('edit_others_posts') ) { if ( $user->has_cap('edit_posts') || $exclude_zeros == false ) return array($user->id); else return false; } $level_key = $wpdb->prefix . 'user_level'; $query = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key'"; if ( $exclude_zeros ) $query .= " AND NOT meta_value LIKE '0'"; return $wpdb->get_col( $query ); } function get_author_user_ids() { global $wpdb; $level_key = $wpdb->prefix . 'user_level'; $query = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key' AND NOT meta_value LIKE '0'"; return $wpdb->get_col( $query ); } function get_nonauthor_user_ids() { global $wpdb; $level_key = $wpdb->prefix . 'user_level'; $query = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '$level_key' AND meta_value = '0'"; return $wpdb->get_col( $query ); } function wp_insert_category($catarr) { global $wpdb; extract($catarr, EXTR_SKIP); if( trim( $cat_name ) == '' ) return 0; $cat_ID = (int) $cat_ID; // Are we updating or creating? if (!empty ($cat_ID)) $update = true; else $update = false; $cat_name = apply_filters('pre_category_name', $cat_name); if (empty ($category_nicename)) $category_nicename = sanitize_title($cat_name); else $category_nicename = sanitize_title($category_nicename); $category_nicename = apply_filters('pre_category_nicename', $category_nicename); if (empty ($category_description)) $category_description = ''; $category_description = apply_filters('pre_category_description', $category_description); $category_parent = (int) $category_parent; if ( empty($category_parent) || !get_category( $category_parent ) || ($cat_ID && cat_is_ancestor_of($cat_ID, $category_parent) ) ) $category_parent = 0; if ( isset($posts_private) ) $posts_private = (int) $posts_private; else $posts_private = 0; if ( isset($links_private) ) $links_private = (int) $links_private; else $links_private = 0; if (!$update) { $wpdb->insert("INSERT INTO $wpdb->categories (cat_name, category_nicename, category_description, category_parent) VALUES ('$cat_name', '$category_nicename', '$category_description', $category_parent)",$wpdb->categories,"cat_ID"); $cat_ID = (int) $wpdb->insert_id; } else { $wpdb->query ("UPDATE $wpdb->categories SET cat_name = '$cat_name', category_nicename = '$category_nicename', category_description = '$category_description', category_parent = $category_parent, links_private = '$links_private', posts_private = '$posts_private' WHERE cat_ID = " . $cat_ID); } if ( $category_nicename == '' ) { $category_nicename = sanitize_title($cat_name, $cat_ID ); $wpdb->query( "UPDATE $wpdb->categories SET category_nicename = '$category_nicename' WHERE cat_ID = " . $cat_ID ); } // Keep in mind when using this filter and altering the cat_ID that the two queries above // have already taken place with the OLD cat_ID // Also note that you may have post2cat entries with the old cat_ID if this is an update if ($update) { do_action('edit_category', $cat_ID); } else { do_action('create_category', $cat_ID); do_action('add_category', $cat_ID); } $cat_ID = apply_filters('cat_id_filter', $cat_ID, $update); clean_category_cache($cat_ID); if ($update) do_action('edited_category', $cat_ID); else do_action('created_category', $cat_ID); return $cat_ID; } function wp_update_category($catarr) { global $wpdb; $cat_ID = (int) $catarr['cat_ID']; if( $cat_ID == $catarr['category_parent'] ) return false; // First, get all of the original fields $category = get_category($cat_ID, ARRAY_A); // Escape data pulled from DB. $category = add_magic_quotes($category); // Merge old and new fields with new fields overwriting old ones. $catarr = array_merge($category, $catarr); return wp_insert_category($catarr); } function wp_delete_category($cat_ID) { global $wpdb; $cat_ID = (int) $cat_ID; $default_cat = get_option('default_category'); $default_link_cat = get_option('default_link_category'); // Don't delete either of the default cats if ( $cat_ID == $default_cat || $cat_ID == $default_link_cat ) return 0; $category = get_category($cat_ID); $parent = $category->category_parent; // Delete the category if ( !$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = " . $cat_ID) ) return 0; // Update children to point to new parent $wpdb->query("UPDATE $wpdb->categories SET category_parent = " . $parent . " WHERE category_parent = " . $cat_ID); // Only set posts and links to the default category if they're not in another category already $posts = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE category_id = " . $cat_ID); foreach ( (array) $posts as $post_id ) { $cats = wp_get_post_categories($post_id); if ( 1 == count($cats) ) $cats = array($default_cat); else $cats = array_diff($cats, array($cat_ID)); wp_set_post_categories($post_id, $cats); } $links = $wpdb->get_col("SELECT link_id FROM $wpdb->link2cat WHERE category_id = " . $cat_ID); foreach ( (array) $links as $link_id ) { $cats = wp_get_link_cats($link_id); if ( 1 == count($cats) ) $cats = array($default_link_cat); else $cats = array_diff($cats, array($cat_ID)); wp_set_link_cats($link_id, $cats); } clean_category_cache($cat_ID); do_action('delete_category', $cat_ID); return 1; } function wp_create_category($cat_name) { $cat_array = compact('cat_name'); return wp_insert_category($cat_array); } function wp_create_categories($categories, $post_id = '') { $cat_ids = array (); foreach ($categories as $category) { if ($id = category_exists($category)) $cat_ids[] = $id; else if ($id = wp_create_category($category)) $cat_ids[] = $id; } if ($post_id) wp_set_post_categories($post_id, $cat_ids); return $cat_ids; } function category_exists($cat_name) { global $wpdb; if (!$category_nicename = sanitize_title($cat_name)) return 0; return (int) $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE category_nicename = '$category_nicename'"); } function wp_delete_user($id, $reassign = 'novalue') { global $wpdb; $id = (int) $id; $user = get_userdata($id); if ($reassign == 'novalue') { $post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_author = " . $id); if ($post_ids) { foreach ($post_ids as $post_id) wp_delete_post($post_id); } // Clean links $wpdb->query("DELETE FROM $wpdb->links WHERE link_owner = " . $id); } else { $reassign = (int) $reassign; $wpdb->query("UPDATE $wpdb->posts SET post_author = {$reassign} WHERE post_author = {".$id."}"); $wpdb->query("UPDATE $wpdb->links SET link_owner = {$reassign} WHERE link_owner = {".$id."}"); } // FINALLY, delete user do_action('delete_user', $id); $wpdb->query("DELETE FROM $wpdb->users WHERE ID = " . $id); $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = " . $id); wp_cache_delete($id, 'users'); wp_cache_delete($user->user_login, 'userlogins'); return true; } function wp_revoke_user($id) { $id = (int) $id; $user = new WP_User($id); $user->remove_all_caps(); } function wp_insert_link($linkdata) { global $wpdb, $current_user; extract($linkdata, EXTR_SKIP); $update = false; if ( !empty($link_id) ) $update = true; $link_id = (int) $link_id; if( trim( $link_name ) == '' ) return 0; $link_name = apply_filters('pre_link_name', $link_name); if( trim( $link_url ) == '' ) return 0; $link_url = apply_filters('pre_link_url', $link_url); if ( empty($link_rating) ) $link_rating = 0; else $link_rating = (int) $link_rating; if ( empty($link_image) ) $link_image = ''; $link_image = apply_filters('pre_link_image', $link_image); if ( empty($link_target) ) $link_target = ''; $link_target = apply_filters('pre_link_target', $link_target); if ( empty($link_visible) ) $link_visible = 'Y'; $link_visibile = preg_replace('/[^YNyn]/', '', $link_visible); if ( empty($link_owner) ) $link_owner = $current_user->id; else $link_owner = (int) $link_owner; if ( empty($link_notes) ) $link_notes = ''; $link_notes = apply_filters('pre_link_notes', $link_notes); if ( empty($link_description) ) $link_description = ''; $link_description = apply_filters('pre_link_description', $link_description); if ( empty($link_rss) ) $link_rss = ''; $link_rss = apply_filters('pre_link_rss', $link_rss); if ( empty($link_rel) ) $link_rel = ''; $link_rel = apply_filters('pre_link_rel', $link_rel); // Make sure we set a valid category // if (0 == count($link_category) || !is_array($link_category)) { $link_category = get_option('default_link_category'); // } // printf ("AAAAAAAAAAAAAAAAAAAAaa"); //print_r ($link_category); if ( $update ) { $wpdb->query("UPDATE $wpdb->links SET link_url='$link_url', link_name='$link_name', link_image='$link_image', link_target='$link_target', link_visible='$link_visible', link_description='$link_description', link_rating=$link_rating, link_rel='$link_rel', link_notes='$link_notes', link_rss = '$link_rss' WHERE link_id = " . $link_id); } else { $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_image, link_target, link_category, link_description, link_visible, link_owner, link_rating, link_rel, link_notes, link_rss) VALUES('$link_url','$link_name', '$link_image', '$link_target', '$link_category', '$link_description', '$link_visible', $link_owner, $link_rating, '$link_rel', '$link_notes', '$link_rss')",$wpdb->links,"link_id"); $link_id = (int) $wpdb->insert_id; } wp_set_link_cats($link_id, $link_category); if ( $update ) do_action('edit_link', $link_id); else do_action('add_link', $link_id); return $link_id; } function wp_update_link($linkdata) { global $wpdb; $link_id = (int) $linkdata['link_id']; $link = get_link($link_id, ARRAY_A); // Escape data pulled from DB. $link = add_magic_quotes($link); // Passed link category list overwrites existing category list if not empty. if ( isset($linkdata['link_category']) && is_array($linkdata['link_category']) && 0 != count($linkdata['link_category']) ) $link_cats = $linkdata['link_category']; else $link_cats = $link['link_category']; // Merge old and new fields with new fields overwriting old ones. $linkdata = array_merge($link, $linkdata); $linkdata['link_category'] = $link_cats; return wp_insert_link($linkdata); } function wp_delete_link($link_id) { global $wpdb; do_action('delete_link', $link_id); $categories = wp_get_link_cats($link_id); if( is_array( $categories ) ) { foreach ( $categories as $category ) { $wpdb->query("UPDATE $wpdb->categories SET link_count = link_count - 1 WHERE cat_ID = " . $category); wp_cache_delete($category, 'category'); do_action('edit_category', $cat_id); } } $wpdb->query("DELETE FROM $wpdb->link2cat WHERE link_id = " . $link_id); $wpdb->query("DELETE FROM $wpdb->links WHERE link_id = " . $link_id); do_action('deleted_link', $link_id); return true; } function wp_get_link_cats($link_ID = 0) { global $wpdb; $sql = "SELECT category_id FROM $wpdb->link2cat WHERE link_id = $link_ID ORDER BY category_id"; $result = $wpdb->get_col($sql); if ( !$result ) $result = array(); return array_unique($result); } function wp_set_link_cats($link_ID = 0, $link_categories = array()) { global $wpdb; // If $link_categories isn't already an array, make it one: if (!is_array($link_categories) || 0 == count($link_categories)) $link_categories = array(get_option('default_link_category')); $link_categories = array_unique($link_categories); // First the old categories $old_categories = $wpdb->get_col(" SELECT category_id FROM $wpdb->link2cat WHERE link_id = " . $link_ID); if (!$old_categories) { $old_categories = array(); } else { $old_categories = array_unique($old_categories); } // Delete any? $delete_cats = array_diff($old_categories,$link_categories); if ($delete_cats) { foreach ($delete_cats as $del) { $del = (int) $del; $wpdb->query("DELETE FROM $wpdb->link2cat WHERE category_id = " . $del . " AND link_id = " . $link_ID ); } } // Add any? $add_cats = array_diff($link_categories, $old_categories); if ($add_cats) { foreach ($add_cats as $new_cat) { $new_cat = (int) $new_cat; if ( !empty($new_cat) ) $wpdb->query("INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES (" . $link_ID. ",". $new_cat. ")"); } } // Update category counts. $all_affected_cats = array_unique(array_merge($link_categories, $old_categories)); foreach ( $all_affected_cats as $cat_id ) { $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->link2cat, $wpdb->links WHERE $wpdb->links.link_id = $wpdb->link2cat.link_id AND category_id = " . $cat_id); $wpdb->query("UPDATE $wpdb->categories SET link_count = " . $count . " WHERE cat_ID = " . $cat_id); wp_cache_delete($cat_id, 'category'); do_action('edit_category', $cat_id); } } // wp_set_link_cats() function post_exists($title, $content = '', $post_date = '') { global $wpdb; if (!empty ($post_date)) $post_date = "AND post_date = '$post_date'"; if (!empty ($title)) return $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$title' $post_date"); else if (!empty ($content)) return $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_content = '$content' $post_date"); return 0; } function comment_exists($comment_author, $comment_date) { global $wpdb; return $wpdb->get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_author = '$comment_author' AND comment_date = '$comment_date'"); } ?> ;wordpress/wp-admin/.svn/text-base/admin-footer.php.svn-base8

    >wordpress/wp-admin/.svn/text-base/admin-functions.php.svn-base7get_error_message() ); else return $result; } // Creates a new post from the "Write Post" form using $_POST information. function wp_write_post() { global $user_ID; if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_pages' ) ) return new WP_Error( 'edit_pages', __( 'You are not allowed to create pages on this blog.' ) ); } else { if ( !current_user_can( 'edit_posts' ) ) return new WP_Error( 'edit_posts', __( 'You are not allowed to create posts or drafts on this blog.' ) ); } // Check for autosave collisions $temp_id = false; if ( isset($_POST['temp_ID']) ) { $temp_id = (int) $_POST['temp_ID']; if ( !$draft_ids = get_user_option( 'autosave_draft_ids' ) ) $draft_ids = array(); foreach ( $draft_ids as $temp => $real ) if ( time() + $temp > 86400 ) // 1 day: $temp is equal to -1 * time( then ) unset($draft_ids[$temp]); if ( isset($draft_ids[$temp_id]) ) { // Edit, don't write $_POST['post_ID'] = $draft_ids[$temp_id]; unset($_POST['temp_ID']); update_user_option( $user_ID, 'autosave_draft_ids', $draft_ids ); return edit_post(); } } // Rename. $_POST['post_content'] = $_POST['content']; $_POST['post_excerpt'] = $_POST['excerpt']; $_POST['post_parent'] = $_POST['parent_id']; $_POST['to_ping'] = $_POST['trackback_url']; if (!empty ( $_POST['post_author_override'] ) ) { $_POST['post_author'] = (int) $_POST['post_author_override']; } else { if (!empty ( $_POST['post_author'] ) ) { $_POST['post_author'] = (int) $_POST['post_author']; } else { $_POST['post_author'] = (int) $_POST['user_ID']; } } if ( $_POST['post_author'] != $_POST['user_ID'] ) { if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_others_pages' ) ) return new WP_Error( 'edit_others_pages', __( 'You are not allowed to create pages as this user.' ) ); } else { if ( !current_user_can( 'edit_others_posts' ) ) return new WP_Error( 'edit_others_posts', __( 'You are not allowed to post as this user.' ) ); } } // What to do based on which button they pressed if ('' != $_POST['saveasdraft'] ) $_POST['post_status'] = 'draft'; if ('' != $_POST['saveasprivate'] ) $_POST['post_status'] = 'private'; if ('' != $_POST['publish'] ) $_POST['post_status'] = 'publish'; if ('' != $_POST['advanced'] ) $_POST['post_status'] = 'draft'; if ( 'page' == $_POST['post_type'] ) { if ('publish' == $_POST['post_status'] && !current_user_can( 'publish_pages' ) ) $_POST['post_status'] = 'draft'; } else { if ('publish' == $_POST['post_status'] && !current_user_can( 'publish_posts' ) ) $_POST['post_status'] = 'draft'; } if (!isset( $_POST['comment_status'] )) $_POST['comment_status'] = 'closed'; if (!isset( $_POST['ping_status'] )) $_POST['ping_status'] = 'closed'; if (!empty ( $_POST['edit_date'] ) ) { $aa = $_POST['aa']; $mm = $_POST['mm']; $jj = $_POST['jj']; $hh = $_POST['hh']; $mn = $_POST['mn']; $ss = $_POST['ss']; $jj = ($jj > 31 ) ? 31 : $jj; $hh = ($hh > 23 ) ? $hh -24 : $hh; $mn = ($mn > 59 ) ? $mn -60 : $mn; $ss = ($ss > 59 ) ? $ss -60 : $ss; $_POST['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss ); $_POST['post_date_gmt'] = get_gmt_from_date( $_POST['post_date'] ); } unset($_POST['no_filter']); // Create the post. $post_ID = wp_insert_post( $_POST ); add_meta( $post_ID ); // Reunite any orphaned attachments with their parent if ( !$draft_ids = get_user_option( 'autosave_draft_ids' ) ) $draft_ids = array(); if ( $draft_temp_id = (int) array_search( $post_ID, $draft_ids ) ) relocate_children( $draft_temp_id, $post_ID ); if ( $temp_id && $temp_id != $draft_temp_id ) relocate_children( $temp_id, $post_ID ); // Update autosave collision detection if ( $temp_id ) { $draft_ids[$temp_id] = $post_ID; update_user_option( $user_ID, 'autosave_draft_ids', $draft_ids ); } // Now that we have an ID we can fix any attachment anchor hrefs fix_attachment_links( $post_ID ); return $post_ID; } // Move child posts to a new parent function relocate_children( $old_ID, $new_ID ) { global $wpdb; $old_ID = (int) $old_ID; $new_ID = (int) $new_ID; return $wpdb->query( "UPDATE $wpdb->posts SET post_parent = ". $new_ID . " WHERE post_parent = " . $old_ID ); } // Replace hrefs of attachment anchors with up-to-date permalinks. function fix_attachment_links( $post_ID ) { global $wp_rewrite; $post = & get_post( $post_ID, ARRAY_A ); $search = "#]+rel=('|\")[^'\"]*attachment[^>]*>#ie"; // See if we have any rel="attachment" links if ( 0 == preg_match_all( $search, $post['post_content'], $anchor_matches, PREG_PATTERN_ORDER ) ) return; $i = 0; $search = "#[\s]+rel=(\"|')(.*?)wp-att-(\d+)\\1#i"; foreach ( $anchor_matches[0] as $anchor ) { if ( 0 == preg_match( $search, $anchor, $id_matches ) ) continue; $id = (int) $id_matches[3]; // While we have the attachment ID, let's adopt any orphans. $attachment = & get_post( $id, ARRAY_A ); if ( ! empty( $attachment) && ! is_object( get_post( $attachment['post_parent'] ) ) ) { $attachment['post_parent'] = $post_ID; // Escape data pulled from DB. $attachment = add_magic_quotes( $attachment); wp_update_post( $attachment); } $post_search[$i] = $anchor; $post_replace[$i] = preg_replace( "#href=(\"|')[^'\"]*\\1#e", "stripslashes( 'href=\\1' ).get_attachment_link( $id ).stripslashes( '\\1' )", $anchor ); ++$i; } $post['post_content'] = str_replace( $post_search, $post_replace, $post['post_content'] ); // Escape data pulled from DB. $post = add_magic_quotes( $post); return wp_update_post( $post); } // Update an existing post with values provided in $_POST. function edit_post() { global $user_ID; $post_ID = (int) $_POST['post_ID']; if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_ID ) ) wp_die( __('You are not allowed to edit this page.' )); } else { if ( !current_user_can( 'edit_post', $post_ID ) ) wp_die( __('You are not allowed to edit this post.' )); } // Autosave shouldn't save too soon after a real save if ( 'autosave' == $_POST['action'] ) { $post =& get_post( $post_ID ); $now = time(); $then = strtotime($post->post_date_gmt . ' +0000'); // Keep autosave_interval in sync with autosave-js.php. $delta = apply_filters( 'autosave_interval', 120 ) / 2; if ( ($now - $then) < $delta ) return $post_ID; } // Rename. $_POST['ID'] = (int) $_POST['post_ID']; $_POST['post_content'] = $_POST['content']; $_POST['post_excerpt'] = $_POST['excerpt']; $_POST['post_parent'] = $_POST['parent_id']; $_POST['to_ping'] = $_POST['trackback_url']; if (!empty ( $_POST['post_author_override'] ) ) { $_POST['post_author'] = (int) $_POST['post_author_override']; } else if (!empty ( $_POST['post_author'] ) ) { $_POST['post_author'] = (int) $_POST['post_author']; } else { $_POST['post_author'] = (int) $_POST['user_ID']; } if ( $_POST['post_author'] != $_POST['user_ID'] ) { if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_others_pages' ) ) wp_die( __('You are not allowed to edit pages as this user.' )); } else { if ( !current_user_can( 'edit_others_posts' ) ) wp_die( __('You are not allowed to edit posts as this user.' )); } } // What to do based on which button they pressed if ('' != $_POST['saveasdraft'] ) $_POST['post_status'] = 'draft'; if ('' != $_POST['saveasprivate'] ) $_POST['post_status'] = 'private'; if ('' != $_POST['publish'] ) $_POST['post_status'] = 'publish'; if ('' != $_POST['advanced'] ) $_POST['post_status'] = 'draft'; if ( 'page' == $_POST['post_type'] ) { if ('publish' == $_POST['post_status'] && !current_user_can( 'edit_published_pages' )) $_POST['post_status'] = 'draft'; } else { if ('publish' == $_POST['post_status'] && !current_user_can( 'edit_published_posts' )) $_POST['post_status'] = 'draft'; } if (!isset( $_POST['comment_status'] )) $_POST['comment_status'] = 'closed'; if (!isset( $_POST['ping_status'] )) $_POST['ping_status'] = 'closed'; if (!empty ( $_POST['edit_date'] ) ) { $aa = $_POST['aa']; $mm = $_POST['mm']; $jj = $_POST['jj']; $hh = $_POST['hh']; $mn = $_POST['mn']; $ss = $_POST['ss']; $jj = ($jj > 31 ) ? 31 : $jj; $hh = ($hh > 23 ) ? $hh -24 : $hh; $mn = ($mn > 59 ) ? $mn -60 : $mn; $ss = ($ss > 59 ) ? $ss -60 : $ss; $_POST['post_date'] = "$aa-$mm-$jj $hh:$mn:$ss"; $_POST['post_date_gmt'] = get_gmt_from_date( "$aa-$mm-$jj $hh:$mn:$ss" ); } // Meta Stuff if ( $_POST['meta'] ) { foreach ( $_POST['meta'] as $key => $value ) update_meta( $key, $value['key'], $value['value'] ); } if ( $_POST['deletemeta'] ) { foreach ( $_POST['deletemeta'] as $key => $value ) delete_meta( $key ); } unset($_POST['no_filter']); add_meta( $post_ID ); wp_update_post( $_POST ); // Reunite any orphaned attachments with their parent if ( !$draft_ids = get_user_option( 'autosave_draft_ids' ) ) $draft_ids = array(); if ( $draft_temp_id = (int) array_search( $post_ID, $draft_ids ) ) relocate_children( $draft_temp_id, $post_ID ); // Now that we have an ID we can fix any attachment anchor hrefs fix_attachment_links( $post_ID ); return $post_ID; } function edit_comment() { global $user_ID; $comment_ID = (int) $_POST['comment_ID']; $comment_post_ID = (int) $_POST['comment_post_ID']; if (!current_user_can( 'edit_post', $comment_post_ID )) wp_die( __('You are not allowed to edit comments on this post, so you cannot edit this comment.' )); $_POST['comment_author'] = $_POST['newcomment_author']; $_POST['comment_author_email'] = $_POST['newcomment_author_email']; $_POST['comment_author_url'] = $_POST['newcomment_author_url']; $_POST['comment_approved'] = $_POST['comment_status']; $_POST['comment_content'] = $_POST['content']; $_POST['comment_ID'] = (int) $_POST['comment_ID']; if (!empty ( $_POST['edit_date'] ) ) { $aa = $_POST['aa']; $mm = $_POST['mm']; $jj = $_POST['jj']; $hh = $_POST['hh']; $mn = $_POST['mn']; $ss = $_POST['ss']; $jj = ($jj > 31 ) ? 31 : $jj; $hh = ($hh > 23 ) ? $hh -24 : $hh; $mn = ($mn > 59 ) ? $mn -60 : $mn; $ss = ($ss > 59 ) ? $ss -60 : $ss; $_POST['comment_date'] = "$aa-$mm-$jj $hh:$mn:$ss"; } wp_update_comment( $_POST); } // Get an existing post and format it for editing. function get_post_to_edit( $id ) { $post = get_post( $id ); $post->post_content = format_to_edit( $post->post_content, user_can_richedit() ); $post->post_content = apply_filters( 'content_edit_pre', $post->post_content); $post->post_excerpt = format_to_edit( $post->post_excerpt); $post->post_excerpt = apply_filters( 'excerpt_edit_pre', $post->post_excerpt); $post->post_title = format_to_edit( $post->post_title ); $post->post_title = apply_filters( 'title_edit_pre', $post->post_title ); $post->post_password = format_to_edit( $post->post_password ); $post->menu_order = (int) $post->menu_order; if ( $post->post_type == 'page' ) $post->page_template = get_post_meta( $id, '_wp_page_template', true ); return $post; } // Default post information to use when populating the "Write Post" form. function get_default_post_to_edit() { if ( !empty( $_REQUEST['post_title'] ) ) $post_title = wp_specialchars( stripslashes( $_REQUEST['post_title'] )); else if ( !empty( $_REQUEST['popuptitle'] ) ) { $post_title = wp_specialchars( stripslashes( $_REQUEST['popuptitle'] )); $post_title = funky_javascript_fix( $post_title ); } else { $post_title = ''; } if ( !empty( $_REQUEST['content'] ) ) $post_content = wp_specialchars( stripslashes( $_REQUEST['content'] )); else if ( !empty( $post_title ) ) { $text = wp_specialchars( stripslashes( urldecode( $_REQUEST['text'] ) ) ); $text = funky_javascript_fix( $text); $popupurl = clean_url($_REQUEST['popupurl']); $post_content = ''.$post_title.''."\n$text"; } if ( !empty( $_REQUEST['excerpt'] ) ) $post_excerpt = wp_specialchars( stripslashes( $_REQUEST['excerpt'] )); else $post_excerpt = ''; $post->post_status = 'draft'; $post->comment_status = get_option( 'default_comment_status' ); $post->ping_status = get_option( 'default_ping_status' ); $post->post_pingback = get_option( 'default_pingback_flag' ); $post->post_category = get_option( 'default_category' ); $post->post_content = apply_filters( 'default_content', $post_content); $post->post_title = apply_filters( 'default_title', $post_title ); $post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt); $post->page_template = 'default'; $post->post_parent = 0; $post->menu_order = 0; return $post; } function get_comment_to_edit( $id ) { $comment = get_comment( $id ); $comment->comment_ID = (int) $comment->comment_ID; $comment->comment_post_ID = (int) $comment->comment_post_ID; $comment->comment_content = format_to_edit( $comment->comment_content ); $comment->comment_content = apply_filters( 'comment_edit_pre', $comment->comment_content); $comment->comment_author = format_to_edit( $comment->comment_author ); $comment->comment_author_email = format_to_edit( $comment->comment_author_email ); $comment->comment_author_url = clean_url($comment->comment_author_url); $comment->comment_author_url = format_to_edit( $comment->comment_author_url ); return $comment; } function get_category_to_edit( $id ) { $category = get_category( $id ); $category->term_id = (int) $category->term_id; $category->parent = (int) $category->parent; return $category; } function wp_dropdown_roles( $default = false ) { global $wp_roles; $r = ''; foreach( $wp_roles->role_names as $role => $name ) if ( $default == $role ) // Make default first in list $p = "\n\t"; else $r .= "\n\t"; echo $p . $r; } function get_user_to_edit( $user_id ) { $user = new WP_User( $user_id ); $user->user_login = attribute_escape($user->user_login); $user->user_email = attribute_escape($user->user_email); $user->user_url = clean_url($user->user_url); $user->first_name = attribute_escape($user->first_name); $user->last_name = attribute_escape($user->last_name); $user->display_name = attribute_escape($user->display_name); $user->nickname = attribute_escape($user->nickname); $user->aim = attribute_escape($user->aim); $user->yim = attribute_escape($user->yim); $user->jabber = attribute_escape($user->jabber); $user->description = wp_specialchars($user->description); return $user; } // Creates a new user from the "Users" form using $_POST information. function add_user() { if ( func_num_args() ) { // The hackiest hack that ever did hack global $current_user, $wp_roles; $user_id = (int) func_get_arg( 0 ); if ( isset( $_POST['role'] ) ) { if( $user_id != $current_user->id || $wp_roles->role_objects[$_POST['role']]->has_cap( 'edit_users' ) ) { $user = new WP_User( $user_id ); $user->set_role( $_POST['role'] ); } } } else { add_action( 'user_register', 'add_user' ); // See above return edit_user(); } } function edit_user( $user_id = 0 ) { global $current_user, $wp_roles, $wpdb; if ( $user_id != 0 ) { $update = true; $user->ID = (int) $user_id; $userdata = get_userdata( $user_id ); $user->user_login = $wpdb->escape( $userdata->user_login ); } else { $update = false; $user = ''; } if ( isset( $_POST['user_login'] )) $user->user_login = wp_specialchars( trim( $_POST['user_login'] )); $pass1 = $pass2 = ''; if ( isset( $_POST['pass1'] )) $pass1 = $_POST['pass1']; if ( isset( $_POST['pass2'] )) $pass2 = $_POST['pass2']; if ( isset( $_POST['role'] ) && current_user_can( 'edit_users' ) ) { if( $user_id != $current_user->id || $wp_roles->role_objects[$_POST['role']]->has_cap( 'edit_users' )) $user->role = $_POST['role']; } if ( isset( $_POST['email'] )) $user->user_email = wp_specialchars( trim( $_POST['email'] )); if ( isset( $_POST['url'] ) ) { $user->user_url = clean_url( trim( $_POST['url'] )); $user->user_url = preg_match('/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $user->user_url) ? $user->user_url : 'http://'.$user->user_url; } if ( isset( $_POST['first_name'] )) $user->first_name = wp_specialchars( trim( $_POST['first_name'] )); if ( isset( $_POST['last_name'] )) $user->last_name = wp_specialchars( trim( $_POST['last_name'] )); if ( isset( $_POST['nickname'] )) $user->nickname = wp_specialchars( trim( $_POST['nickname'] )); if ( isset( $_POST['display_name'] )) $user->display_name = wp_specialchars( trim( $_POST['display_name'] )); if ( isset( $_POST['description'] )) $user->description = trim( $_POST['description'] ); if ( isset( $_POST['jabber'] )) $user->jabber = wp_specialchars( trim( $_POST['jabber'] )); if ( isset( $_POST['aim'] )) $user->aim = wp_specialchars( trim( $_POST['aim'] )); if ( isset( $_POST['yim'] )) $user->yim = wp_specialchars( trim( $_POST['yim'] )); if ( !$update ) $user->rich_editing = 'true'; // Default to true for new users. else if ( isset( $_POST['rich_editing'] ) ) $user->rich_editing = $_POST['rich_editing']; else $user->rich_editing = 'false'; $errors = new WP_Error(); /* checking that username has been typed */ if ( $user->user_login == '' ) $errors->add( 'user_login', __( 'ERROR: Please enter a username.' )); /* checking the password has been typed twice */ do_action_ref_array( 'check_passwords', array ( $user->user_login, & $pass1, & $pass2 )); if (!$update ) { if ( $pass1 == '' || $pass2 == '' ) $errors->add( 'pass', __( 'ERROR: Please enter your password twice.' )); } else { if ((empty ( $pass1 ) && !empty ( $pass2 ) ) || (empty ( $pass2 ) && !empty ( $pass1 ) ) ) $errors->add( 'pass', __( "ERROR: you typed your new password only once." )); } /* Check for "\" in password */ if( strpos( " ".$pass1, "\\" ) ) $errors->add( 'pass', __( 'ERROR: Passwords may not contain the character "\\".' )); /* checking the password has been typed twice the same */ if ( $pass1 != $pass2 ) $errors->add( 'pass', __( 'ERROR: Please type the same password in the two password fields.' )); if (!empty ( $pass1 )) $user->user_pass = $pass1; if ( !$update && !validate_username( $user->user_login ) ) $errors->add( 'user_login', __( 'ERROR: This username is invalid. Please enter a valid username.' )); if (!$update && username_exists( $user->user_login )) $errors->add( 'user_login', __( 'ERROR: This username is already registered, please choose another one.' )); /* checking e-mail address */ if ( empty ( $user->user_email ) ) { $errors->add( 'user_email', __( "ERROR: please type an e-mail address" )); } else if (!is_email( $user->user_email ) ) { $errors->add( 'user_email', __( "ERROR: the email address isn't correct" )); } if ( $errors->get_error_codes() ) return $errors; if ( $update ) { $user_id = wp_update_user( get_object_vars( $user )); } else { $user_id = wp_insert_user( get_object_vars( $user )); wp_new_user_notification( $user_id ); } return $user_id; } function get_link_to_edit( $link_id ) { $link = get_link( $link_id ); $link->link_url = clean_url($link->link_url); $link->link_name = attribute_escape($link->link_name); $link->link_image = attribute_escape($link->link_image); $link->link_description = attribute_escape($link->link_description); $link->link_rss = clean_url($link->link_rss); $link->link_rel = attribute_escape($link->link_rel); $link->link_notes = wp_specialchars($link->link_notes); $link->post_category = $link->link_category; return $link; } function get_default_link_to_edit() { if ( isset( $_GET['linkurl'] ) ) $link->link_url = clean_url( $_GET['linkurl']); else $link->link_url = ''; if ( isset( $_GET['name'] ) ) $link->link_name = attribute_escape( $_GET['name']); else $link->link_name = ''; $link->link_visible = 'Y'; return $link; } function add_link() { return edit_link(); } function edit_link( $link_id = '' ) { if (!current_user_can( 'manage_links' )) wp_die( __( 'Cheatin’ uh?' )); $_POST['link_url'] = wp_specialchars( $_POST['link_url'] ); $_POST['link_url'] = clean_url($_POST['link_url']); $_POST['link_name'] = wp_specialchars( $_POST['link_name'] ); $_POST['link_image'] = wp_specialchars( $_POST['link_image'] ); $_POST['link_rss'] = clean_url($_POST['link_rss']); $_POST['link_category'] = $_POST['post_category']; if ( !empty( $link_id ) ) { $_POST['link_id'] = $link_id; return wp_update_link( $_POST); } else { return wp_insert_link( $_POST); } } function url_shorten( $url ) { $short_url = str_replace( 'http://', '', stripslashes( $url )); $short_url = str_replace( 'www.', '', $short_url ); if ('/' == substr( $short_url, -1 )) $short_url = substr( $short_url, 0, -1 ); if ( strlen( $short_url ) > 35 ) $short_url = substr( $short_url, 0, 32 ).'...'; return $short_url; } function selected( $selected, $current) { if ( $selected == $current) echo ' selected="selected"'; } function checked( $checked, $current) { if ( $checked == $current) echo ' checked="checked"'; } function return_categories_list( $parent = 0 ) { global $wpdb; return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = " . $parent . " AND ( link_count = 0 OR category_count <> 0 OR ( link_count = 0 AND category_count = 0 ) ) ORDER BY category_count DESC" ); } function sort_cats( $cat1, $cat2 ) { if ( $cat1['checked'] || $cat2['checked'] ) return ( $cat1['checked'] && !$cat2['checked'] ) ? -1 : 1; else return strcasecmp( $cat1['cat_name'], $cat2['cat_name'] ); } function get_nested_categories( $default = 0, $parent = 0 ) { global $post_ID, $link_id, $mode, $wpdb; if ( $post_ID ) { $checked_categories = $wpdb->get_col( " SELECT category_id FROM $wpdb->categories as cat, $wpdb->post2cat as postcat WHERE postcat.category_id = cat.cat_ID AND postcat.post_id = " . $post_ID ); if ( count( $checked_categories ) == 0 ) { // No selected categories, strange $checked_categories[] = $default; } } else if ( $link_id ) { $checked_categories = $wpdb->get_col( " SELECT category_id FROM $wpdb->categories as cat, $wpdb->link2cat as linkcat WHERE linkcat.category_id = cat.cat_ID AND linkcat.link_id = " . $link_id ); if ( count( $checked_categories ) == 0 ) { // No selected categories, strange $checked_categories[] = $default; } } else { $checked_categories[] = $default; } $cats = return_categories_list( $parent); $result = array (); if ( is_array( $cats ) ) { foreach ( $cats as $cat) { $result[$cat]['children'] = get_nested_categories( $default, $cat); $result[$cat]['cat_ID'] = $cat; $result[$cat]['checked'] = in_array( $cat, $checked_categories ); $result[$cat]['cat_name'] = get_the_category_by_ID( $cat); } } usort( $result, 'sort_cats' ); return $result; } function write_nested_categories( $categories ) { foreach ( $categories as $category ) { echo '
  • "; if ( $category['children'] ) { echo "
      \n"; write_nested_categories( $category['children'] ); echo "
    \n"; } } } function dropdown_categories( $default = 0 ) { write_nested_categories( get_nested_categories( $default) ); } function return_link_categories_list( $parent = 0 ) { global $wpdb; return $wpdb->get_col( "SELECT cat_ID FROM $wpdb->categories WHERE category_parent = ". $parent . " AND ( category_count = 0 OR link_count <> 0 OR ( link_count = 0 AND category_count = 0 ) ) ORDER BY link_count DESC" ); } function get_nested_link_categories( $default = 0, $parent = 0 ) { global $post_ID, $link_id, $mode, $wpdb; if ( $link_id ) { $checked_categories = $wpdb->get_col( " SELECT category_id FROM $wpdb->categories, $wpdb->link2cat WHERE $wpdb->link2cat.category_id = cat_ID AND $wpdb->link2cat.link_id = " . $link_id ); if ( count( $checked_categories ) == 0 ) { // No selected categories, strange $checked_categories[] = $default; } } else { $checked_categories[] = $default; } $cats = return_link_categories_list( $parent); $result = array (); if ( is_array( $cats ) ) { foreach ( $cats as $cat) { $result[$cat]['children'] = get_nested_link_categories( $default, $cat); $result[$cat]['cat_ID'] = $cat; $result[$cat]['checked'] = in_array( $cat, $checked_categories ); $result[$cat]['cat_name'] = get_the_category_by_ID( $cat); } } usort( $result, 'sort_cats' ); return $result; } function dropdown_link_categories( $default = 0 ) { write_nested_categories( get_nested_link_categories( $default) ); } // Dandy new recursive multiple category stuff. function cat_rows( $parent = 0, $level = 0, $categories = 0 ) { if (!$categories ) $categories = get_categories( 'hide_empty=0' ); $children = _get_category_hierarchy(); if ( $categories ) { ob_start(); foreach ( $categories as $category ) { if ( $category->category_parent == $parent) { echo "\t" . _cat_row( $category, $level ); if ( isset($children[$category->cat_ID]) ) cat_rows( $category->cat_ID, $level +1, $categories ); } } $output = ob_get_contents(); ob_end_clean(); $output = apply_filters('cat_rows', $output); echo $output; } else { return false; } } function _cat_row( $category, $level, $name_override = false ) { global $class; $pad = str_repeat( '— ', $level ); if ( current_user_can( 'manage_categories' ) ) { $edit = "".__( 'Edit' ).""; $default_cat_id = (int) get_option( 'default_category' ); $default_link_cat_id = (int) get_option( 'default_link_category' ); if ( ($category->cat_ID != $default_cat_id ) && ($category->cat_ID != $default_link_cat_id ) ) $edit .= "cat_ID ) . "' onclick=\"return deleteSomething( 'cat', $category->cat_ID, '" . js_escape(sprintf( __("You are about to delete the category '%s'.\nAll posts that were only assigned to this category will be assigned to the '%s' category.\nAll links that were only assigned to this category will be assigned to the '%s' category.\n'OK' to delete, 'Cancel' to stop." ), $category->cat_name, get_catname( $default_cat_id ), get_catname( $default_link_cat_id ) )) . "' );\" class='delete'>".__( 'Delete' ).""; else $edit .= "".__( "Default" ); } else $edit = ''; $class = ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || " class='alternate'" == $class ) ? '' : " class='alternate'"; $category->category_count = number_format( $category->category_count ); $category->link_count = number_format( $category->link_count ); $posts_count = ( $category->category_count > 0 ) ? "$category->category_count" : $category->category_count; return " $category->cat_ID " . ( $name_override ? $name_override : $pad . ' ' . $category->cat_name ) . " $category->category_description $posts_count $category->link_count $edit\n\t\n"; } function page_rows( $parent = 0, $level = 0, $pages = 0, $hierarchy = true ) { global $wpdb, $class, $post; if (!$pages ) $pages = get_pages( 'sort_column=menu_order' ); if (! $pages ) return false; foreach ( $pages as $post) { setup_postdata( $post); if ( $hierarchy && ($post->post_parent != $parent) ) continue; $post->post_title = wp_specialchars( $post->post_title ); $pad = str_repeat( '— ', $level ); $id = (int) $post->ID; $class = ('alternate' == $class ) ? '' : 'alternate'; ?> ID; ?> post_modified ) _e('Unpublished'); else echo mysql2date( __('Y-m-d g:i a'), $post->post_modified ); ?> " . __( 'Edit' ) . ""; } ?> " . __( 'Delete' ) . ""; } ?> user_email; $url = $user_object->user_url; $short_url = str_replace( 'http://', '', $url ); $short_url = str_replace( 'www.', '', $short_url ); if ('/' == substr( $short_url, -1 )) $short_url = substr( $short_url, 0, -1 ); if ( strlen( $short_url ) > 35 ) $short_url = substr( $short_url, 0, 32 ).'...'; $numposts = get_usernumposts( $user_object->ID ); $r = " $email $short_url"; $r .= "\n\t\t"; if ( $numposts > 0 ) { $r .= ""; $r .= sprintf(__ngettext( 'View %s post', 'View %s posts', $numposts ), $numposts); $r .= ''; } $r .= "\n\t\t"; if ( current_user_can( 'edit_user', $user_object->ID ) ) { $edit_link = add_query_arg( 'wp_http_referer', urlencode( clean_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=$user_object->ID" ); $r .= "".__( 'Edit' ).""; } $r .= "\n\t"; return $r; } function _wp_get_comment_list( $s = false, $start, $num ) { global $wpdb; $start = abs( (int) $start ); $num = (int) $num; $cnt_stmt = ''; if ( $s ) { $s = $wpdb->escape($s); $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE (comment_author LIKE '%$s%' OR comment_author_email LIKE '%$s%' OR comment_author_url LIKE '%$s%' OR comment_author_IP LIKE '%$s%' OR comment_content LIKE ('%$s%') ) AND comment_approved <> 'spam' ORDER BY comment_date DESC"); $cnt_stmt = "SELECT COUNT(*) FROM $wpdb->comments WHERE (comment_author LIKE '%$s%' OR comment_author_email LIKE '%$s%' OR comment_author_url LIKE '%$s%' OR comment_author_IP LIKE '%$s%' OR comment_content LIKE ('%$s%') ) AND comment_approved <> 'spam'"; } else { $comments = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0' OR comment_approved = '1' ORDER BY comment_date DESC" ); $cnt_stmt = "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0' OR comment_approved = '1'"; } if ($comments == null) $comments = array(); $total = $wpdb->get_var( $cnt_stmt ); return array($comments, $total); } function _wp_comment_list_item( $id, $alt = 0 ) { global $authordata, $comment, $wpdb; $id = (int) $id; $comment =& get_comment( $id ); $class = ''; $authordata = get_userdata($wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID)); $comment_status = wp_get_comment_status($comment->comment_ID); if ( 'unapproved' == $comment_status ) $class .= ' unapproved'; if ( $alt % 2 ) $class .= ' alternate'; echo "
  • "; ?>

    comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

    — [ comment_post_ID) ) { echo " " . __('Edit') . ''; echo ' | comment_author)) . "', theCommentList );\">" . __('Delete') . ' '; if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) { echo ' | ' . __('Unapprove') . ' '; echo ' | ' . __('Approve') . ' '; } echo " | comment_post_ID . "&c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to mark as spam this comment by '%s'.\n'Cancel' to stop, 'OK' to mark as spam."), $comment->comment_author)) . "', theCommentList );\">" . __('Spam') . " "; } $post = get_post($comment->comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title; ?> ] —

  • cat_ID && $parent == $category->category_parent) { $pad = str_repeat( '– ', $level ); $category->cat_name = wp_specialchars( $category->cat_name ); echo "\n\t"; wp_dropdown_cats( $currentcat, $currentparent, $category->cat_ID, $level +1, $categories ); } } } else { return false; } } // Some postmeta stuff function has_meta( $postid ) { global $wpdb; if (($postid!= null)) return $wpdb->get_results( "SELECT meta_key, meta_value, meta_id, post_id FROM $wpdb->postmeta WHERE post_id = " . $postid . " ORDER BY meta_key,meta_id", ARRAY_A ); else return null; } function list_meta( $meta ) { global $post_ID; // Exit if no meta if (!$meta ) { echo ' '; //TBODY needed for list-manipulation JS return; } $count = 0; ?> "; foreach ( $meta as $entry ) { ++ $count; if ( $count % 2 ) $style = 'alternate'; else $style = ''; if ('_' == $entry['meta_key'] { 0 } ) $style .= ' hidden'; if ( is_serialized( $entry['meta_value'] ) ) { if ( is_serialized_string( $entry['meta_value'] ) ) { // this is a serialized string, so we should display it $entry['meta_value'] = maybe_unserialize( $entry['meta_value'] ); } else { // this is a serialized array/object so we should NOT display it --$count; continue; } } $key_js = js_escape( $entry['meta_key'] ); $entry['meta_key'] = attribute_escape($entry['meta_key']); $entry['meta_value'] = attribute_escape($entry['meta_value']); $entry['meta_id'] = (int) $entry['meta_id']; $r .= "\n\t"; $r .= "\n\t\t"; $r .= "\n\t\t"; $r .= "\n\t\t
    "; $r .= "\n\t\t"; $r .= "\n\t"; } echo $r; echo "\n\t"; } // Get a list of previously defined keys function get_meta_keys() { global $wpdb; $keys = $wpdb->get_col( " SELECT DISTINCT meta_key FROM $wpdb->postmeta GROUP BY meta_key" ); // ORDER BY meta_key return $keys; } function meta_form() { global $wpdb; $limit = (int) apply_filters( 'postmeta_form_limit', 30 ); $keys = $wpdb->get_col( " SELECT DISTINCT meta_key FROM $wpdb->postmeta GROUP BY meta_key" ); //ORDER BY meta_id DESC LIMIT $limit if ( $keys ) natcasesort($keys); ?>

    escape( stripslashes( trim( $_POST['metakeyselect'] ) ) ); $metakeyinput = $wpdb->escape( stripslashes( trim( $_POST['metakeyinput'] ) ) ); $metavalue = maybe_serialize( stripslashes( (trim( $_POST['metavalue'] ) ) )); $metavalue = $wpdb->escape( $metavalue ); if ( ('0' == $metavalue || !empty ( $metavalue ) ) && ((('#NONE#' != $metakeyselect) && !empty ( $metakeyselect) ) || !empty ( $metakeyinput) ) ) { // We have a key/value pair. If both the select and the // input for the key have data, the input takes precedence: if ('#NONE#' != $metakeyselect) $metakey = $metakeyselect; if ( $metakeyinput) $metakey = $metakeyinput; // default if ( in_array($metakey, $protected) ) return false; $result = $wpdb->insert( "INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value ) VALUES ('$post_ID','$metakey','$metavalue' )",$wpdb->postmeta,"meta_id"); return $wpdb->insert_id; } return false; } // add_meta function delete_meta( $mid ) { global $wpdb; $mid = (int) $mid; return $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_id = " . $mid ); } function update_meta( $mid, $mkey, $mvalue ) { global $wpdb; $protected = array( '_wp_attached_file', '_wp_attachment_metadata', '_wp_old_slug', '_wp_page_template' ); if ( in_array($mkey, $protected) ) return false; $mvalue = maybe_serialize( stripslashes( $mvalue )); $mvalue = $wpdb->escape( $mvalue ); $mid = (int) $mid; return $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '$mkey', meta_value = '$mvalue' WHERE meta_id = " . $mid ); } function get_post_meta_by_id( $mid ) { global $wpdb; $mid = (int) $mid; $meta = $wpdb->get_row( "SELECT * FROM $wpdb->postmeta WHERE meta_id = " . $mid ); if ( is_serialized_string( $meta->meta_value ) ) $meta->meta_value = maybe_unserialize( $meta->meta_value ); return $meta; } function touch_time( $edit = 1, $for_post = 1 ) { global $wp_locale, $post, $comment; if ( $for_post ) $edit = ( ('draft' == $post->post_status ) && (!$post->post_date || '1900-01-01 00:00:00' == $post->post_date ) ) ? false : true; echo '
    '; $time_adj = time() + (get_option( 'gmt_offset' ) * 3600 ); $post_date = ($for_post) ? $post->post_date : $comment->comment_date; $jj = ($edit) ? mysql2date( 'd', $post_date ) : gmdate( 'd', $time_adj ); $mm = ($edit) ? mysql2date( 'm', $post_date ) : gmdate( 'm', $time_adj ); $aa = ($edit) ? mysql2date( 'Y', $post_date ) : gmdate( 'Y', $time_adj ); $hh = ($edit) ? mysql2date( 'H', $post_date ) : gmdate( 'H', $time_adj ); $mn = ($edit) ? mysql2date( 'i', $post_date ) : gmdate( 'i', $time_adj ); $ss = ($edit) ? mysql2date( 's', $post_date ) : gmdate( 's', $time_adj ); echo " @ : get_month( $mm ), $jj, $aa, $hh, $mn ); } ?>
    $markerline ) { if (strpos($markerline, '# BEGIN ' . $marker) != false) $state = false; if ( $state ) { if ( $n + 1 < count( $markerdata ) ) fwrite( $f, "{$markerline}\n" ); else fwrite( $f, "{$markerline}" ); } if (strpos($markerline, '# END ' . $marker) != false) { fwrite( $f, "# BEGIN {$marker}\n" ); if ( is_array( $insertion )) foreach ( $insertion as $insertline ) fwrite( $f, "{$insertline}\n" ); fwrite( $f, "# END {$marker}\n" ); $state = true; $foundit = true; } } } if (!$foundit) { fwrite( $f, "# BEGIN {$marker}\n" ); foreach ( $insertion as $insertline ) fwrite( $f, "{$insertline}\n" ); fwrite( $f, "# END {$marker}\n" ); } fclose( $f ); return true; } else { return false; } } // extract_from_markers: Owen Winkler // Returns an array of strings from a file (.htaccess ) from between BEGIN // and END markers. function extract_from_markers( $filename, $marker ) { $result = array (); if (!file_exists( $filename ) ) { return $result; } if ( $markerdata = explode( "\n", implode( '', file( $filename ) ) )); { $state = false; foreach ( $markerdata as $markerline ) { if (strpos($markerline, '# END ' . $marker) != false) $state = false; if ( $state ) $result[] = $markerline; if (strpos($markerline, '# BEGIN ' . $marker) != false) $state = true; } } return $result; } function got_mod_rewrite() { global $is_apache; // take 3 educated guesses as to whether or not mod_rewrite is available if ( !$is_apache ) return false; if ( function_exists( 'apache_get_modules' ) ) { if ( !in_array( 'mod_rewrite', apache_get_modules() ) ) return false; } return true; } function save_mod_rewrite_rules() { global $is_apache, $wp_rewrite; $home_path = get_home_path(); if (!$wp_rewrite->using_mod_rewrite_permalinks() ) return false; if (!((!file_exists( $home_path.'.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path.'.htaccess' ) ) ) return false; if (! got_mod_rewrite() ) return false; $rules = explode( "\n", $wp_rewrite->mod_rewrite_rules() ); return insert_with_markers( $home_path.'.htaccess', 'WordPress', $rules ); } function get_broken_themes() { global $wp_broken_themes; get_themes(); return $wp_broken_themes; } function get_page_templates() { $themes = get_themes(); $theme = get_current_theme(); $templates = $themes[$theme]['Template Files']; $page_templates = array (); if ( is_array( $templates ) ) { foreach ( $templates as $template ) { $template_data = implode( '', file( ABSPATH.$template )); preg_match( "|Template Name:(.*)|i", $template_data, $name ); preg_match( "|Description:(.*)|i", $template_data, $description ); $name = $name[1]; $description = $description[1]; if (!empty ( $name ) ) { $page_templates[trim( $name )] = basename( $template ); } } } return $page_templates; } function page_template_dropdown( $default = '' ) { $templates = get_page_templates(); foreach (array_keys( $templates ) as $template ) : if ( $default == $templates[$template] ) $selected = " selected='selected'"; else $selected = ''; echo "\n\t"; endforeach; } function parent_dropdown( $default = 0, $parent = 0, $level = 0 ) { global $wpdb, $post_ID; $items = $wpdb->get_results( "SELECT ID, post_parent, post_title FROM $wpdb->posts WHERE post_parent = " . $parent . " AND post_type = 'page' ORDER BY menu_order" ); if ( $items ) { foreach ( $items as $item ) { // A page cannot be its own parent. if (!empty ( $post_ID ) ) { if ( $item->ID == $post_ID ) { continue; } } $pad = str_repeat( ' ', $level * 3 ); if ( $item->ID == $default) $current = ' selected="selected"'; else $current = ''; echo "\n\t"; parent_dropdown( $default, $item->ID, $level +1 ); } } else { return false; } } function user_can_access_admin_page() { global $pagenow; global $menu; global $submenu; global $_wp_menu_nopriv; global $_wp_submenu_nopriv; global $plugin_page; $parent = get_admin_page_parent(); if ( isset( $_wp_submenu_nopriv[$parent][$pagenow] ) ) return false; if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$parent][$plugin_page] ) ) return false; if ( empty( $parent) ) { if ( isset( $_wp_menu_nopriv[$pagenow] ) ) return false; if ( isset( $_wp_submenu_nopriv[$pagenow][$pagenow] ) ) return false; if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) return false; foreach (array_keys( $_wp_submenu_nopriv ) as $key ) { if ( isset( $_wp_submenu_nopriv[$key][$pagenow] ) ) return false; if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$key][$plugin_page] ) ) return false; } return true; } if ( isset( $submenu[$parent] ) ) { foreach ( $submenu[$parent] as $submenu_array ) { if ( isset( $plugin_page ) && ( $submenu_array[2] == $plugin_page ) ) { if ( current_user_can( $submenu_array[1] )) return true; else return false; } else if ( $submenu_array[2] == $pagenow ) { if ( current_user_can( $submenu_array[1] )) return true; else return false; } } } foreach ( $menu as $menu_array ) { if ( $menu_array[2] == $parent) { if ( current_user_can( $menu_array[1] )) return true; else return false; } } return true; } function get_admin_page_title() { global $title; global $menu; global $submenu; global $pagenow; global $plugin_page; if ( isset( $title ) && !empty ( $title ) ) { return $title; } $hook = get_plugin_page_hook( $plugin_page, $pagenow ); $parent = $parent1 = get_admin_page_parent(); if ( empty ( $parent) ) { foreach ( $menu as $menu_array ) { if ( isset( $menu_array[3] ) ) { if ( $menu_array[2] == $pagenow ) { $title = $menu_array[3]; return $menu_array[3]; } else if ( isset( $plugin_page ) && ($plugin_page == $menu_array[2] ) && ($hook == $menu_array[3] ) ) { $title = $menu_array[3]; return $menu_array[3]; } } else { $title = $menu_array[0]; return $title; } } } else { foreach (array_keys( $submenu ) as $parent) { foreach ( $submenu[$parent] as $submenu_array ) { if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) && (($parent == $pagenow ) || ($parent == $plugin_page ) || ($plugin_page == $hook ) || (($pagenow == 'admin.php' ) && ($parent1 != $submenu_array[2] ) ) ) ) { $title = $submenu_array[3]; return $submenu_array[3]; } if ( $submenu_array[2] != $pagenow || isset( $_GET['page'] ) ) // not the current page continue; if ( isset( $submenu_array[3] ) ) { $title = $submenu_array[3]; return $submenu_array[3]; } else { $title = $submenu_array[0]; return $title; } } } } return $title; } function get_admin_page_parent() { global $parent_file; global $menu; global $submenu; global $pagenow; global $plugin_page; global $_wp_real_parent_file; global $_wp_menu_nopriv; global $_wp_submenu_nopriv; if ( !empty ( $parent_file ) ) { if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } if ( $pagenow == 'admin.php' && isset( $plugin_page ) ) { foreach ( $menu as $parent_menu ) { if ( $parent_menu[2] == $plugin_page ) { $parent_file = $plugin_page; if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } } if ( isset( $_wp_menu_nopriv[$plugin_page] ) ) { $parent_file = $plugin_page; if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } } if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) { $parent_file = $pagenow; if ( isset( $_wp_real_parent_file[$parent_file] ) ) $parent_file = $_wp_real_parent_file[$parent_file]; return $parent_file; } foreach (array_keys( $submenu ) as $parent) { foreach ( $submenu[$parent] as $submenu_array ) { if ( isset( $_wp_real_parent_file[$parent] ) ) $parent = $_wp_real_parent_file[$parent]; if ( $submenu_array[2] == $pagenow ) { $parent_file = $parent; return $parent; } else if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) ) { $parent_file = $parent; return $parent; } } } $parent_file = ''; return ''; } function add_menu_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { global $menu, $admin_page_hooks; $file = plugin_basename( $file ); $menu[] = array ( $menu_title, $access_level, $file, $page_title ); $admin_page_hooks[$file] = sanitize_title( $menu_title ); $hookname = get_plugin_page_hookname( $file, '' ); if (!empty ( $function ) && !empty ( $hookname )) add_action( $hookname, $function ); return $hookname; } function add_submenu_page( $parent, $page_title, $menu_title, $access_level, $file, $function = '' ) { global $submenu; global $menu; global $_wp_real_parent_file; global $_wp_submenu_nopriv; global $_wp_menu_nopriv; $file = plugin_basename( $file ); $parent = plugin_basename( $parent); if ( isset( $_wp_real_parent_file[$parent] ) ) $parent = $_wp_real_parent_file[$parent]; if ( !current_user_can( $access_level ) ) { $_wp_submenu_nopriv[$parent][$file] = true; return false; } // If the parent doesn't already have a submenu, add a link to the parent // as the first item in the submenu. If the submenu file is the same as the // parent file someone is trying to link back to the parent manually. In // this case, don't automatically add a link back to avoid duplication. if (!isset( $submenu[$parent] ) && $file != $parent ) { foreach ( $menu as $parent_menu ) { if ( $parent_menu[2] == $parent && current_user_can( $parent_menu[1] ) ) $submenu[$parent][] = $parent_menu; } } $submenu[$parent][] = array ( $menu_title, $access_level, $file, $page_title ); $hookname = get_plugin_page_hookname( $file, $parent); if (!empty ( $function ) && !empty ( $hookname )) add_action( $hookname, $function ); return $hookname; } function add_options_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { return add_submenu_page( 'options-general.php', $page_title, $menu_title, $access_level, $file, $function ); } function add_management_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { return add_submenu_page( 'edit.php', $page_title, $menu_title, $access_level, $file, $function ); } function add_theme_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { return add_submenu_page( 'themes.php', $page_title, $menu_title, $access_level, $file, $function ); } function add_users_page( $page_title, $menu_title, $access_level, $file, $function = '' ) { if ( current_user_can('edit_users') ) $parent = 'users.php'; else $parent = 'profile.php'; return add_submenu_page( $parent, $page_title, $menu_title, $access_level, $file, $function ); } function validate_file( $file, $allowed_files = '' ) { if ( false != strpos( $file, './' )) return 1; if (':' == substr( $file, 1, 1 )) return 2; if (!empty ( $allowed_files ) && (!in_array( $file, $allowed_files ) ) ) return 3; return 0; } function validate_file_to_edit( $file, $allowed_files = '' ) { $file = stripslashes( $file ); $code = validate_file( $file, $allowed_files ); if (!$code ) return $file; switch ( $code ) { case 1 : wp_die( __('Sorry, can’t edit files with ".." in the name. If you are trying to edit a file in your WordPress home directory, you can just type the name of the file in.' )); case 2 : wp_die( __('Sorry, can’t call files with their real path.' )); case 3 : wp_die( __('Sorry, that file cannot be edited.' )); } } function get_home_path() { $home = get_option( 'home' ); if ( $home != '' && $home != get_option( 'siteurl' ) ) { $home_path = parse_url( $home ); $home_path = $home_path['path']; $root = str_replace( $_SERVER["PHP_SELF"], '', $_SERVER["SCRIPT_FILENAME"] ); $home_path = trailingslashit( $root.$home_path ); } else { $home_path = ABSPATH; } return $home_path; } function get_real_file_to_edit( $file ) { if ('index.php' == $file || '.htaccess' == $file ) { $real_file = get_home_path().$file; } else { $real_file = ABSPATH.$file; } return $real_file; } $wp_file_descriptions = array ('index.php' => __( 'Main Index Template' ), 'style.css' => __( 'Stylesheet' ), 'comments.php' => __( 'Comments' ), 'comments-popup.php' => __( 'Popup Comments' ), 'footer.php' => __( 'Footer' ), 'header.php' => __( 'Header' ), 'sidebar.php' => __( 'Sidebar' ), 'archive.php' => __( 'Archives' ), 'category.php' => __( 'Category Template' ), 'page.php' => __( 'Page Template' ), 'search.php' => __( 'Search Results' ), 'single.php' => __( 'Single Post' ), '404.php' => __( '404 Template' ), 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), '.htaccess' => __( '.htaccess (for rewrite rules )' ), // Deprecated files 'wp-layout.css' => __( 'Stylesheet' ), 'wp-comments.php' => __( 'Comments Template' ), 'wp-comments-popup.php' => __( 'Popup Comments Template' )); function get_file_description( $file ) { global $wp_file_descriptions; if ( isset( $wp_file_descriptions[basename( $file )] ) ) { return $wp_file_descriptions[basename( $file )]; } elseif ( file_exists( ABSPATH . $file ) && is_file( ABSPATH . $file ) ) { $template_data = implode( '', file( ABSPATH . $file ) ); if ( preg_match( "|Template Name:(.*)|i", $template_data, $name )) return $name[1]; } return basename( $file ); } function update_recently_edited( $file ) { $oldfiles = (array ) get_option( 'recently_edited' ); if ( $oldfiles ) { $oldfiles = array_reverse( $oldfiles ); $oldfiles[] = $file; $oldfiles = array_reverse( $oldfiles ); $oldfiles = array_unique( $oldfiles ); if ( 5 < count( $oldfiles )) array_pop( $oldfiles ); } else { $oldfiles[] = $file; } update_option( 'recently_edited', $oldfiles ); } function get_plugin_data( $plugin_file ) { $plugin_data = implode( '', file( $plugin_file )); preg_match( "|Plugin Name:(.*)|i", $plugin_data, $plugin_name ); preg_match( "|Plugin URI:(.*)|i", $plugin_data, $plugin_uri ); preg_match( "|Description:(.*)|i", $plugin_data, $description ); preg_match( "|Author:(.*)|i", $plugin_data, $author_name ); preg_match( "|Author URI:(.*)|i", $plugin_data, $author_uri ); if ( preg_match( "|Version:(.*)|i", $plugin_data, $version )) $version = trim( $version[1] ); else $version = ''; $description = wptexturize( trim( $description[1] )); $name = $plugin_name[1]; $name = trim( $name ); $plugin = $name; if ('' != $plugin_uri[1] && '' != $name ) { $plugin = ''.$plugin.''; } if ('' == $author_uri[1] ) { $author = trim( $author_name[1] ); } else { $author = '' . trim( $author_name[1] ) . ''; } return array('Name' => $name, 'Title' => $plugin, 'Description' => $description, 'Author' => $author, 'Version' => $version); } function get_plugins() { global $wp_plugins; if ( isset( $wp_plugins ) ) { return $wp_plugins; } $wp_plugins = array (); $plugin_root = ABSPATH . PLUGINDIR; // Files in wp-content/plugins directory $plugins_dir = @ dir( $plugin_root); if ( $plugins_dir ) { while (($file = $plugins_dir->read() ) != false ) { if ( substr($file, 0, 1) == '.' ) continue; if ( is_dir( $plugin_root.'/'.$file ) ) { $plugins_subdir = @ dir( $plugin_root.'/'.$file ); if ( $plugins_subdir ) { while (($subfile = $plugins_subdir->read() ) != false ) { if ( substr($subfile, 0, 1) == '.' ) continue; if ( substr($subfile, -4) == '.php' ) $plugin_files[] = "$file/$subfile"; } } } else { if ( substr($file, -4) == '.php' ) $plugin_files[] = $file; } } } if ( !$plugins_dir || !$plugin_files ) return $wp_plugins; foreach ( $plugin_files as $plugin_file ) { if ( !is_readable( "$plugin_root/$plugin_file" ) ) continue; $plugin_data = get_plugin_data( "$plugin_root/$plugin_file" ); if ( empty ( $plugin_data['Name'] ) ) continue; $wp_plugins[plugin_basename( $plugin_file )] = $plugin_data; } uasort( $wp_plugins, create_function( '$a, $b', 'return strnatcasecmp( $a["Name"], $b["Name"] );' )); return $wp_plugins; } function get_plugin_page_hookname( $plugin_page, $parent_page ) { global $admin_page_hooks; $parent = get_admin_page_parent(); if ( empty ( $parent_page ) || 'admin.php' == $parent_page ) { if ( isset( $admin_page_hooks[$plugin_page] )) $page_type = 'toplevel'; else if ( isset( $admin_page_hooks[$parent] )) $page_type = $admin_page_hooks[$parent]; } else if ( isset( $admin_page_hooks[$parent_page] ) ) { $page_type = $admin_page_hooks[$parent_page]; } else { $page_type = 'admin'; } $plugin_name = preg_replace( '!\.php!', '', $plugin_page ); return $page_type.'_page_'.$plugin_name; } function get_plugin_page_hook( $plugin_page, $parent_page ) { global $wp_filter; $hook = get_plugin_page_hookname( $plugin_page, $parent_page ); if ( isset( $wp_filter[$hook] )) return $hook; else return ''; } function browse_happy() { $getit = __( 'WordPress recommends a better browser' ); echo '

    Browse Happy

    '; } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') != false) add_action( 'admin_footer', 'browse_happy' ); function documentation_link( $for ) { return; } function register_importer( $id, $name, $description, $callback ) { global $wp_importers; $wp_importers[$id] = array ( $name, $description, $callback ); } function get_importers() { global $wp_importers; uasort($wp_importers, create_function('$a, $b', 'return strcmp($a[0], $b[0]);')); return $wp_importers; } function current_theme_info() { $themes = get_themes(); $current_theme = get_current_theme(); $ct->name = $current_theme; $ct->title = $themes[$current_theme]['Title']; $ct->version = $themes[$current_theme]['Version']; $ct->parent_theme = $themes[$current_theme]['Parent Theme']; $ct->template_dir = $themes[$current_theme]['Template Dir']; $ct->stylesheet_dir = $themes[$current_theme]['Stylesheet Dir']; $ct->template = $themes[$current_theme]['Template']; $ct->stylesheet = $themes[$current_theme]['Stylesheet']; $ct->screenshot = $themes[$current_theme]['Screenshot']; $ct->description = $themes[$current_theme]['Description']; $ct->author = $themes[$current_theme]['Author']; return $ct; } // array wp_handle_upload ( array &file [, array overrides] ) // file: reference to a single element of $_FILES. Call the function once for each uploaded file. // overrides: an associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). // On success, returns an associative array of file attributes. // On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). function wp_handle_upload( &$file, $overrides = false ) { // The default error handler. if (! function_exists( 'wp_handle_upload_error' ) ) { function wp_handle_upload_error( &$file, $message ) { return array( 'error'=>$message ); } } // You may define your own function and pass the name in $overrides['upload_error_handler'] $upload_error_handler = 'wp_handle_upload_error'; // $_POST['action'] must be set and its value must equal $overrides['action'] or this: $action = 'wp_handle_upload'; // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. $upload_error_strings = array( false, __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), __( "The uploaded file was only partially uploaded." ), __( "No file was uploaded." ), __( "Missing a temporary folder." ), __( "Failed to write file to disk." )); // All tests are on by default. Most can be turned off by $override[{test_name}] = false; $test_form = true; $test_size = true; // If you override this, you must provide $ext and $type!!!! $test_type = true; // Install user overrides. Did we mention that this voids your warranty? if ( is_array( $overrides ) ) extract( $overrides, EXTR_OVERWRITE ); // A correct form post will pass this test. if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) return $upload_error_handler( $file, __( 'Invalid form submission.' )); // A successful upload will pass this test. It makes no sense to override this one. if ( $file['error'] > 0 ) return $upload_error_handler( $file, $upload_error_strings[$file['error']] ); // A non-empty file will pass this test. if ( $test_size && !($file['size'] > 0 ) ) return $upload_error_handler( $file, __( 'File is empty. Please upload something more substantial.' )); // A properly uploaded file will pass this test. There should be no reason to override this one. if (! @ is_uploaded_file( $file['tmp_name'] ) ) return $upload_error_handler( $file, __( 'Specified file failed upload test.' )); // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. if ( $test_type ) { $wp_filetype = wp_check_filetype( $file['name'], $mimes ); extract( $wp_filetype ); if ( !$type || !$ext ) return $upload_error_handler( $file, __( 'File type does not meet security guidelines. Try another.' )); } // A writable uploads dir will pass this test. Again, there's no point overriding this one. if ( ! ( ( $uploads = wp_upload_dir() ) && false == $uploads['error'] ) ) return $upload_error_handler( $file, $uploads['error'] ); // Increment the file number until we have a unique file to save in $dir. Use $override['unique_filename_callback'] if supplied. if ( isset( $unique_filename_callback ) && function_exists( $unique_filename_callback ) ) { $filename = $unique_filename_callback( $uploads['path'], $file['name'] ); } else { $number = ''; $filename = str_replace( '#', '_', $file['name'] ); $filename = str_replace( array( '\\', "'" ), '', $filename ); if ( empty( $ext) ) $ext = ''; else $ext = ".$ext"; while ( file_exists( $uploads['path'] . "/$filename" ) ) { if ( '' == "$number$ext" ) $filename = $filename . ++$number . $ext; else $filename = str_replace( "$number$ext", ++$number . $ext, $filename ); } $filename = str_replace( $ext, '', $filename ); $filename = sanitize_title_with_dashes( $filename ) . $ext; } // Move the file to the uploads dir $new_file = $uploads['path'] . "/$filename"; if ( false == @ move_uploaded_file( $file['tmp_name'], $new_file ) ) wp_die( printf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] )); // Set correct file permissions $stat = stat( dirname( $new_file )); $perms = $stat['mode'] & 0000666; @ chmod( $new_file, $perms ); // Compute the URL $url = $uploads['url'] . "/$filename"; $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) ); return $return; } function wp_shrink_dimensions( $width, $height, $wmax = 128, $hmax = 96 ) { if ( $height <= $hmax && $width <= $wmax ) return array( $width, $height); elseif ( $width / $height > $wmax / $hmax ) return array( $wmax, (int) ($height / $width * $wmax )); else return array( (int) ($width / $height * $hmax ), $hmax ); } function wp_import_cleanup( $id ) { wp_delete_attachment( $id ); } function wp_import_upload_form( $action ) { $size = strtolower( ini_get( 'upload_max_filesize' ) ); $bytes = 0; if (strpos($size, 'k') != false) $bytes = $size * 1024; if (strpos($size, 'm') != false) $bytes = $size * 1024 * 1024; if (strpos($size, 'g') != false) $bytes = $size * 1024 * 1024 * 1024; ?>

    ( )

    false, 'test_type' => false ); $file = wp_handle_upload( $_FILES['import'], $overrides ); if ( isset( $file['error'] ) ) return $file; $url = $file['url']; $type = $file['type']; $file = addslashes( $file['file'] ); $filename = basename( $file ); // Construct the object array $object = array( 'post_title' => $filename, 'post_content' => $url, 'post_mime_type' => $type, 'guid' => $url ); // Save the data $id = wp_insert_attachment( $object, $file ); return array( 'file' => $file, 'id' => $id ); } function the_attachment_links( $id = false ) { $id = (int) $id; $post = & get_post( $id ); if ( $post->post_type != 'attachment' ) return false; $icon = get_attachment_icon( $post->ID ); $attachment_data = wp_get_attachment_metadata( $id ); $thumb = isset( $attachment_data['thumb'] ); ?> 4 / 3 ) return array( 128, (int) ($height / $width * 128 )); else return array( (int) ($width / $height * 96 ), 96 ); } function wp_reset_vars( $vars ) { for ( $i=0; $ipost_name); // just in case if ( strlen($name) ) echo ''; } // If siteurl or home changed, reset cookies and flush rewrite rules. function update_home_siteurl( $old_value, $value ) { global $wp_rewrite, $user_login, $user_pass_md5; if ( defined( "WP_INSTALLING" ) ) return; // If home changed, write rewrite rules to new location. $wp_rewrite->flush_rules(); // Clear cookies for old paths. wp_clearcookie(); // Set cookies for new paths. wp_setcookie( $user_login, $user_pass_md5, true, get_option( 'home' ), get_option( 'siteurl' )); } add_action( 'update_option_home', 'update_home_siteurl', 10, 2 ); add_action( 'update_option_siteurl', 'update_home_siteurl', 10, 2 ); function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) { if ( ctype_digit( $src_file ) ) // Handle int as attachment ID $src_file = get_attached_file( $src_file ); $src = wp_load_image( $src_file ); if ( !is_resource( $src )) return $src; $dst = imagecreatetruecolor( $dst_w, $dst_h ); if ( $src_abs ) { $src_w -= $src_x; $src_h -= $src_y; } if (function_exists('imageantialias')) imageantialias( $dst, true ); imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); if ( !$dst_file ) $dst_file = str_replace( basename( $src_file ), 'cropped-'.basename( $src_file ), $src_file ); $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file ); if ( imagejpeg( $dst, $dst_file ) ) return $dst_file; else return false; } function wp_load_image( $file ) { if ( ctype_digit( $file ) ) $file = get_attached_file( $file ); if ( !file_exists( $file ) ) return sprintf(__("File '%s' doesn't exist?"), $file); if ( ! function_exists('imagecreatefromstring') ) return __('The GD image library is not installed.'); $contents = file_get_contents( $file ); $image = imagecreatefromstring( $contents ); if ( !is_resource( $image ) ) return sprintf(__("File '%s' is not an image."), $file); return $image; } function wp_generate_attachment_metadata( $attachment_id, $file ) { $attachment = get_post( $attachment_id ); $metadata = array(); if ( preg_match('!^image/!', get_post_mime_type( $attachment )) ) { $imagesize = getimagesize($file); $metadata['width'] = $imagesize['0']; $metadata['height'] = $imagesize['1']; list($uwidth, $uheight) = get_udims($metadata['width'], $metadata['height']); $metadata['hwstring_small'] = "height='$uheight' width='$uwidth'"; $metadata['file'] = $file; $max = apply_filters( 'wp_thumbnail_creation_size_limit', 3 * 1024 * 1024, $attachment_id, $file ); if ( $max < 0 || $metadata['width'] * $metadata['height'] < $max ) { $max_side = apply_filters( 'wp_thumbnail_max_side_length', 128, $attachment_id, $file ); $thumb = wp_create_thumbnail( $file, $max_side ); if ( @file_exists($thumb) ) $metadata['thumb'] = basename($thumb); } } return apply_filters( 'wp_generate_attachment_metadata', $metadata ); } function wp_create_thumbnail( $file, $max_side, $effect = '' ) { // 1 = GIF, 2 = JPEG, 3 = PNG if ( file_exists( $file ) ) { $type = getimagesize( $file ); // if the associated function doesn't exist - then it's not // handle. duh. i hope. if (!function_exists( 'imagegif' ) && $type[2] == 1 ) { $error = __( 'Filetype not supported. Thumbnail not created.' ); } elseif (!function_exists( 'imagejpeg' ) && $type[2] == 2 ) { $error = __( 'Filetype not supported. Thumbnail not created.' ); } elseif (!function_exists( 'imagepng' ) && $type[2] == 3 ) { $error = __( 'Filetype not supported. Thumbnail not created.' ); } else { // create the initial copy from the original file if ( $type[2] == 1 ) { $image = imagecreatefromgif( $file ); } elseif ( $type[2] == 2 ) { $image = imagecreatefromjpeg( $file ); } elseif ( $type[2] == 3 ) { $image = imagecreatefrompng( $file ); } if ( function_exists( 'imageantialias' )) imageantialias( $image, TRUE ); $image_attr = getimagesize( $file ); // figure out the longest side if ( $image_attr[0] > $image_attr[1] ) { $image_width = $image_attr[0]; $image_height = $image_attr[1]; $image_new_width = $max_side; $image_ratio = $image_width / $image_new_width; $image_new_height = $image_height / $image_ratio; //width is > height } else { $image_width = $image_attr[0]; $image_height = $image_attr[1]; $image_new_height = $max_side; $image_ratio = $image_height / $image_new_height; $image_new_width = $image_width / $image_ratio; //height > width } $thumbnail = imagecreatetruecolor( $image_new_width, $image_new_height); @ imagecopyresampled( $thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1] ); // If no filters change the filename, we'll do a default transformation. if ( basename( $file ) == $thumb = apply_filters( 'thumbnail_filename', basename( $file ) ) ) $thumb = preg_replace( '!(\.[^.]+)?$!', '.thumbnail' . '$1', basename( $file ), 1 ); $thumbpath = str_replace( basename( $file ), $thumb, $file ); // move the thumbnail to its final destination if ( $type[2] == 1 ) { if (!imagegif( $thumbnail, $thumbpath ) ) { $error = __( "Thumbnail path invalid" ); } } elseif ( $type[2] == 2 ) { if (!imagejpeg( $thumbnail, $thumbpath ) ) { $error = __( "Thumbnail path invalid" ); } } elseif ( $type[2] == 3 ) { if (!imagepng( $thumbnail, $thumbpath ) ) { $error = __( "Thumbnail path invalid" ); } } } } else { $error = __( 'File not found' ); } if (!empty ( $error ) ) { return $error; } else { return apply_filters( 'wp_create_thumbnail', $thumbpath ); } } ?> ;wordpress/wp-admin/.svn/text-base/admin-header.php.svn-base > <?php bloginfo('name') ?> › <?php echo wp_specialchars( strip_tags( $title ) ); ?> — WordPress text_direction) ) : ?>

    %s.'), $user_identity) ?> [, ]

    4wordpress/wp-admin/.svn/text-base/admin.php.svn-base K :wordpress/wp-admin/.svn/text-base/bookmarklet.php.svn-base % post_title = stripslashes($post_title); else $post->post_title = $popuptitle; $content = wp_specialchars($_REQUEST['content']); $popupurl = clean_url($_REQUEST['popupurl']); if ( !empty($content) ) { $post->post_content = wp_specialchars( stripslashes($_REQUEST['content']) ); } else { $post->post_content = ''.$popuptitle.''."\n$text"; } /* /big funky fixes */ ?> <?php bloginfo('name') ?> › Bookmarklet — WordPress :wordpress/wp-admin/.svn/text-base/categories.js__.svn-baseaddLoadEvent(function() { return true; if (!theList.theList) return false; document.forms.addcat.submit.onclick = function(e) {return killSubmit('theList.ajaxAdder("cat", "addcat");', e); }; theList.addComplete = function(what, where, update, transport) { var name = getNodeValue(transport.responseXML, 'name').unescapeHTML(); var id = transport.responseXML.getElementsByTagName(what)[0].getAttribute('id'); var options = document.forms['addcat'].category_parent.options; options[options.length] = new Option(name, id); }; theList.delComplete = function(what, id) { var options = document.forms['addcat'].category_parent.options; for ( var o = 0; o < options.length; o++ ) if ( id == options[o].value ) options[o] = null; }; }); 8wordpress/wp-admin/.svn/text-base/categories.js.svn-base9wordpress/wp-admin/.svn/text-base/categories.php.svn-base'%s category: this is the default one"), $cat_name)); if ( $cat_ID == get_option('default_link_category') ) wp_die(sprintf(__("Can’t delete the %s category: this is the default one for links"), $cat_name)); wp_delete_category($cat_ID); wp_redirect('categories.php?message=2'); exit; break; case 'edit': require_once ('admin-header.php'); $cat_ID = (int) $_GET['cat_ID']; $category = get_category_to_edit($cat_ID); include('edit-category-form.php'); break; case 'editedcat': $cat_ID = (int) $_POST['cat_ID']; check_admin_referer('update-category_' . $cat_ID); if ( !current_user_can('manage_categories') ) wp_die(__('Cheatin’ uh?')); if ( wp_update_category($_POST) ) wp_redirect('categories.php?message=3'); else wp_redirect('categories.php?message=5'); exit; break; default: wp_enqueue_script( 'admin-categories' ); require_once ('admin-header.php'); $messages[1] = __('Category added.'); $messages[2] = __('Category deleted.'); $messages[3] = __('Category updated.'); $messages[4] = __('Category not added.'); $messages[5] = __('Category not updated.'); ?>

    add new)'), '#addcat') ?>

    Note:
    Deleting a category does not delete the posts and links in that category. Instead, posts that were only assigned to the deleted category are set to the category %s and links that were only assigned to the deleted category are set to %s.'), apply_filters('the_category', get_catname(get_option('default_category'))), apply_filters('the_category', get_catname(get_option('default_link_category')))) ?>

    3wordpress/wp-admin/.svn/text-base/cat.js__.svn-baseaddLoadEvent(function(){catList=new listMan('categorychecklist');catList.ajaxRespEl='jaxcat';catList.topAdder=1;catList.alt=0;catList.showLink=0;}); addLoadEvent(newCatAddIn); function newCatAddIn() { var jaxcat = $('jaxcat'); if ( !jaxcat ) return false; Element.update(jaxcat,'' + catL10n.how + ''); $('newcat').onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','jaxcat');", e); }; $('catadd').onclick = function() { catList.ajaxAdder('category', 'jaxcat'); }; } 1wordpress/wp-admin/.svn/text-base/cat.js.svn-base6wordpress/wp-admin/.svn/text-base/comment.php.svn-baseR'.__('Go back').'!', 'javascript:history.go(-1)')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post.') ); $comment = get_comment_to_edit($comment); include('edit-form-comment.php'); break; case 'cdc': case 'mac': require_once('./admin-header.php'); $comment = (int) $_GET['c']; $formaction = 'cdc' == $action ? 'deletecomment' : 'approvecomment'; $nonce_action = 'cdc' == $action ? 'delete-comment_' : 'approve-comment_'; $nonce_action .= $comment; if ( ! $comment = get_comment_to_edit($comment) ) wp_die(__('Oops, no comment with this ID.').sprintf(' '.__('Go back').'!', 'edit.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( 'cdc' == $action ? __('You are not allowed to delete comments on this post.') : __('You are not allowed to edit comments on this post, so you cannot approve this comment.') ); ?>

    '.__('Caution:').' '.__('You are about to mark the following comment as spam:'); ?>

    '.__('Caution:').' '.__('You are about to delete the following comment:'); ?>

    '.__('Caution:').' '.__('You are about to approve the following comment:'); ?>

    /wp-admin/comment.php' method='get'>
    ' onclick="self.location='/wp-admin/edit-comments.php';" /> ' />
    comment_author_email ) { ?> comment_author_url ) { ?>
    comment_author; ?>
    comment_author_email; ?>
    comment_author_url; ?>

    comment_content; ?>
    '.__('Go back').'!', 'edit-comments.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post.') ); if ( 'spam' == $_REQUEST['dt'] ) wp_set_comment_status($comment->comment_ID, 'spam'); else wp_delete_comment($comment->comment_ID); if ((wp_get_referer() != '') && (false == $noredir)) { wp_redirect(wp_get_referer()); } else { wp_redirect(get_option('siteurl') .'/wp-admin/edit-comments.php'); } exit(); break; case 'unapprovecomment': $comment = (int) $_GET['c']; check_admin_referer('unapprove-comment_' . $comment); if (isset($_GET['noredir'])) { $noredir = true; } else { $noredir = false; } if ( ! $comment = get_comment($comment) ) wp_die(__('Oops, no comment with this ID.').sprintf(' '.__('Go back').'!', 'edit.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post, so you cannot disapprove this comment.') ); wp_set_comment_status($comment->comment_ID, "hold"); if ((wp_get_referer() != "") && (false == $noredir)) { wp_redirect(wp_get_referer()); } else { wp_redirect(get_option('siteurl') .'/wp-admin/edit.php?p='. (int) $comment->comment_post_ID.'&c=1#comments'); } exit(); break; case 'approvecomment': $comment = (int) $_GET['c']; check_admin_referer('approve-comment_' . $comment); if (isset($_GET['noredir'])) { $noredir = true; } else { $noredir = false; } if ( ! $comment = get_comment($comment) ) wp_die(__('Oops, no comment with this ID.').sprintf(' '.__('Go back').'!', 'edit.php')); if ( !current_user_can('edit_post', $comment->comment_post_ID) ) wp_die( __('You are not allowed to edit comments on this post, so you cannot approve this comment.') ); wp_set_comment_status($comment->comment_ID, "approve"); if (get_option("comments_notify") == true) { wp_notify_postauthor($comment->comment_ID); } if ((wp_get_referer() != "") && (false == $noredir)) { wp_redirect(wp_get_referer()); } else { wp_redirect(get_option('siteurl') .'/wp-admin/edit.php?p='. (int) $comment->comment_post_ID.'&c=1#comments'); } exit(); break; case 'editedcomment': $comment_ID = (int) $_POST['comment_ID']; $comment_post_ID = (int) $_POST['comment_post_id']; check_admin_referer('update-comment_' . $comment_ID); edit_comment(); $location = ( empty($_POST['referredby']) ? "edit.php?p=$comment_post_ID&c=1" : $_POST['referredby'] ) . '#comment-' . $comment_ID; $location = apply_filters('comment_edit_redirect', $location, $comment_ID); wp_redirect($location); exit(); break; default: break; } // end switch include('admin-footer.php'); ?> ;wordpress/wp-admin/.svn/text-base/custom-fields.js.svn-basefunction customFieldsOnComplete( what, where, update, transport ) { var pidEl = $('post_ID'); pidEl.name = 'post_ID'; pidEl.value = getNodeValue(transport.responseXML, 'postid'); var aEl = $('hiddenaction') if ( aEl.value == 'post' ) aEl.value = 'postajaxpost'; } addLoadEvent(customFieldsAddIn); function customFieldsAddIn() { theList.showLink=0; theList.addComplete = customFieldsOnComplete; if (!theList.theList) return false; inputs = theList.theList.getElementsByTagName('input'); for ( var i=0; i < inputs.length; i++ ) { if ('text' == inputs[i].type) { inputs[i].setAttribute('autocomplete', 'off'); inputs[i].onkeypress = function(e) {return killSubmit('theList.ajaxUpdater("meta", "meta-' + parseInt(this.name.slice(5),10) + '");', e); }; } if ('updatemeta' == inputs[i].className) { inputs[i].onclick = function(e) {return killSubmit('theList.ajaxUpdater("meta", "meta-' + parseInt(this.parentNode.parentNode.id.slice(5),10) + '");', e); }; } } $('metakeyinput').onkeypress = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; $('updatemetasub').onclick = function(e) {return killSubmit('theList.inputData+="&id="+$("post_ID").value;theList.ajaxAdder("meta", "newmeta");', e); }; } admin_header_callback = $admin_header_callback; } function init() { $page = add_theme_page(__('Custom Image Header'), __('Custom Image Header'), 'edit_themes', 'custom-header', array(&$this, 'admin_page')); add_action("admin_print_scripts-$page", array(&$this, 'js_includes')); add_action("admin_head-$page", array(&$this, 'js'), 50); add_action("admin_head-$page", $this->admin_header_callback, 51); } function js_includes() { wp_enqueue_script('cropper'); wp_enqueue_script('colorpicker'); } function js() { if ( isset( $_POST['textcolor'] ) ) { check_admin_referer('custom-header'); if ( 'blank' == $_POST['textcolor'] ) { set_theme_mod('header_textcolor', 'blank'); } else { $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['textcolor']); if ( strlen($color) == 6 || strlen($color) == 3 ) set_theme_mod('header_textcolor', $color); } } if ( isset($_POST['resetheader']) ) { check_admin_referer('custom-header'); remove_theme_mods(); } ?>

    %1$d x %2$d pixels will be used as-is.'), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); ?>


    false); $file = wp_handle_upload($_FILES['import'], $overrides); if ( isset($file['error']) ) die( $file['error'] ); $url = $file['url']; $file = $file['file']; $filename = basename($file); // Construct the object array $object = array( 'post_title' => $filename, 'post_content' => $url, 'post_mime_type' => 'import', 'guid' => $url); // Save the data $id = wp_insert_attachment($object, $file); $upload = array('file' => $file, 'id' => $id); list($width, $height, $type, $attr) = getimagesize( $file ); if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) { set_theme_mod('header_image', clean_url($url)); $header = apply_filters('wp_create_file_in_uploads', $file, $id); // For replication return $this->finished(); } elseif ( $width > HEADER_IMAGE_WIDTH ) { $oitar = $width / HEADER_IMAGE_WIDTH; $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication $url = str_replace(basename($url), basename($image), $url); $width = $width / $oitar; $height = $height / $oitar; } else { $oitar = 1; } ?>

    1 ) { $_POST['x1'] = $_POST['x1'] * $_POST['oitar']; $_POST['y1'] = $_POST['y1'] * $_POST['oitar']; $_POST['width'] = $_POST['width'] * $_POST['oitar']; $_POST['height'] = $_POST['height'] * $_POST['oitar']; } $header = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); $header = apply_filters('wp_create_file_in_uploads', $header); // For replication $parent = get_post($_POST['attachment_id']); $parent_url = $parent->guid; $url = str_replace(basename($parent_url), basename($header), $parent_url); set_theme_mod('header_image', $url); // cleanup $file = get_attached_file( $_POST['attachment_id'] ); $medium = str_replace(basename($file), 'midsize-'.basename($file), $file); @unlink( apply_filters( 'wp_delete_file', $medium ) ); wp_delete_attachment( $_POST['attachment_id'] ); return $this->finished(); } function finished() { ?>

    step_1(); } elseif ( 2 == $step ) { $this->step_2(); } elseif ( 3 == $step ) { $this->step_3(); } } } ?> ;wordpress/wp-admin/.svn/text-base/dbx-admin-key.js.svn-baseaddLoadEvent( function() {var manager = new dbxManager( dbxL10n.manager );} ); addLoadEvent( function() { //create new docking boxes group var meta = new dbxGroup( 'grabit', // container ID [/-_a-zA-Z0-9/] 'vertical', // orientation ['vertical'|'horizontal'] '10', // drag threshold ['n' pixels] 'no', // restrict drag movement to container axis ['yes'|'no'] '10', // animate re-ordering [frames per transition, or '0' for no effect] 'yes', // include open/close toggle buttons ['yes'|'no'] 'closed', // default state ['open'|'closed'] dbxL10n.open, // word for "open", as in "open this box" dbxL10n.close, // word for "close", as in "close this box" dbxL10n.moveMouse, // sentence for "move this box" by mouse dbxL10n.toggleMouse, // pattern-match sentence for "(open|close) this box" by mouse dbxL10n.moveKey, // sentence for "move this box" by keyboard dbxL10n.toggleKey, // pattern-match sentence-fragment for "(open|close) this box" by keyboard '%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts ); // Boxes are closed by default. Open the Category box if the cookie isn't already set. var catdiv = document.getElementById('categorydiv'); if ( catdiv ) { var button = catdiv.getElementsByTagName('A')[0]; if ( dbx.cookiestate == null && /dbx\-toggle\-closed/.test(button.className) ) meta.toggleBoxState(button, true); } var advanced = new dbxGroup( 'advancedstuff', 'vertical', '10', 'yes', // restrict drag movement to container axis ['yes'|'no'] '10', 'yes', 'closed', dbxL10n.open, dbxL10n.close, dbxL10n.moveMouse, dbxL10n.toggleMouse, dbxL10n.moveKey, dbxL10n.toggleKey, '%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts ); }); Awordpress/wp-admin/.svn/text-base/edit-category-form.php.svn-base '; $action = 'editedcat'; $nonce_action = 'update-category_' . $cat_ID; do_action('edit_category_form_pre', $category); } else { $heading = __('Add Category'); $submit_text = __('Add Category »'); $form = '
    '; $action = 'addcat'; $nonce_action = 'add-category'; do_action('add_category_form_pre', $category); } ?>

    category_parent . '&hierarchical=1&show_option_none=' . __('None')); ?>

    ;wordpress/wp-admin/.svn/text-base/edit-comments.js.svn-base :addLoadEvent(function() { theCommentList = new listMan('the-comment-list'); if ( !theCommentList ) return false; theExtraCommentList = new listMan('the-extra-comment-list'); if ( theExtraCommentList ) { theExtraCommentList.showLink = 0; theExtraCommentList.altOffset = 1; if ( theExtraCommentList.theList && theExtraCommentList.theList.childNodes ) var commentNum = $A(theExtraCommentList.theList.childNodes).findAll( function(i) { return Element.visible(i) } ).length; else var commentNum = 0; var urlQ = document.location.href.split('?'); var params = urlQ[1] ? urlQ[1].toQueryParams() : []; var search = params['s'] ? params['s'] : ''; var page = params['apage'] ? params['apage'] : 1; } theCommentList.dimComplete = function(what,id,dimClass) { var m = document.getElementById('awaitmod'); if ( document.getElementById(what + '-' + id).className.match(dimClass) ) m.innerHTML = parseInt(m.innerHTML,10) + 1; else m.innerHTML = parseInt(m.innerHTML,10) - 1; } theCommentList.delComplete = function(what,id) { var m = document.getElementById('awaitmod'); what = what.split('-')[0]; if ( document.getElementById(what + '-' + id).className.match('unapproved') ) m.innerHTML = parseInt(m.innerHTML,10) - 1; if ( theExtraCommentList && commentNum ) { var theMover = theExtraCommentList.theList.childNodes[0]; Element.removeClassName(theMover,'alternate'); theCommentList.theList.appendChild(theMover); theExtraCommentList.inputData += '&page=' + page; if ( search ) theExtraCommentList.inputData += '&s=' + search; // trust the URL not the search box theExtraCommentList.addComplete = function() { if ( theExtraCommentList.theList.childNodes ) var commentNum = $A(theExtraCommentList.theList.childNodes).findAll( function(i) { return Element.visible(i) } ).length; else var commentNum = 0; } theExtraCommentList.ajaxAdder( 'comment', 'ajax-response' ); // Dummy Request } } if ( theList ) // the post list: edit.php theList.delComplete = function() { var comments = document.getElementById('comments'); var commdel = encloseFunc(function(a){a.parentNode.removeChild(a);},comments); var listdel = encloseFunc(function(a){a.parentNode.removeChild(a);},theCommentList.theList); setTimeout(commdel,705); setTimeout(listdel,705); } });

    |

    get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_ID = " . $comment); // $authordata = get_userdata( $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = $post_id") ); if ( current_user_can('edit_post', $post_id) ) { if ( !empty( $_POST['spam_button'] ) ) wp_set_comment_status($comment, 'spam'); else wp_set_comment_status($comment, 'delete'); ++$i; } endforeach; echo '

    '; if ( !empty( $_POST['spam_button'] ) ) { printf(__ngettext('%s comment marked as spam', '%s comments marked as spam.', $i), $i); } else { printf(__ngettext('%s comment deleted.', '%s comments deleted.', $i), $i); } echo '

    '; endif; if ( isset( $_GET['apage'] ) ) $page = abs( (int) $_GET['apage'] ); else $page = 1; $start = $offset = ( $page - 1 ) * 20; list($_comments, $total) = _wp_get_comment_list( isset($_GET['s']) ? $_GET['s'] : false, $start, 25 ); // Grab a few extra $comments = array_slice($_comments, 0, 20); $extra_comments = array_slice($_comments, 20); $page_links = paginate_links( array( 'base' => add_query_arg( 'apage', '%#%' ), 'format' => '', 'total' => ceil($total / 20), 'current' => $page )); if ( $page_links ) echo ""; if ('view' == $mode) { if ($comments) { $offset = $offset + 1; $start = " start='$offset'"; echo "
      \n"; $i = 0; foreach ( $comments as $comment ) { get_comment( $comment ); // Cache it _wp_comment_list_item( $comment->comment_ID, ++$i ); } echo "
    \n\n"; if ( $extra_comments ) : ?>

    '; wp_nonce_field('bulk-comments'); echo ''; foreach ($comments as $comment) { $authordata = get_userdata($wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID)); $comment_status = wp_get_comment_status($comment->comment_ID); $class = ('alternate' == $class) ? '' : 'alternate'; $class .= ('unapproved' == $comment_status) ? ' unapproved' : ''; ?>
    ' . __('Name') . ' ' . __('E-mail') . ' ' . __('IP') . ' ' . __('Comment Excerpt') . ' ' . __('Actions') . '
    comment_post_ID) ) { ?> (Unapproved) comment_post_ID) ) { echo "" . __('Edit') . ""; } ?> comment_post_ID) ) { echo "comment_post_ID."&c=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by '%s'. \n 'Cancel' to stop, 'OK' to delete."), $comment->comment_author )) . "', theCommentList );\" class='delete'>" . __('Delete') . " "; } ?>

    '); return false } return confirm('')" /> '); return false } return confirm('')" />

    $page_links

    "; ?>
    Awordpress/wp-admin/.svn/text-base/edit-form-advanced.php.svn-base(T

    "; wp_nonce_field('add-post'); } else { $post_ID = (int) $post_ID; $form_action = 'editpost'; $form_extra = ""; wp_nonce_field('update-post_' . $post_ID); } $form_pingback = ''; $form_prevstatus = ''; $form_trackback = 'to_ping) ) .'" />'; if ('' != $post->pinged) { $pings = '

    '. __('Already pinged:') . '

      '; $already_pinged = explode("\n", trim($post->pinged)); foreach ($already_pinged as $pinged_url) { $pings .= "\n\t
    • " . wp_specialchars($pinged_url) . "
    • "; } $pings .= '
    '; } $saveasdraft = ''; if (empty($post->post_status)) $post->post_status = 'draft'; ?> $_GET['message']) : ?>

    id ); // TODO: ROLE SYSTEM if ( $authors && count( $authors ) > 1 ) : ?>

    post_status ) { ?> post_content); ?>

    post_status || 0 == $post_ID) { ?>

    ' . __('This feature requires iframe support.') . ''; } ?>

    ()

    post_status) ? __("You are about to delete this draft '%s'\n 'Cancel' to stop, 'OK' to delete.") : __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), $post->post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
    @wordpress/wp-admin/.svn/text-base/edit-form-comment.php.svn-basecomment_ID); $form_action = 'editedcomment'; $form_extra = "' />\n\ncomment_ID) ?>
    comment_content, 'content', 'newcomment_author_url'); ?>

    :

    :
    comment_ID ); ?>: />
    8wordpress/wp-admin/.svn/text-base/edit-form.php.svn-base F

    post_category); ?>

    100)) { $rows = 10; } ?>

    (Separate multiple URLs with spaces.)'), 'http://wordpress.org/docs/reference/post/#trackback'); echo '
    '; ?>

    '; } ?>

    =wordpress/wp-admin/.svn/text-base/edit-link-form.php.svn-base+'; $nonce_action = 'update-bookmark_' . $link_id; } else { $heading = __('Add Link'); $submit_text = __('Add Link »'); $form = ' =wordpress/wp-admin/.svn/text-base/edit-page-form.php.svn-base

    "; } else { $post_ID = (int) $post_ID; $form_action = 'editpost'; $nonce_action = 'update-page_' . $post_ID; $form_extra = ""; } $temp_ID = (int) $temp_ID; $user_ID = (int) $user_ID; $sendto = clean_url(stripslashes(wp_get_referer())); if ( 0 != $post_ID && $sendto == get_permalink($post_ID) ) $sendto = 'redo'; ?>
    '; } ?>

    id ) ) : // TODO: ROLE SYSTEM ?>

    post_status ) { ?> post_content); ?>

    post_status || 0 == $post_ID): ?>

    ' . __('This feature requires iframe support.') . ''; } ?>

    ID) ) ?> post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
    9wordpress/wp-admin/.svn/text-base/edit-pages.php.svn-base}

    3wordpress/wp-admin/.svn/text-base/edit.php.svn-base(2

    post_title = apply_filters('the_title', stripslashes($draft->post_title)); if ($draft->post_title == '') $draft->post_title = sprintf(__('Post #%s'), $draft->ID); echo "$draft->post_title"; ++$i; } ?> .

    post_title = apply_filters('the_title', stripslashes($draft->post_title)); if ($draft->post_title == '') $draft->post_title = sprintf(__('Post #%s'), $draft->ID); echo "$draft->post_title"; ++$i; } ?> .

    post_title)); elseif ( ! is_paged() || get_query_var('paged') == 1 ) _e('Last 15 Posts'); else _e('Previous Posts'); } ?>

    get_results("SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC"); if ( count($arc_result) ) { ?>

    'display name' $posts_columns = array( 'id' => '
    ' . __('ID') . '
    ', 'date' => __('When'), 'title' => __('Title'), 'categories' => __('Categories'), 'comments' => '
    ' . __('Comments') . '
    ', 'author' => __('Author') ); $posts_columns = apply_filters('manage_posts_columns', $posts_columns); // you can not edit these at the moment $posts_columns['control_view'] = ''; $posts_columns['control_edit'] = ''; $posts_columns['control_delete'] = ''; ?> $column_display_name) { switch($column_name) { case 'id': ?>
    post_modified ) _e('Unpublished'); else the_time(__('Y-m-d \<\b\r \/\> g:i:s a')); ?> post_status) _e(' - Private'); ?> " . __('1') . '', "" . __('%') . '') ?> ID) ) { echo "" . __('Edit') . ""; } ?> ID) ) { echo "ID) . "' class='delete' onclick=\"return deleteSomething( 'post', " . $id . ", '" . js_escape(sprintf(__("You are about to delete this post '%s'.\n'OK' to delete, 'Cancel' to stop."), get_the_title())) . "' );\">" . __('Delete') . ""; } ?>
    get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $id . " AND comment_approved <> 'spam' ORDER BY comment_date"); if ($comments) { ?>

      get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID)); $comment_status = wp_get_comment_status($comment->comment_ID); if ('unapproved' == $comment_status) $class .= ' unapproved'; if ($i % 2) $class .= ' alternate'; echo "
    1. "; ?>

      comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

      — [ comment_post_ID) ) { echo " " . __('Edit') . ''; echo ' | comment_author)) . "', theCommentList );\">" . __('Delete') . ' '; if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) { echo ' | ' . __('Unapprove') . ' '; echo ' | ' . __('Approve') . ' '; } echo " | comment_post_ID . "&c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to mark as spam this comment by '%s'.\n'Cancel' to stop, 'OK' to mark as spam."), $comment->comment_author)) . "', theCommentList );\">" . __('Spam') . " "; } ?>

    2. '; }//end if comments ?>
    5wordpress/wp-admin/.svn/text-base/export.php.svn-base"^

    get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); $categories = (array) $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, posts_private, links_private FROM $wpdb->categories LEFT JOIN $wpdb->post2cat ON (category_id = cat_id) LEFT JOIN $wpdb->posts ON (post_id <=> id) $where GROUP BY cat_id"); function wxr_missing_parents($categories) { if ( !is_array($categories) || empty($categories) ) return array(); foreach ( $categories as $category ) $parents[$category->cat_ID] = $category->category_parent; $parents = array_unique(array_diff($parents, array_keys($parents))); if ( $zero = array_search('0', $parents) ) unset($parents[$zero]); return $parents; } while ( $parents = wxr_missing_parents($categories) ) { $found_parents = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, posts_private, links_private FROM $wpdb->categories WHERE cat_ID IN (" . join(', ', $parents) . ")"); if ( is_array($found_parents) && count($found_parents) ) $categories = array_merge($categories, $found_parents); else break; } // Put them in order to be inserted with no child going before its parent $pass = 0; $passes = 1000 + count($categories); while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) { if ( $cat->category_parent == 0 || isset($cats[$cat->category_parent]) ) { $cats[$cat->cat_ID] = $cat; } else { $categories[] = $cat; } } unset($categories); function wxr_cdata($str) { if ( seems_utf8($str) == false ) $str = utf8_encode($str); // $str = ent2ncr(wp_specialchars($str)); $str = ""; return $str; } function wxr_cat_name($c) { if ( empty($c->cat_name) ) return; echo '' . wxr_cdata($c->cat_name) . ''; } function wxr_category_description($c) { if ( empty($c->category_description) ) return; echo '' . wxr_cdata($c->category_description) . ''; } print '\n"; ?> <?php bloginfo_rss('name'); ?> http://wordpress.org/?v= category_nicename; ?>category_parent ? $cats[$c->category_parent]->cat_name : ''; ?>posts_private ? '1' : '0'; ?>links_private ? '1' : '0'; ?> <?php the_title_rss() ?> post_content ?>]]> ID; ?> post_date; ?> post_date_gmt; ?> comment_status; ?> ping_status; ?> post_name; ?> post_status; ?> post_parent; ?> menu_order; ?> post_type; ?> get_results("SELECT * FROM $wpdb->postmeta WHERE post_id = " . $post->ID); if ( $postmeta ) { ?> meta_key; ?> meta_value; ?> get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID); if ( $comments ) { foreach ( $comments as $c ) { ?> comment_ID; ?> comment_author; ?> comment_author_email; ?> comment_author_url; ?> comment_author_IP; ?> comment_date; ?> comment_date_gmt; ?> comment_content; ?> comment_approved; ?> comment_type; ?> comment_parent; ?> 5wordpress/wp-admin/.svn/text-base/import.php.svn-base|

    read()) != false) { if ($file{0} == '.') { continue; } elseif (substr($file, -4) == '.php') { require_once($import_root . '/' . $file); } } } $importers = get_importers(); if (empty ($importers)) { echo '

    '.__('No importers are available.').'

    '; // TODO: make more helpful } else { ?> $data) { $style = ('class="alternate"' == $style || 'class="alternate active"' == $style) ? '' : 'alternate'; $action = "{$data[0]}"; if ($style != '') $style = 'class="'.$style.'"'; echo " "; } ?>
    $action {$data[1]}
    :wordpress/wp-admin/.svn/text-base/index-extra.php.svn-baseitems) && 1 < count($rss->items) ) { // Technorati returns a 1-item feed when it has no results ?>

      items = array_slice($rss->items, 0, 10); foreach ($rss->items as $item ) { ?>
    items) && 0 != count($rss->items) ) { ?>

    items = array_slice($rss->items, 0, 3); foreach ($rss->items as $item ) { ?>

    '>

    items) && 0 != count($rss->items) ) { ?>

      items = array_slice($rss->items, 0, 20); foreach ($rss->items as $item ) { $title = wp_specialchars($item['title']); $author = preg_replace( '|(.+?):.+|s', '$1', $item['title'] ); $post = preg_replace( '|.+?:(.+)|s', '$1', $item['title'] ); ?>
    • '>

    »

    4wordpress/wp-admin/.svn/text-base/index.php.svn-base^

    get_results("SELECT comment_author, comment_author_url, comment_ID, comment_post_ID FROM $wpdb->comments WHERE comment_approved = 1 ORDER BY comment_date_gmt DESC"); $numcomments = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 0"); if ( $comments || $numcomments ) : ?>

    »

    »

    get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql('post') . " AND post_date_gmt < '$today' ORDER BY post_date DESC") ) : ?>

    »

      post_title == '') $post->post_title = sprintf(__('Post #%s'), $post->ID); echo "
    • "; the_title(); echo '
    • '; } ?>
    get_results("SELECT ID, post_title, post_date_gmt FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'future' ORDER BY post_date ASC") ) : ?>

      post_title == '') $post->post_title = sprintf(__('Post #%s'), $post->ID); echo "
    • " . sprintf(__('%1$s in %2$s'), "$post->post_title", human_time_diff( current_time('timestamp', 1), strtotime($post->post_date_gmt. ' GMT') )) . "
    • "; } ?>

    get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'"); $numcomms = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '1'"); $numcats = (int) $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->categories"); $post_str = sprintf(__ngettext('%1$s post', '%1$s posts', $numposts), number_format($numposts), 'edit.php'); $comm_str = sprintf(__ngettext('%1$s comment', '%1$s comments', $numcomms), number_format($numcomms), 'edit-comments.php'); $cat_str = sprintf(__ngettext('%1$s category', '%1$s categories', $numcats), number_format($numcats), 'categories.php'); ?>

    documentation or visit the support forums."); ?>

     
    6wordpress/wp-admin/.svn/text-base/install.css.svn-baseehtml { background: #eee; } body { background: #fff; color: #000; font-family: Georgia, "Times New Roman", Times, serif; margin-left: 20%; margin-right: 20%; padding: .2em 2em; } h1 { color: #006; font-size: 18px; font-weight: lighter; } h2 { font-size: 16px; } p, li, dt { line-height: 140%; padding-bottom: 2px; } ul, ol { padding: 5px 5px 5px 20px; } #logo { margin-bottom: 2em; } .step a, .step input { font-size: 2em; } td input { font-size: 1.5em; } .step, th { text-align: right; } #footer { text-align: center; border-top: 1px solid #ccc; padding-top: 1em; font-style: italic; }=wordpress/wp-admin/.svn/text-base/install-helper.php.svn-baseget_tables() as $table ) { if ($table == $table_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_table() as $table ) { if ($table == $table_name) { return true; } } return false; } /** ** maybe_add_column() ** Add column to db table if it doesn't exist. ** Returns: true if already exists or on successful completion ** false on error */ function maybe_add_column($table_name, $column_name, $create_ddl) { global $wpdb, $debug; foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($debug) echo("checking $column == $column_name
    "); if ($column == $column_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($column == $column_name) { return true; } } return false; } /** ** maybe_drop_column() ** Drop column from db table if it exists. ** Returns: true if it doesn't already exist or on successful drop ** false on error */ function maybe_drop_column($table_name, $column_name, $drop_ddl) { global $wpdb; foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($column == $column_name) { //found it try to drop it. $q = $wpdb->query($drop_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { if ($column == $column_name) { return false; } } } } // else didn't find it return true; } /** ** check_column() ** Check column matches passed in criteria. ** Pass in null to skip checking that criteria ** Returns: true if it matches ** false otherwise ** (case sensitive) Column names returned from DESC table are: ** Field ** Type ** Null ** Key ** Default ** Extra */ function check_column($table_name, $col_name, $col_type, $is_null = null, $key = null, $default = null, $extra = null) { global $wpdb, $debug; $diffs = 0; $results = $wpdb->get_results("DESC $table_name"); foreach ($results as $row ) { if ($debug > 1) print_r($row); if ($row->Field == $col_name) { // got our column, check the params if ($debug) echo ("checking $row->Type against $col_type\n"); if (($col_type != null) && ($row->Type != $col_type)) { ++$diffs; } if (($is_null != null) && ($row->Null != $is_null)) { ++$diffs; } if (($key != null) && ($row->Key != $key)) { ++$diffs; } if (($default != null) && ($row->Default != $default)) { ++$diffs; } if (($extra != null) && ($row->Extra != $extra)) { ++$diffs; } if ($diffs > 0) { if ($debug) echo ("diffs = $diffs returning false\n"); return false; } return true; } // end if found our column } return false; } /* echo "

    testing

    "; echo "
    ";
    
    //check_column('wp_links', 'link_description', 'mediumtext');
    //if (check_column($wpdb->comments, 'comment_author', 'tinytext'))
    //    echo "ok\n";
    $error_count = 0;
    $tablename = $wpdb->links;
    // check the column
    if (!check_column($wpdb->links, 'link_description', 'varchar(255)'))
    {
    	$ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' ";
    	$q = $wpdb->query($ddl);
    }
    if (check_column($wpdb->links, 'link_description', 'varchar(255)')) {
    	$res .= $tablename . ' - ok 
    '; } else { $res .= 'There was a problem with ' . $tablename . '
    '; ++$error_count; } echo "
    "; */ ?>6wordpress/wp-admin/.svn/text-base/install.php.svn-base/wp-config.php file. I need this before we can get started. Need more help? We got it. You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file.", "WordPress › Error"); } require_once('../wp-config.php'); require_once('./upgrade-functions.php'); if (isset($_GET['step'])) $step = $_GET['step']; else $step = 0; header( 'Content-Type: text/html; charset=utf-8' ); ?> > <?php _e('WordPress › Installation'); ?> text_direction) ) : ?>

    WordPress

    '.__('Already Installed').'

    '.__('You appear to have already installed WordPress. To reinstall please clear your old database tables first.').'

    '); switch($step) { case 0: ?>

    ReadMe documentation at your leisure.'), '../readme.html'); ?>

    ERROR: please type your e-mail address")); } else if (!is_email($admin_email)) { die(__("ERROR: the e-mail address isn't correct")); } ?>

    log in with the username "admin" and password "%2$s".'), '../wp-login.php', $password); ?>

    Note that password carefully! It is a random password that was generated just for you. If you lose it, you will have to delete the tables from the database yourself, and re-install WordPress. So to review:'); ?>

    admin
    wp-login.php

    :wordpress/wp-admin/.svn/text-base/install-rtl.css.svn-basebody { font: 13px Tahoma, Georgia, "Times New Roman", Times, serif; } ul, ol { padding: 5px 20px 5px 5px; } h1, h2, h3 { font-family: "Times New Roman", Times, serif; font-weight: 700 } .step, th { text-align: left } input { font-family: "Times New Roman", Times, serif; padding: 1px } #logo { background: url(../wp-content/plugins/WP-Jalali/wp-fa-logo.png) center right no-repeat; text-align: left; } #admin_email {direction: ltr; text-align: left; } #footer { font-style: normal; }7wordpress/wp-admin/.svn/text-base/link-add.php.svn-base

    :wordpress/wp-admin/.svn/text-base/link-import.php.svn-baseu


    false, 'test_type' => false); $file = wp_handle_upload($_FILES['userfile'], $overrides); if ( isset($file['error']) ) wp_die($file['error']); $url = $file['url']; $opml_url = $file['file']; $blogrolling = false; } if ( isset($opml_url) && $opml_url != '' ) { if ( $blogrolling == true ) { $opml = wp_remote_fopen($opml_url); } else { $opml = file_get_contents($opml_url); } include_once('link-parse-opml.php'); $link_count = count($names); for ( $i = 0; $i < $link_count; $i++ ) { if ('Last' == substr($titles[$i], 0, 4)) $titles[$i] = ''; if ( 'http' == substr($titles[$i], 0, 4) ) $titles[$i] = ''; $link = array( 'link_url' => $urls[$i], 'link_name' => $wpdb->escape($names[$i]), 'link_category' => array($cat_id), 'link_description' => $wpdb->escape($descriptions[$i]), 'link_owner' => $user_ID, 'link_rss' => $feeds[$i]); wp_insert_link($link); echo sprintf('

    '.__('Inserted %s').'

    ', $names[$i]); } ?>

    manage those links.'), $link_count, $cat_id, 'link-manager.php') ?>

    " . __("You need to supply your OPML url. Press back on your browser and try again") . "

    \n"; } // end else if ( ! $blogrolling ) apply_filters( 'wp_delete_file', $opml_url); @unlink($opml_url); ?>
    ;wordpress/wp-admin/.svn/text-base/link-manager.php.svn-base2

    '; $deleted = (int) $_GET['deleted']; printf(__ngettext('%s link deleted.', '%s links deleted', $deleted), $deleted); echo '

    '; } ?>

    add links to sites that you visit often and share them on your blog. When you have a list of links in your sidebar to other blogs, it’s called a “blogroll.”'); ?>

    \n"; $select_cat .= '\n"; foreach ((array) $categories as $cat) $select_cat .= '\n"; $select_cat .= "\n"; $select_order = "\n"; printf(__('Currently showing %1$s links ordered by %2$s'), $select_cat, $select_order); ?>

    '' . __('Name') . '', 'url' => '' . __('URL') . '', 'categories' => '' . __('Categories') . '', 'rel' => '' . __('rel') . '', 'visible' => '' . __('Visible') . '', 'action' => '' . __('Action') . '', ); $link_columns = apply_filters('manage_link_columns', $link_columns); ?>
    >wordpress/wp-admin/.svn/text-base/link-parse-opml.php.svn-base 'link_url', 'HTMLURL' => 'link_url', 'TEXT' => 'link_name', 'TITLE' => 'link_name', 'TARGET' => 'link_target', 'DESCRIPTION' => 'link_description', 'XMLURL' => 'link_rss' ); $map = $opml_map; /** ** startElement() ** Callback function. Called at the start of a new xml tag. **/ function startElement($parser, $tagName, $attrs) { global $updated_timestamp, $all_links, $map; global $names, $urls, $targets, $descriptions, $feeds; if ($tagName == 'OUTLINE') { foreach (array_keys($map) as $key) { if (isset($attrs[$key])) { $$map[$key] = $attrs[$key]; } } //echo("got data: link_url = [$link_url], link_name = [$link_name], link_target = [$link_target], link_description = [$link_description]
    \n"); // save the data away. $names[] = $link_name; $urls[] = $link_url; $targets[] = $link_target; $feeds[] = $link_rss; $descriptions[] = $link_description; } // end if outline } /** ** endElement() ** Callback function. Called at the end of an xml tag. **/ function endElement($parser, $tagName) { // nothing to do. } // Create an XML parser $xml_parser = xml_parser_create(); // Set the functions to handle opening and closing tags xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!xml_parse($xml_parser, $opml, true)) { echo(sprintf(__('XML error: %1$s at line %2$s'), xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } // Free up memory used by the XML parser xml_parser_free($xml_parser); ?> 3wordpress/wp-admin/.svn/text-base/link.php.svn-base query("update $wpdb->links SET link_category='$category' WHERE link_id IN ($all_links)"); wp_redirect($this_file); exit; break; case 'add' : check_admin_referer('add-bookmark'); add_link(); wp_redirect(wp_get_referer().'?added=true'); exit; break; case 'save' : $link_id = (int) $_POST['link_id']; check_admin_referer('update-bookmark_' . $link_id); edit_link($link_id); wp_redirect($this_file); exit; break; case 'delete' : $link_id = (int) $_GET['link_id']; check_admin_referer('delete-bookmark_' . $link_id); if (!current_user_can('manage_links')) wp_die(__('Cheatin’ uh?')); wp_delete_link($link_id); wp_redirect($this_file); exit; break; case 'edit' : wp_enqueue_script( array('xfn', 'dbx-admin-key?pagenow=link.php') ); if ( current_user_can( 'manage_categories' ) ) wp_enqueue_script( 'ajaxcat' ); $parent_file = 'link-manager.php'; $submenu_file = 'link-manager.php'; $title = __('Edit Link'); include_once ('admin-header.php'); if (!current_user_can('manage_links')) wp_die(__('You do not have sufficient permissions to edit the links for this blog.')); $link_id = (int) $_GET['link_id']; if (!$link = get_link_to_edit($link_id)) wp_die(__('Link not found.')); include ('edit-link-form.php'); break; default : break; } include ('admin-footer.php'); ?> :wordpress/wp-admin/.svn/text-base/menu-header.php.svn-base>
    3wordpress/wp-admin/.svn/text-base/menu.php.svn-baseget_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'"); $submenu['edit-comments.php'][25] = array(sprintf(__("Awaiting Moderation (%s)"), "$awaiting_mod"), 'edit_posts', 'moderation.php'); $submenu['edit.php'][5] = array(__('Posts'), 'edit_posts', 'edit.php'); $submenu['edit.php'][10] = array(__('Pages'), 'edit_pages', 'edit-pages.php'); $submenu['edit.php'][12] = array(__('Uploads'), 'upload_files', 'upload.php'); $submenu['edit.php'][15] = array(__('Categories'), 'manage_categories', 'categories.php'); $submenu['edit.php'][30] = array(__('Files'), 'edit_files', 'templates.php'); $submenu['edit.php'][35] = array(__('Import'), 'import', 'import.php'); $submenu['edit.php'][40] = array(__('Export'), 'import', 'export.php'); $submenu['link-manager.php'][5] = array(__('Manage Blogroll'), 'manage_links', 'link-manager.php'); $submenu['link-manager.php'][10] = array(__('Add Link'), 'manage_links', 'link-add.php'); $submenu['link-manager.php'][20] = array(__('Import Links'), 'manage_links', 'link-import.php'); if ( current_user_can('edit_users') ) { $_wp_real_parent_file['profile.php'] = 'users.php'; // Back-compat for plugins adding submenus to profile.php. $submenu['users.php'][5] = array(__('Authors & Users'), 'edit_users', 'users.php'); $submenu['users.php'][10] = array(__('Your Profile'), 'read', 'profile.php'); } else { $submenu['profile.php'][5] = array(__('Your Profile'), 'read', 'profile.php'); } $submenu['options-general.php'][10] = array(__('General'), 'manage_options', 'options-general.php'); $submenu['options-general.php'][15] = array(__('Writing'), 'manage_options', 'options-writing.php'); $submenu['options-general.php'][20] = array(__('Reading'), 'manage_options', 'options-reading.php'); $submenu['options-general.php'][25] = array(__('Discussion'), 'manage_options', 'options-discussion.php'); $submenu['options-general.php'][30] = array(__('Privacy'), 'manage_options', 'options-privacy.php'); $submenu['options-general.php'][35] = array(__('Permalinks'), 'manage_options', 'options-permalink.php'); $submenu['options-general.php'][40] = array(__('Miscellaneous'), 'manage_options', 'options-misc.php'); $submenu['plugins.php'][5] = array(__('Plugins'), 'activate_plugins', 'plugins.php'); $submenu['plugins.php'][10] = array(__('Plugin Editor'), 'edit_plugins', 'plugin-editor.php'); $submenu['themes.php'][5] = array(__('Themes'), 'switch_themes', 'themes.php'); $submenu['themes.php'][10] = array(__('Theme Editor'), 'edit_themes', 'theme-editor.php'); do_action('_admin_menu'); // Create list of page plugin hook names. foreach ($menu as $menu_page) { $admin_page_hooks[$menu_page[2]] = sanitize_title($menu_page[0]); } $_wp_submenu_nopriv = array(); $_wp_menu_nopriv = array(); // Loop over submenus and remove pages for which the user does not have privs. foreach ($submenu as $parent => $sub) { foreach ($sub as $index => $data) { if ( ! current_user_can($data[1]) ) { unset($submenu[$parent][$index]); $_wp_submenu_nopriv[$parent][$data[2]] = true; } } if ( empty($submenu[$parent]) ) unset($submenu[$parent]); } // Loop over the top-level menu. // Menus for which the original parent is not acessible due to lack of privs will have the next // submenu in line be assigned as the new menu parent. foreach ( $menu as $id => $data ) { if ( empty($submenu[$data[2]]) ) continue; $subs = $submenu[$data[2]]; $first_sub = array_shift($subs); $old_parent = $data[2]; $new_parent = $first_sub[2]; // If the first submenu is not the same as the assigned parent, // make the first submenu the new parent. if ( $new_parent != $old_parent ) { $_wp_real_parent_file[$old_parent] = $new_parent; $menu[$id][2] = $new_parent; foreach ($submenu[$old_parent] as $index => $data) { $submenu[$new_parent][$index] = $submenu[$old_parent][$index]; unset($submenu[$old_parent][$index]); } unset($submenu[$old_parent]); $_wp_submenu_nopriv[$new_parent] = $_wp_submenu_nopriv[$old_parent]; } } do_action('admin_menu', ''); // Remove menus that have no accessible submenus and require privs that the user does not have. // Run re-parent loop again. foreach ( $menu as $id => $data ) { // If submenu is empty... if ( empty($submenu[$data[2]]) ) { // And user doesn't have privs, remove menu. if ( ! current_user_can($data[1]) ) { $_wp_menu_nopriv[$data[2]] = true; unset($menu[$id]); } } } unset($id); uksort($menu, "strnatcasecmp"); // make it all pretty if (! user_can_access_admin_page()) { wp_die( __('You do not have sufficient permissions to access this page.') ); } ?> 9wordpress/wp-admin/.svn/text-base/moderation.php.svn-base# $v) { $comment[intval($k)] = $v; } } switch($action) { case 'update': check_admin_referer('moderate-comments'); if ( !current_user_can('moderate_comments') ) wp_die(__('Your level is not high enough to moderate comments.')); $item_ignored = 0; $item_deleted = 0; $item_approved = 0; $item_spam = 0; foreach($comment as $key => $value) { if ($feelinglucky && 'later' == $value) $value = 'delete'; switch($value) { case 'later': // do nothing with that comment // wp_set_comment_status($key, "hold"); ++$item_ignored; break; case 'delete': wp_set_comment_status($key, 'delete'); ++$item_deleted; break; case 'spam': wp_set_comment_status($key, 'spam'); ++$item_spam; break; case 'approve': wp_set_comment_status($key, 'approve'); if ( get_option('comments_notify') == true ) { wp_notify_postauthor($key); } ++$item_approved; break; } } $file = basename(__FILE__); wp_redirect("$file?ignored=$item_ignored&deleted=$item_deleted&approved=$item_approved&spam=$item_spam"); exit(); break; default: require_once('admin-header.php'); if ( isset($_GET['deleted']) || isset($_GET['approved']) || isset($_GET['ignored']) ) { echo "
    \n

    "; $approved = (int) $_GET['approved']; $deleted = (int) $_GET['deleted']; $ignored = (int) $_GET['ignored']; $spam = (int) $_GET['spam']; if ($approved) { printf(__ngettext('%s comment approved', '%s comments approved', $approved), $approved); echo "
    \n"; } if ($deleted) { printf(__ngettext('%s comment deleted', '%s comments deleted', $deleted), $deleted); echo "
    \n"; } if ($spam) { printf(__ngettext('%s comment marked as spam', '%s comments marked as spam', $spam), $spam); echo "
    \n"; } if ($ignored) { printf(__ngettext('%s comment unchanged', '%s comments unchanged', $ignored), $ignored); echo "
    \n"; } echo "

    \n"; } ?>
    get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = '0'"); else $comments = ''; if ($comments) { // list all comments that are waiting for approval $file = basename(__FILE__); ?>

      comment_date); $post_title = $wpdb->get_var("SELECT post_title FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID); if ($i % 2) $class = 'js-unapproved alternate'; else $class = 'js-unapproved'; echo "\n\t
    1. "; ?>

      comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

      — [ comment_ID.'">' . __('Edit') . ' | '; echo " comment_post_ID."&comment=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by '%s'.\n'Cancel' to stop, 'OK' to delete."), $comment->comment_author )) . "', theCommentList );\">" . __('Delete') . " | "; ?> comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title; ?> ] —      

    '.__("Currently there are no comments for you to moderate.") . "

    \n"; } ?>
    Awordpress/wp-admin/.svn/text-base/options-discussion.php.svn-base

    ('.__('These settings may be overridden for individual articles.').')'; ?>

    ' ) ?>

    moderation queue. One word or IP per line. It will match inside words, so "press" will match "WordPress".') ?>

    >wordpress/wp-admin/.svn/text-base/options-general.php.svn-baseb


    " />
    " />
    to be different from the directory you installed WordPress.'); ?>


    UTC time is:') ?>
    (-6 for Central Time.'); ?>)


      Documentation on date formatting. Click "Update options" to update sample output.') ?>

    ;wordpress/wp-admin/.svn/text-base/options-head.php.svn-base

    ;wordpress/wp-admin/.svn/text-base/options-misc.php.svn-base

    :
    wp-content/uploads'); ?>

    />

    @wordpress/wp-admin/.svn/text-base/options-permalink.php.svn-base set_permalink_structure($permalink_structure); } if ( isset($_POST['category_base']) ) { $category_base = $_POST['category_base']; if (! empty($category_base) ) $category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']); $wp_rewrite->set_category_base($category_base); } } $permalink_structure = get_option('permalink_structure'); $category_base = get_option('category_base'); if ( (!file_exists($home_path.'.htaccess') && is_writable($home_path)) || is_writable($home_path.'.htaccess') ) $writable = true; else $writable = false; if ($wp_rewrite->using_index_permalinks()) $usingpi = true; else $usingpi = false; $wp_rewrite->flush_rules(); ?>

    URLs which have question marks and lots of numbers in them, however WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started.'); ?>


    :

    URLs here. For example, /taxonomy/tags would make your category links like http://example.org/taxonomy/tags/uncategorized/. If you leave this blank the default will be used.') ?>

    URLs here. For example, /index.php/taxonomy/tags would make your category links like http://example.org/index.php/taxonomy/tags/uncategorized/. If you leave this blank the default will be used.') ?>

    :

    .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file. Click in the field and press CTRL + a to select all.') ?>

    6wordpress/wp-admin/.svn/text-base/options.php.svn-base  $value) { if ( !in_array($key, array('_wpnonce', '_wp_http_referer')) ) $options[] = $key; } } else { $options = explode(',', stripslashes($_POST['page_options'])); } if ($options) { foreach ($options as $option) { $option = trim($option); $value = trim($_POST[$option]); $value = sanitize_option($option, $value); // This does stripslashes on those that need it update_option($option, $value); } } $referred = remove_query_arg('updated' , wp_get_referer()); $goback = add_query_arg('updated', 'true', wp_get_referer()); $goback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $goback); wp_redirect($goback); break; default: include('admin-header.php'); ?>

    get_results("SELECT * FROM $wpdb->options ORDER BY option_name"); foreach ( (array) $options as $option) : $disabled = ''; $option->option_name = attribute_escape($option->option_name); if ( is_serialized($option->option_value) ) { if ( is_serialized_string($option->option_value) ) { // this is a serialized string, so we should display it $value = maybe_unserialize($option->option_value); $options_to_update[] = $option->option_name; $class = 'all-options'; } else { $value = 'SERIALIZED DATA'; $disabled = ' disabled="disabled"'; $class = 'all-options disabled'; } } else { $value = $option->option_value; $options_to_update[] = $option->option_name; $class = 'all-options'; } echo " "; endforeach; ?>
    "; if (strpos($value, "\n") != false) echo ""; else echo ""; echo " $option->option_description

    >wordpress/wp-admin/.svn/text-base/options-privacy.php.svn-base

    />

    />

    >wordpress/wp-admin/.svn/text-base/options-reading.php.svn-base

    Warning: these pages should not be the same!'); ?>


    <!--more--> feature, it will cut off posts in RSS feeds.'); ?>


    recommended)') ?>

    >wordpress/wp-admin/.svn/text-base/options-writing.php.svn-base


    %s, %s, %s.'), substr(md5(uniqid(microtime())),0,5), substr(md5(uniqid(microtime())),0,5), substr(md5(uniqid(microtime())),0,5)) ?>

    Update Services on the Codex. Separate multiple service URLs with line breaks.') ?>

    Update Services because of your blog\'s privacy settings.'), 'options-privacy.php'); ?>

    7wordpress/wp-admin/.svn/text-base/page-new.php.svn-baseP

    | »

    post_type = 'page'; include('edit-page-form.php'); } ?> 3wordpress/wp-admin/.svn/text-base/page.php.svn-basevpost_type ) { wp_redirect("post.php?action=edit&post=$post_ID"); exit(); } if($post->post_status == 'draft') { wp_enqueue_script('prototype'); wp_enqueue_script('interface'); wp_enqueue_script('autosave'); } require_once('admin-header.php'); if ( !current_user_can('edit_page', $page_ID) ) die ( __('You are not allowed to edit this page.') ); include('edit-page-form.php'); break; case 'editattachment': $page_id = $post_ID = (int) $_POST['post_ID']; check_admin_referer('update-attachment_' . $page_id); // Don't let these be changed unset($_POST['guid']); $_POST['post_type'] = 'attachment'; // Update the thumbnail filename $newmeta = wp_get_attachment_metadata( $page_id, true ); $newmeta['thumb'] = $_POST['thumb']; wp_update_attachment_metadata( $newmeta ); case 'editpost': $page_ID = (int) $_POST['post_ID']; check_admin_referer('update-page_' . $page_ID); $page_ID = edit_post(); if ( 'post' == $_POST['originalaction'] ) { if (!empty($_POST['mode'])) { switch($_POST['mode']) { case 'bookmarklet': $location = $_POST['referredby']; break; case 'sidebar': $location = 'sidebar.php?a=b'; break; default: $location = 'page-new.php'; break; } } else { $location = "page-new.php?posted=$page_ID"; } if ( isset($_POST['save']) ) $location = "page.php?action=edit&post=$page_ID"; } else { if ($_POST['save']) { $location = "page.php?action=edit&post=$page_ID"; } elseif ($_POST['updatemeta']) { $location = wp_get_referer() . '&message=2#postcustom'; } elseif ($_POST['deletemeta']) { $location = wp_get_referer() . '&message=3#postcustom'; } elseif (!empty($_POST['referredby']) && $_POST['referredby'] != wp_get_referer()) { $location = $_POST['referredby']; if ( $_POST['referredby'] == 'redo' ) $location = get_permalink( $page_ID ); } elseif ($action == 'editattachment') { $location = 'attachments.php'; } else { $location = 'page-new.php'; } } wp_redirect($location); // Send user on their way while we keep working exit(); break; case 'delete': $page_id = (isset($_GET['post'])) ? intval($_GET['post']) : intval($_POST['post_ID']); check_admin_referer('delete-page_' . $page_id); $page = & get_post($page_id); if ( !current_user_can('delete_page', $page_id) ) wp_die( __('You are not allowed to delete this page.') ); if ( $page->post_type == 'attachment' ) { if ( ! wp_delete_attachment($page_id) ) wp_die( __('Error in deleting...') ); } else { if ( !wp_delete_post($page_id) ) wp_die( __('Error in deleting...') ); } $sendback = wp_get_referer(); if (strpos($sendback, 'page.php') != false) $sendback = get_option('siteurl') .'/wp-admin/page.php'; elseif (strpos($sendback, 'attachments.php') != false) $sendback = get_option('siteurl') .'/wp-admin/attachments.php'; $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback); wp_redirect($sendback); exit(); break; default: wp_redirect('edit-pages.php'); exit(); break; } // end switch include('admin-footer.php'); ?> '.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); $newcontent = stripslashes($_POST['newcontent']); if (is_writeable($real_file)) { $f = fopen($real_file, 'w+'); fwrite($f, $newcontent); fclose($f); // Deactivate so we can test it. $current = get_option('active_plugins'); if ( in_array($file, $current) || isset($_POST['phperror']) ) { if ( in_array($file, $current) ) { array_splice($current, array_search( $file, $current), 1 ); // Array-fu! update_option('active_plugins', $current); } wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('edit-plugin-test_' . $file), "plugin-editor.php?file=$file&liveupdate=1")); exit(); } wp_redirect("plugin-editor.php?file=$file&a=te"); } else { wp_redirect("plugin-editor.php?file=$file"); } exit(); break; default: if ( !current_user_can('edit_plugins') ) wp_die('

    '.__('You do not have sufficient permissions to edit plugins for this blog.').'

    '); if ( $_GET['liveupdate'] ) { check_admin_referer('edit-plugin-test_' . $file); $current = get_option('active_plugins'); $plugin = $file; if ( validate_file($plugin) ) wp_die(__('Invalid plugin.')); if ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) ) wp_die(__('Plugin file does not exist.')); if (!in_array($plugin, $current)) { wp_redirect("plugin-editor.php?file=$file&phperror=1"); // we'll override this later if the plugin can be included without fatal error @include(ABSPATH . PLUGINDIR . '/' . $plugin); $current[] = $plugin; sort($current); update_option('active_plugins', $current); } wp_redirect("plugin-editor.php?file=$file&a=te"); } require_once('admin-header.php'); update_recently_edited(PLUGINDIR . "/$file"); if (!is_file($real_file)) $error = 1; if (!$error) { $f = fopen($real_file, 'r'); $content = fread($f, filesize($real_file)); $content = htmlspecialchars($content); } ?>

    fatal error.') ?>

    ' . sprintf(__('Editing %s (active)'), $file) . ''; } else { echo '

    ' . sprintf(__('Browsing %s (active)'), $file) . '

    '; } } else { if (is_writeable($real_file)) { echo '

    ' . sprintf(__('Editing %s (inactive)'), $file) . '

    '; } else { echo '

    ' . sprintf(__('Browsing %s (inactive)'), $file) . '

    '; } } ?>

    Warning: Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?>

    "; else echo ""; ?>

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; } ?>
     
    6wordpress/wp-admin/.svn/text-base/plugins.php.svn-base

    fatal error.') ?>

    activated.') ?>

    deactivated.') ?>

    deactivated.'); ?>

    '; _e("Couldn’t open plugins directory or there are no plugins available."); // TODO: make more helpful echo '

    '; } else { ?> $plugin_data) { $style = ('class="alternate"' == $style|| 'class="alternate active"' == $style) ? '' : 'alternate'; if (!empty($current_plugins) && in_array($plugin_file, $current_plugins)) { $toggle = "".__('Deactivate').""; $plugin_data['Title'] = "{$plugin_data['Title']}"; $style .= $style == 'alternate' ? ' active' : 'active'; } else { $toggle = "".__('Activate').""; } $plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()); // Sanitize all displayed data $plugin_data['Title'] = wp_kses($plugin_data['Title'], $plugins_allowedtags); $plugin_data['Version'] = wp_kses($plugin_data['Version'], $plugins_allowedtags); $plugin_data['Description'] = wp_kses($plugin_data['Description'], $plugins_allowedtags); $plugin_data['Author'] = wp_kses($plugin_data['Author'], $plugins_allowedtags); if ( $style != '' ) $style = 'class="' . $style . '"'; if ( is_writable(ABSPATH . PLUGINDIR . '/' . $plugin_file) ) $edit = "".__('Edit').""; else $edit = ''; echo " "; if ( current_user_can('edit_plugins') ) echo " "; echo" "; } ?>
    >
    {$plugin_data['Title']} {$plugin_data['Version']}

    {$plugin_data['Description']} ".sprintf(__('By %s'), $plugin_data['Author']).".

    $toggle$edit
     

    %s directory and it will be automatically deactivated.'), PLUGINDIR); ?>

    WordPress plugin directory.'); ?>

    %s directory. Once a plugin is uploaded, you may activate it here.'), PLUGINDIR); ?>

    7wordpress/wp-admin/.svn/text-base/post-new.php.svn-base

    You can also e-mail the admin to ask for a promotion.
    When you’re promoted, just reload this page and you’ll be able to blog. :)'), get_option('admin_email')); ?>

    15 ) $num_drafts = 15; for ( $i = 0; $i < $num_drafts; $i++ ) { $draft = $drafts[$i]; if ( 0 != $i ) echo ', '; if ( empty($draft->post_title) ) $draft->post_title = sprintf(__('Post # %s'), $draft->ID); echo "$draft->post_title"; } if ( 15 < count($drafts) ) { ?> , » .




    3wordpress/wp-admin/.svn/text-base/post.php.svn-baseOpost_type ) { wp_redirect("page.php?action=edit&post=$post_ID"); exit(); } if($post->post_status == 'draft') { wp_enqueue_script('prototype'); wp_enqueue_script('autosave'); } require_once('admin-header.php'); if ( !current_user_can('edit_post', $post_ID) ) die ( __('You are not allowed to edit this post.') ); $post = get_post_to_edit($post_ID); include('edit-form-advanced.php'); break; case 'editattachment': $post_id = (int) $_POST['post_ID']; check_admin_referer('update-attachment_' . $post_id); // Don't let these be changed unset($_POST['guid']); $_POST['post_type'] = 'attachment'; // Update the thumbnail filename $newmeta = wp_get_attachment_metadata( $post_id, true ); $newmeta['thumb'] = $_POST['thumb']; wp_update_attachment_metadata( $post_id, $newmeta ); case 'editpost': $post_ID = (int) $_POST['post_ID']; check_admin_referer('update-post_' . $post_ID); $post_ID = edit_post(); if ( 'post' == $_POST['originalaction'] ) { if (!empty($_POST['mode'])) { switch($_POST['mode']) { case 'bookmarklet': $location = $_POST['referredby']; break; case 'sidebar': $location = 'sidebar.php?a=b'; break; default: $location = 'post-new.php'; break; } } else { $location = "post-new.php?posted=$post_ID"; } if ( isset($_POST['save']) ) $location = "post.php?action=edit&post=$post_ID"; } else { $referredby = ''; if ( !empty($_POST['referredby']) ) $referredby = preg_replace('|https?://[^/]+|i', '', $_POST['referredby']); $referer = preg_replace('|https?://[^/]+|i', '', wp_get_referer()); if ($_POST['save']) { $location = "post.php?action=edit&post=$post_ID"; } elseif ($_POST['updatemeta']) { $location = wp_get_referer() . '&message=2#postcustom'; } elseif ($_POST['deletemeta']) { $location = wp_get_referer() . '&message=3#postcustom'; } elseif (!empty($referredby) && $referredby != $referer) { $location = $_POST['referredby']; if ( $_POST['referredby'] == 'redo' ) $location = get_permalink( $post_ID ); } elseif ($action == 'editattachment') { $location = 'attachments.php'; } else { $location = 'post-new.php'; } } wp_redirect($location); // Send user on their way while we keep working exit(); break; case 'delete': $post_id = (isset($_GET['post'])) ? intval($_GET['post']) : intval($_POST['post_ID']); check_admin_referer('delete-post_' . $post_id); $post = & get_post($post_id); if ( !current_user_can('delete_post', $post_id) ) wp_die( __('You are not allowed to delete this post.') ); if ( $post->post_type == 'attachment' ) { if ( ! wp_delete_attachment($post_id) ) wp_die( __('Error in deleting...') ); } else { if ( !wp_delete_post($post_id) ) wp_die( __('Error in deleting...') ); } $sendback = wp_get_referer(); if (strpos($sendback, 'post.php') != false) $sendback = get_option('siteurl') .'/wp-admin/post-new.php'; elseif (strpos($sendback, 'attachments.php') != false) $sendback = get_option('siteurl') .'/wp-admin/attachments.php'; $sendback = preg_replace('|[^a-z0-9-~+_.?#=&;,/:]|i', '', $sendback); wp_redirect($sendback); exit(); break; default: wp_redirect('edit.php'); exit(); break; } // end switch include('admin-footer.php'); ?> 6wordpress/wp-admin/.svn/text-base/profile.php.svn-base



    caps) > count($profileuser->roles)): ?>
    caps as $cap => $value) { if(!$wp_roles->is_role($cap)) { if($output != '') $output .= ', '; $output .= $value ? $cap : "Denied: {$cap}"; } } echo $output; ?>

    =wordpress/wp-admin/.svn/text-base/profile-update.php.svn-base get_error_messages() as $message ) echo "$message
    "; exit; } do_action('personal_options_update'); if ( 'profile' == $_POST['from'] ) $to = 'profile.php?updated=true'; else $to = 'profile.php?updated=true'; wp_redirect( $to ); exit; ?> 2wordpress/wp-admin/.svn/text-base/rtl.css.svn-base#viewarc, #viewcat, #namediv, #emaildiv, #uridiv, #planetnews li, #login ul li, #your-profile fieldset, #footer .logo, .alignleft .available-theme { float: right; } #templateside, .alignright { float: left; } #login #send, .readmore, .widefat th { text-align: right; } #postcustomsubmit, form#upload th, .submit, .editform th { text-align: left; } #devnews h4, #wphead h1, #your-profile legend, fieldset.options legend, #planetnews li .post { font-family: Tahoma, Georgia, "Times New Roman", Times, serif; } #wphead { padding: .8em 2em .8em 19em; } #wphead h1 { font-size: 2.4em; } #postdiv, #titlediv, #guiddiv, #tagdiv { margin: 0 0 0 8px; } #ed_toolbar input { margin: 3px 0 2px 2px; } #edButtons input, #edButtons input:active { margin: 0px 0 -1px 2px; } body, td { font: 13px Tahoma, "Lucida Grande", "Lucida Sans Unicode", Verdana; } h1, h2, h3, h4, h5 { font-family: "Times New Roman", Times, serif; } h3.dbx-handle { font-family: tahoma, Verdana, Arial, Helvetica, sans-serif; } textarea, input, select { font: 13px Tahoma, Verdana, Arial, Helvetica, sans-serif; } .quicktags, .search { font: 12px Tahoma, Georgia, "Times New Roman", Times, serif; } .updated, .confirm { padding: 0 3em 0 1em; } .submit input, .submit input:focus, .button, .button:focus { border-left-color: #999; border-right-color: #ccc; } .submit input:active, .button:active { border-left-color: #ccc; border-right-color: #999; } #adminmenu { padding: .2em 2em .3em .2em; height: 28px; } #adminmenu a { margin: 0 0 0 10px; display: block; float: right; font: 700 16px/130% "Times New Roman", Times, serif; } #adminmenu a.current { border-right: 0; border-left: 2px solid #4f96c8; } #submenu, #minisub { padding: 1px 3em 0 2em; } #submenu { height: 28px; } #submenu a { margin: 0 0 0 10px; display: block; float: right; line-height: 155%; } #submenu .current { border-right: 0; border-left: 2px solid #045290; } #currenttheme img { float: right; margin-right: auto; margin-left: 1em; } #postdiv #quicktags { padding-right: 0; padding-left: 6px; } .readmore { margin-right: auto; margin-left: 5em; } #postexcerpt div, #attachmentlinks div { margin-right: auto; margin-left: 8px; } * html #postexcerpt .dbx-toggle-open { padding-right: 0; padding-left: 8px; } #searchform { float: right; margin-right: auto; margin-left: 1em; } #poststuff { margin-right: auto; margin-left: 16em; } #template div { margin-right: auto; margin-left: 190px; } * html #template div { margin-right: auto; margin-left: 0px; } #user_info { right: auto; left: 1em; } #zeitgeist { float: left; margin-left: auto; margin-right: 1em; } #zeitgeist ul { margin: 0 .6em .3em 0; padding: 0 .6em 0 0; } .wrap ul { margin-left: 500px; } #categorydiv ul { margin-left: auto; margin-right: 10px; } #moremeta { margin-right: 0; margin-left: 15px; right: auto; left: 6%; } #moremeta .dbx-content { background: url(images/box-butt.gif) no-repeat bottom left; padding-right: 10px; padding-left: 0; text-align: right; } #moremeta .dbx-handle { background: #2685af url(images/box-head.gif) no-repeat left; margin-top: -2px; } #moremeta .dbx-box { background: url(images/box-bg.gif) repeat-y left; padding-bottom: 0; } a.dbx-toggle, a.dbx-toggle:visited { right: auto; left: 2px; } #categorychecklist { margin-right: auto; margin-left: 6px; } #ajax-response.alignleft { margin-left: auto; margin-right: 2em; } #postdivrich #edButtons { padding-left: 0; padding-right: 3px; } .page-numbers { margin-right: auto; margin-left: 3px; } a.view-link { right:auto; left:5%; margin-right:0; margin-left:220px; } #advancedstuff { direction: ltr; } #advancedstuff .dbx-handle { text-align: right; } #advancedstuff .dbx-content * { direction: rtl; };wordpress/wp-admin/.svn/text-base/setup-config.php.svn-basel WordPress › Setup Configuration File

    WordPress

    The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try installing now.

    "); switch($step) { case 0: ?>

    Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.

    1. Database name
    2. Database username
    3. Database password
    4. Database host
    5. Table prefix (if you want to run more than one WordPress in a single database)

    If for any reason this automatic file creation doesn't work, don't worry. All this does is fill in the database information to a configuration file. You may also simply open wp-config-sample.php in a text editor, fill in your information, and save it as wp-config.php.

    In all likelihood, these items were supplied to you by your ISP. If you do not have this information, then you will need to contact them before you can continue. If you’re all ready, let’s go!

    Below you should enter your database connection details. If you're not sure about these, contact your host.

    Database Name The name of the database you want to run WP in.
    User Name Your MySQL username
    Password ...and MySQL password.
    Database Host 99% chance you won't need to change this value.
    Table Prefix If you want to run multiple WordPress installations in a single database, change this.

    $line) { switch (substr($line,0,16)) { case "define('DB_NAME'": fwrite($handle, str_replace("putyourdbnamehere", $dbname, $line)); break; case "define('DB_USER'": fwrite($handle, str_replace("'usernamehere'", "'$uname'", $line)); break; case "define('DB_PASSW": fwrite($handle, str_replace("'yourpasswordhere'", "'$passwrd'", $line)); break; case "define('DB_HOST'": fwrite($handle, str_replace("localhost", $dbhost, $line)); break; case '$table_prefix =': fwrite($handle, str_replace('wp_', $prefix, $line)); break; default: fwrite($handle, $line); } } fclose($handle); chmod('../wp-config.php', 0666); ?>

    All right sparky! You've made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to run the install!

    6wordpress/wp-admin/.svn/text-base/sidebar.php.svn-base WordPress › Posted

    Posted !

    Click here to post again.

    WordPress › Sidebar

    WordPress

    Title:

    Categories:

    Post:

    8wordpress/wp-admin/.svn/text-base/templates.php.svn-base'.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); $newcontent = stripslashes($_POST['newcontent']); if (is_writeable($real_file)) { $f = @ fopen($real_file, 'w+'); if ( $f ) { fwrite($f, $newcontent); fclose($f); wp_redirect("templates.php?file=$file&a=te"); } else { wp_redirect("templates.php?file=$file&a=err"); } } else { wp_redirect("templates.php?file=$file&a=err"); } exit(); break; default: require_once('./admin-header.php'); if ( ! current_user_can('edit_files') ) wp_die('

    '.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); if (strpos($file, 'wp-config.php') != false) wp_die('

    '.__('The config file cannot be edited or viewed through the web interface. Sorry!').'

    '); update_recently_edited($file); if (!is_file($real_file)) $error = true; if (!$error) { $f = @ fopen($real_file, 'r'); if ( $f ) { if ( filesize($real_file ) > 0 ) { $content = fread($f, filesize($real_file)); $content = htmlspecialchars($content); } else { $content = ''; } } else { $error = true; } } ?>

    ' . sprintf(__('Editing %s'), wp_specialchars($file) ) . ''; } else { echo '

    ' . sprintf(__('Browsing %s'), wp_specialchars($file) ) . '

    '; } ?>

    '; foreach ($recents as $recent) : echo "
  • " . wp_specialchars(get_file_description(basename($recent))) . "
  • "; endforeach; echo ''; endif; ?>

    "; ?>

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; } ?>
     

    writable by the server, e.g. CHMOD 666.') ?>

    ;wordpress/wp-admin/.svn/text-base/theme-editor.php.svn-base'.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); $newcontent = stripslashes($_POST['newcontent']); $theme = urlencode($theme); if (is_writeable($real_file)) { $f = fopen($real_file, 'w+'); fwrite($f, $newcontent); fclose($f); $location = "theme-editor.php?file=$file&theme=$theme&a=te"; } else { $location = "theme-editor.php?file=$file&theme=$theme"; } $location = wp_kses_no_null($location); $strip = array('%0d', '%0a'); $location = str_replace($strip, '', $location); header("Location: $location"); exit(); break; default: if ( !current_user_can('edit_themes') ) wp_die('

    '.__('You do not have sufficient permissions to edit themes for this blog.').'

    '); require_once('admin-header.php'); update_recently_edited($file); if (!is_file($real_file)) $error = 1; if (!$error && filesize($real_file) > 0) { $f = fopen($real_file, 'r'); $content = fread($f, filesize($real_file)); $content = htmlspecialchars($content); } ?>

    ' . sprintf(__('Editing %s'), $file_show) . ''; } else { echo '

    ' . sprintf(__('Browsing %s'), $file_show) . '

    '; } ?>

    '%s' theme files"), $theme) ?>

    "; ?>

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; } ?>
     
    5wordpress/wp-admin/.svn/text-base/themes.php.svn-baseX

    View site »'), get_bloginfo('url') . '/'); ?>

    screenshot ) : ?> <?php _e('Current theme preview'); ?>

    title, $ct->version, $ct->author) ; ?>

    description; ?>

    parent_theme) { ?>

    %2$s. The stylesheet files are located in %3$s. %4$s uses templates from %5$s. Changes made to the templates will affect both themes.'), $ct->title, $ct->template_dir, $ct->stylesheet_dir, $ct->title, $ct->parent_theme); ?>

    %2$s.'), $ct->title, $ct->template_dir, $ct->stylesheet_dir); ?>

    name ) continue; $template = $themes[$theme_name]['Template']; $stylesheet = $themes[$theme_name]['Stylesheet']; $title = $themes[$theme_name]['Title']; $version = $themes[$theme_name]['Version']; $description = $themes[$theme_name]['Description']; $author = $themes[$theme_name]['Author']; $screenshot = $themes[$theme_name]['Screenshot']; $stylesheet_dir = $themes[$theme_name]['Stylesheet Dir']; $activate_link = wp_nonce_url("themes.php?action=activate&template=$template&stylesheet=$stylesheet", 'switch-theme_' . $template); ?>

    "; } ?>
    $title $description

    WordPress theme directory. To install a theme you generally just need to upload the theme folder into your wp-content/themes directory. Once a theme is uploaded, you should see it on this page.'); ?>

    ;wordpress/wp-admin/.svn/text-base/update-links.php.svn-baseget_col("SELECT link_url FROM $wpdb->links"); if ( !$link_uris ) wp_die(__('No links')); $link_uris = urlencode( join( $link_uris, "\n" ) ); $query_string = "uris=$link_uris"; $http_request = "POST /updated-batch/ HTTP/1.0\r\n"; $http_request .= "Host: api.pingomatic.com\r\n"; $http_request .= 'Content-Type: application/x-www-form-urlencoded; charset='.get_option('blog_charset')."\r\n"; $http_request .= 'Content-Length: ' . strlen($query_string) . "\r\n"; $http_request .= 'User-Agent: WordPress/' . $wp_version . "\r\n"; $http_request .= "\r\n"; $http_request .= $query_string; $response = ''; if ( false != ( $fs = @fsockopen('api.pingomatic.com', 80, $errno, $errstr, 5) ) ) { fwrite($fs, $http_request); while ( !feof($fs) ) $response .= fgets($fs, 1160); // One TCP-IP packet fclose($fs); $response = explode("\r\n\r\n", $response, 2); $body = trim( $response[1] ); $body = str_replace(array("\r\n", "\r"), "\n", $body); $returns = explode("\n", $body); foreach ($returns as $return) : $time = $wpdb->escape( substr($return, 0, 19) ); $uri = $wpdb->escape( preg_replace('/(.*?) | (.*?)/', '$2', $return) ); $wpdb->query("UPDATE $wpdb->links SET link_updated = '$time' WHERE link_url = '$uri'"); endforeach; } ?> @wordpress/wp-admin/.svn/text-base/upgrade-functions.php.svn-basecheck_version(); wp_cache_flush(); make_db_current_silent(); populate_options(); populate_roles(); update_option('blogname', $blog_title); update_option('admin_email', $user_email); update_option('blog_public', $public); $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; if ( defined('WP_SITEURL') && '' != WP_SITEURL ) $guessurl = WP_SITEURL; else $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); update_option('siteurl', $guessurl); // If not a public blog, don't ping. if ( ! $public ) update_option('default_pingback_flag', 0); // Create default user. If the user already exists, the user tables are // being shared among blogs. Just set the role in that case. $user_id = username_exists($user_name); if ( !$user_id ) { $random_password = substr(md5(uniqid(microtime())), 0, 6); $user_id = wp_create_user($user_name, $random_password, $user_email); } else { $random_password = __('User already exists. Password inherited.'); } $user = new WP_User($user_id); $user->set_role('administrator'); wp_install_defaults($user_id); $wp_rewrite->flush_rules(); wp_new_blog_notification($blog_title, $guessurl, $user_id, $random_password); wp_cache_flush(); return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $random_password); } endif; if ( !function_exists('wp_install_defaults') ) : function wp_install_defaults($user_id) { global $wpdb; // Default category $wpdb->insert("INSERT INTO $wpdb->categories (cat_name, category_nicename, category_count, category_description) VALUES ('".$wpdb->escape(__('Uncategorized'))."', '".sanitize_title(__('Uncategorized'))."', 1, '')",$wpdb->categories, "cat_ID"); $uncat_ID = $wpdb->insert_id; // Default link category $wpdb->insert("INSERT INTO $wpdb->categories (cat_name, category_nicename, link_count, category_description) VALUES ('".$wpdb->escape(__('Blogroll'))."', '".sanitize_title(__('Blogroll'))."', 7, '')",$wpdb->categories, "cat_ID"); $blogroll_ID = $wpdb->insert_id; // Now drop in some default links $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://inphotos.org/', 'Donncha', 0, 'http://inphotos.org/feed/', '')", $wpdb->links, "link_id" ); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://zengun.org/weblog/', 'Michel', 0, 'http://zengun.org/weblog/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id,$blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://boren.nu/', 'Ryan', 0, 'http://boren.nu/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://photomatt.net/', 'Matt', 0, 'http://xml.photomatt.net/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id,$blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://zed1.com/journalized/', 'Mike', 0, 'http://zed1.com/journalized/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id,$blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://www.alexking.org/', 'Alex', 0, 'http://www.alexking.org/blog/wp-rss2.php', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://dougal.gunters.org/', 'Dougal', 0, 'http://dougal.gunters.org/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); // First post $now = date('Y-m-d H:i:s'); $now_gmt = gmdate('Y-m-d H:i:s'); $wpdb->insert("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, comment_count, to_ping, pinged, post_content_filtered) VALUES ($user_id, '$now', '$now_gmt', '".$wpdb->escape(__('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'))."', '', '".$wpdb->escape(__('Hello world!'))."', '0', '".$wpdb->escape(__('hello-world'))."', '$now', '$now_gmt', '1', '', '', '')",$wpdb->posts,"ID"); $post_ident = $wpdb->insert_id; $wpdb->query( "INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES ($post_ident, $uncat_ID)" ); // Default comment $wpdb->query("INSERT INTO $wpdb->comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_date, comment_date_gmt, comment_content) VALUES ($post_ident, '".$wpdb->escape(__('Mr WordPress'))."', '', 'http://wordpress.org/', '$now', '$now_gmt', '".$wpdb->escape(__('Hi, this is a comment.
    To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.'))."')"); // First Page $wpdb->query("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, post_status, post_type, to_ping, pinged, post_content_filtered) VALUES ($user_id, '$now', '$now_gmt', '".$wpdb->escape(__('This is an example of a WordPress page, you could edit this to put information about yourself or your site so readers know where you are coming from. You can create as many pages like this one or sub-pages as you like and manage all of your content inside of WordPress.'))."', '', '".$wpdb->escape(__('About'))."', 0, '".$wpdb->escape(__('about'))."', '$now', '$now_gmt', 'publish', 'page', '', '', '')"); } endif; if ( !function_exists('wp_new_blog_notification') ) : function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { $user = new WP_User($user_id); $email = $user->user_email; $name = $user->user_login; $message_headers = 'From: "' . $blog_title . '" '; $message = sprintf(__("Your new WordPress blog has been successfully set up at: %1\$s You can log in to the administrator account with the following information: Username: %2\$s Password: %3\$s We hope you enjoy your new weblog. Thanks! --The WordPress Team http://wordpress.org/ "), $blog_url, $name, $password); @wp_mail($email, __('New WordPress Blog'), $message, $message_headers); } endif; if ( !function_exists('wp_upgrade') ) : function wp_upgrade() { global $wp_current_db_version, $wp_db_version; $wp_current_db_version = __get_option('db_version'); // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; wp_check_mysql_version(); wp_cache_flush(); make_db_current_silent(); upgrade_all(); wp_cache_flush(); } endif; // Functions to be called in install and upgrade scripts function upgrade_all() { global $wp_current_db_version, $wp_db_version, $wp_rewrite; $wp_current_db_version = __get_option('db_version'); // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; // If the version is not set in the DB, try to guess the version. if ( empty($wp_current_db_version) ) { $wp_current_db_version = 0; // If the template option exists, we have 1.5. $template = __get_option('template'); if ( !empty($template) ) $wp_current_db_version = 2541; } populate_options(); if ( $wp_current_db_version < 2541 ) { upgrade_100(); upgrade_101(); upgrade_110(); upgrade_130(); } maybe_disable_automattic_widgets(); if ( $wp_current_db_version < 3308 ) upgrade_160(); if ( $wp_current_db_version < 4772 ) upgrade_210(); if ( $wp_current_db_version < 4351 ) upgrade_old_slugs(); $wp_rewrite->flush_rules(); update_option('db_version', $wp_db_version); } function upgrade_100() { global $wpdb; // Get the title and ID of every post, post_name to check if it already has a value $posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''"); if ($posts) { foreach($posts as $post) { if ('' == $post->post_name) { $newtitle = sanitize_title($post->post_title); $wpdb->query("UPDATE $wpdb->posts SET post_name = '$newtitle' WHERE ID = " . $post->ID); } } } $categories = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories"); foreach ($categories as $category) { if ('' == $category->category_nicename) { $newtitle = sanitize_title($category->cat_name); $wpdb->query("UPDATE $wpdb->categories SET category_nicename = '$newtitle' WHERE cat_ID = " . $category->cat_ID); } } $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') WHERE option_name LIKE 'links_rating_image%' AND option_value LIKE 'wp-links/links-images/%'"); $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); if ($done_ids) : foreach ($done_ids as $done_id) : $done_posts[] = $done_id->post_id; endforeach; $catwhere = ' AND ID NOT IN (' . implode(',', $done_posts) . ')'; else: $catwhere = ''; endif; $allposts = $wpdb->get_results("SELECT ID, post_category FROM $wpdb->posts WHERE post_category <> 0 $catwhere"); if ($allposts) : foreach ($allposts as $post) { // Check to see if it's already been imported $cat = $wpdb->get_row("SELECT * FROM $wpdb->post2cat WHERE post_id = " . $post->ID . " AND category_id = " . $post->post_category); if (!$cat && 0 != $post->post_category) { // If there's no result $wpdb->query("INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES (" . $post->ID. ", " . $post->post_category . ")"); } } endif; } function upgrade_101() { global $wpdb; // Clean up indices, add a few add_clean_index($wpdb->posts, 'post_name'); add_clean_index($wpdb->posts, 'post_status'); add_clean_index($wpdb->categories, 'category_nicename'); add_clean_index($wpdb->comments, 'comment_approved'); add_clean_index($wpdb->comments, 'comment_post_ID'); add_clean_index($wpdb->links , 'link_category'); add_clean_index($wpdb->links , 'link_visible'); } function upgrade_110() { global $wpdb; // Set user_nicename. $users = $wpdb->get_results("SELECT ID, user_nickname, user_nicename FROM $wpdb->users"); foreach ($users as $user) { if ('' == $user->user_nicename) { $newname = sanitize_title($user->user_nickname); $wpdb->query("UPDATE $wpdb->users SET user_nicename = '$newname' WHERE ID = " . $user->ID); } } $users = $wpdb->get_results("SELECT ID, user_pass from $wpdb->users"); foreach ($users as $row) { if (!preg_match('/^[A-Fa-f0-9]{32}$/', $row->user_pass)) { $wpdb->query(" UPDATE $wpdb->users SET user_pass = MD5(" . $row->user_pass . ") WHERE ID = " . $row->ID ); } } // Get the GMT offset, we'll use that later on $all_options = get_alloptions_110(); $time_difference = $all_options->time_difference; $server_time = time()+date('Z'); $weblogger_time = $server_time + $time_difference*3600; $gmt_time = time(); $diff_gmt_server = ($gmt_time - $server_time) / 3600; $diff_weblogger_server = ($weblogger_time - $server_time) / 3600; $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; $gmt_offset = -$diff_gmt_weblogger; // Add a gmt_offset option, with value $gmt_offset add_option('gmt_offset', $gmt_offset); // Check if we already set the GMT fields (if we did, then // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' // I just slapped myself silly for not thinking about it earlier $got_gmt_fields = ($wpdb->get_var("SELECT MAX(post_date_gmt) FROM $wpdb->posts") == '1900-01-01 00:00:00') ? false : true; if (!$got_gmt_fields) { // Add or substract time to all dates, to get GMT dates $add_hours = intval($diff_gmt_weblogger); $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); $full_minutes = $add_hours * 60 + $add_minutes; $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = dateadd('minute', " . $full_minutes . " , stringdate(post_date))"); $wpdb->query("UPDATE $wpdb->posts SET post_modified = post_date"); $wpdb->query("UPDATE $wpdb->posts SET post_modified_gmt = dateadd('minute', " . $full_minutes . " , stringdate( post_modified) ) WHERE post_modified <> '1900-01-01 00:00:00'"); $wpdb->query("UPDATE $wpdb->comments SET comment_date_gmt = dateadd('minute', " . $full_minutes . " , stringdate( comment_date) )"); $wpdb->query("UPDATE $wpdb->users SET user_registered = dateadd('minute', " . $full_minutes . " , stringdate( user_registered) )"); } } function upgrade_130() { global $wpdb; // Remove extraneous backslashes. $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts"); if ($posts) { foreach($posts as $post) { $post_content = addslashes(deslash($post->post_content)); $post_title = addslashes(deslash($post->post_title)); $post_excerpt = addslashes(deslash($post->post_excerpt)); if ( empty($post->guid) ) $guid = get_permalink($post->ID); else $guid = $post->guid; $wpdb->query("UPDATE $wpdb->posts SET post_title = '$post_title', post_content = '$post_content', post_excerpt = '$post_excerpt', guid = '$guid' WHERE ID = " . $post->ID); } } // Remove extraneous backslashes. $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments"); if ($comments) { foreach($comments as $comment) { $comment_content = addslashes(deslash($comment->comment_content)); $comment_author = addslashes(deslash($comment->comment_author)); $wpdb->query("UPDATE $wpdb->comments SET comment_content = '$comment_content', comment_author = '$comment_author' WHERE comment_ID = " . $comment->comment_ID); } } // Remove extraneous backslashes. $links = $wpdb->get_results("SELECT link_id, link_name, link_description FROM $wpdb->links"); if ($links) { foreach($links as $link) { $link_name = addslashes(deslash($link->link_name)); $link_description = addslashes(deslash($link->link_description)); $wpdb->query("UPDATE $wpdb->links SET link_name = '$link_name', link_description = '$link_description' WHERE link_id = " . $link->link_id); } } // The "paged" option for what_to_show is no more. if ($wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'what_to_show'") == 'paged') { $wpdb->query("UPDATE $wpdb->options SET option_value = 'posts' WHERE option_name = 'what_to_show'"); } $active_plugins = __get_option('active_plugins'); // If plugins are not stored in an array, they're stored in the old // newline separated format. Convert to new format. if ( !is_array( $active_plugins ) ) { $active_plugins = explode("\n", trim($active_plugins)); update_option('active_plugins', $active_plugins); } // Obsolete tables $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optionvalues'); $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiontypes'); $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroups'); $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroup_options'); // Update comments table to use comment_type $wpdb->query("UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); $wpdb->query("UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); // Some versions have multiple duplicate option_name rows with the same values $options = $wpdb->get_results("SELECT option_name, COUNT(option_name) AS dupes FROM $wpdb->options GROUP BY option_name"); foreach ( $options as $option ) { if ( 1 != $option->dupes ) { // Could this be done in the query? $limit = $option->dupes - 1; $dupe_ids = $wpdb->get_col("SELECT option_id FROM $wpdb->options WHERE option_name = '$option->option_name'"); $dupe_ids = join($dupe_ids, ','); $wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)"); } } make_site_theme(); } function upgrade_160() { global $wpdb, $wp_current_db_version; populate_roles_160(); $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); foreach ( $users as $user ) : if ( !empty( $user->user_firstname ) ) update_usermeta( $user->ID, 'first_name', $wpdb->escape($user->user_firstname) ); if ( !empty( $user->user_lastname ) ) update_usermeta( $user->ID, 'last_name', $wpdb->escape($user->user_lastname) ); if ( !empty( $user->user_nickname ) ) update_usermeta( $user->ID, 'nickname', $wpdb->escape($user->user_nickname) ); if ( !empty( $user->user_level ) ) update_usermeta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); if ( !empty( $user->user_icq ) ) update_usermeta( $user->ID, 'icq', $wpdb->escape($user->user_icq) ); if ( !empty( $user->user_aim ) ) update_usermeta( $user->ID, 'aim', $wpdb->escape($user->user_aim) ); if ( !empty( $user->user_msn ) ) update_usermeta( $user->ID, 'msn', $wpdb->escape($user->user_msn) ); if ( !empty( $user->user_yim ) ) update_usermeta( $user->ID, 'yim', $wpdb->escape($user->user_icq) ); if ( !empty( $user->user_description ) ) update_usermeta( $user->ID, 'description', $wpdb->escape($user->user_description) ); if ( isset( $user->user_idmode ) ): $idmode = $user->user_idmode; if ($idmode == 'nickname') $id = $user->user_nickname; if ($idmode == 'login') $id = $user->user_login; if ($idmode == 'firstname') $id = $user->user_firstname; if ($idmode == 'lastname') $id = $user->user_lastname; if ($idmode == 'namefl') $id = $user->user_firstname.' '.$user->user_lastname; if ($idmode == 'namelf') $id = $user->user_lastname.' '.$user->user_firstname; if (!$idmode) $id = $user->user_nickname; $id = $wpdb->escape( $id ); $wpdb->query("UPDATE $wpdb->users SET display_name = '$id' WHERE ID = " . $user->ID); endif; // FIXME: RESET_CAPS is temporary code to reset roles and caps if flag is set. $caps = get_usermeta( $user->ID, $wpdb->prefix . 'capabilities'); if ( empty($caps) || defined('RESET_CAPS') ) { $level = get_usermeta($user->ID, $wpdb->prefix . 'user_level'); $role = translate_level_to_role($level); update_usermeta( $user->ID, $wpdb->prefix . 'capabilities', array($role => true) ); } endforeach; $old_user_fields = array( 'user_firstname', 'user_lastname', 'user_icq', 'user_aim', 'user_msn', 'user_yim', 'user_idmode', 'user_ip', 'user_domain', 'user_browser', 'user_description', 'user_nickname', 'user_level' ); $wpdb->hide_errors(); foreach ( $old_user_fields as $old ) $wpdb->query("ALTER TABLE $wpdb->users DROP $old"); $wpdb->show_errors(); if ( 0 == $wpdb->get_var("SELECT SUM(category_count) FROM $wpdb->categories") ) { // Create counts $categories = $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories"); foreach ( $categories as $cat_id ) { $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID = " . $wpdb->post2cat.post_id . " AND post_status='publish' AND category_id = " . $cat_id); $wpdb->query("UPDATE $wpdb->categories SET category_count = '$count' WHERE cat_ID = " . $cat_id); } } // populate comment_count field of posts table $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); if( is_array( $comments ) ) { foreach ($comments as $comment) { $wpdb->query( "UPDATE $wpdb->posts SET comment_count = " . $comment->c ." WHERE ID = " . $comment->comment_post_ID ); } } // Some alpha versions used a post status of object instead of attachment and put // the mime type in post_type instead of post_mime_type. if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { $objects = $wpdb->get_results("SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'"); foreach ($objects as $object) { $wpdb->query("UPDATE $wpdb->posts SET post_status = 'attachment', post_mime_type = '$object->post_type', post_type = '' WHERE ID = $object->ID"); $meta = get_post_meta($object->ID, 'imagedata', true); if ( ! empty($meta['file']) ) update_attached_file( $object->ID, $meta['file'] ); } } } function upgrade_210() { global $wpdb, $wp_current_db_version; if ( $wp_current_db_version < 3506 ) { // Update status and type. $posts = $wpdb->get_results("SELECT ID, post_status FROM $wpdb->posts"); if ( ! empty($posts) ) foreach ($posts as $post) { $status = $post->post_status; $type = 'post'; if ( 'static' == $status ) { $status = 'publish'; $type = 'page'; } else if ( 'attachment' == $status ) { $status = 'inherit'; $type = 'attachment'; } $wpdb->query("UPDATE $wpdb->posts SET post_status = '$status', post_type = '$type' WHERE ID = " . $post->ID); } } if ( $wp_current_db_version < 3845 ) { populate_roles_210(); } if ( $wp_current_db_version < 3531 ) { // Give future posts a post_status of future. $now = gmdate('Y-m-d H:i:59'); $wpdb->query ("UPDATE $wpdb->posts SET post_status = 'future' WHERE post_status = 'publish' AND post_date_gmt > '$now'"); $posts = $wpdb->get_results("SELECT ID, post_date FROM $wpdb->posts WHERE post_status ='future'"); if ( !empty($posts) ) foreach ( $posts as $post ) wp_schedule_single_event(mysql2date('U', $post->post_date), 'publish_future_post', array($post->ID)); } if ( $wp_current_db_version < 3570 ) { // Create categories for link categories if a category with the same // name doesn't exist. Create a map of link cat IDs to cat IDs. $link_cat_id_map = array(); $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM " . $wpdb->prefix . 'linkcategories'); foreach ( $link_cats as $link_cat) { if ( $cat_id = category_exists($link_cat->cat_name) ) { $link_cat_id_map[$link_cat->cat_id] = $cat_id; $default_link_cat = $cat_id; } else { $link_cat_id_map[$link_cat->cat_id] = wp_create_category($link_cat->cat_name); $default_link_cat = $link_cat_id_map[$link_cat->cat_id]; } } // Associate links to cats. $links = $wpdb->get_results("SELECT link_id, link_category FROM $wpdb->links"); if ( !empty($links) ) foreach ( $links as $link ) { if ( 0 == $link->link_category ) continue; if ( ! isset($link_cat_id_map[$link->link_category]) ) continue; $link_cat = $link_cat_id_map[$link->link_category]; $cat = $wpdb->get_row("SELECT * FROM $wpdb->link2cat WHERE link_id = " . $link->link_id . " AND category_id = " . $link_cat); if ( !$cat ) { $wpdb->query("INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES (" . $link->link_id . "," . $link_cat . ")"); } } // Set default to the last category we grabbed during the upgrade loop. update_option('default_link_category', $default_link_cat); // Count links per category. if ( 0 == $wpdb->get_var("SELECT SUM(link_count) FROM $wpdb->categories") ) { $categories = $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories"); foreach ( $categories as $cat_id ) { $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->link2cat, $wpdb->links WHERE $wpdb->links.link_id = " . $wpdb->link2cat.link_id . " AND category_id = " . $cat_id); $wpdb->query("UPDATE $wpdb->categories SET link_count = " .$count. " WHERE cat_ID = ". $cat_id); } } } if ( $wp_current_db_version < 4772 ) { // Obsolete linkcategories table $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories'); } } function upgrade_old_slugs() { // upgrade people who were using the Redirect Old Slugs plugin global $wpdb; $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); } // The functions we use to actually do stuff // General function maybe_create_table($table_name, $create_ddl) { global $wpdb; foreach ($wpdb->get_tables() as $table ) { if ($table == $table_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_tables() as $table ) { if ($table == $table_name) { return true; } } return false; } function drop_index($table, $index) { global $wpdb; $wpdb->hide_errors(); $wpdb->query("ALTER TABLE $table DROP INDEX $index"); // Now we need to take out all the extra ones we may have created for ($i = 0; $i < 25; $i++) { $wpdb->query("ALTER TABLE $table DROP INDEX {$index}_$i"); } $wpdb->show_errors(); return true; } function add_clean_index($table, $index) { global $wpdb; drop_index($table, $index); $wpdb->query("ALTER TABLE $table ADD INDEX ( $index )"); return true; } /** ** maybe_add_column() ** Add column to db table if it doesn't exist. ** Returns: true if already exists or on successful completion ** false on error */ function maybe_add_column($table_name, $column_name, $create_ddl) { global $wpdb, $debug; foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { if ($debug) echo("checking $column == $column_name
    "); if ($column == $column_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { if ($column == $column_name) { return true; } } return false; } // get_alloptions as it was for 1.2. function get_alloptions_110() { global $wpdb; if ($options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options")) { foreach ($options as $option) { // "When trying to design a foolproof system, // never underestimate the ingenuity of the fools :)" -- Dougal if ('siteurl' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ('home' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ('category_base' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); $all_options->{$option->option_name} = stripslashes($option->option_value); } } return $all_options; } // Version of get_option that is private to install/upgrade. function __get_option($setting) { global $wpdb; if ( $setting == 'home' && defined( 'WP_HOME' ) ) { return preg_replace( '|/+$|', '', constant( 'WP_HOME' ) ); } if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) { return preg_replace( '|/+$|', '', constant( 'WP_SITEURL' ) ); } $option = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = '$setting'"); if ( 'home' == $setting && '' == $option ) return __get_option('siteurl'); if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) $option = preg_replace('|/+$|', '', $option); @ $kellogs = unserialize($option); if ($kellogs != FALSE) return $kellogs; else return $option; } function deslash($content) { // Note: \\\ inside a regex denotes a single backslash. // Replace one or more backslashes followed by a single quote with // a single quote. $content = preg_replace("/\\\+'/", "'", $content); // Replace one or more backslashes followed by a double quote with // a double quote. $content = preg_replace('/\\\+"/', '"', $content); // Replace one or more backslashes with one backslash. $content = preg_replace("/\\\+/", "\\", $content); return $content; } function dbDelta($queries, $execute = true) { global $wpdb; // Seperate individual queries into an array if( !is_array($queries) ) { $queries = explode( ';', $queries ); if('' == $queries[count($queries) - 1]) array_pop($queries); } $cqueries = array(); // Creation Queries $iqueries = array(); // Insertion Queries $for_update = array(); // Create a tablename index for an array ($cqueries) of queries foreach($queries as $qry) { if(preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { $cqueries[strtolower($matches[1])] = $qry; $for_update[$matches[1]] = 'Created table '.$matches[1]; } else if(preg_match("|CREATE DATABASE ([^ ]*)|", $qry, $matches)) { array_unshift($cqueries, $qry); } else if(preg_match("|INSERT INTO ([^ ]*)|", $qry, $matches)) { $iqueries[] = $qry; } else if(preg_match("|UPDATE ([^ ]*)|", $qry, $matches)) { $iqueries[] = $qry; } else { // Unrecognized query type } } // Check to see which tables and fields exist if($tables = $wpdb->get_tables() ) { // For every table in the database foreach($tables as $table) { // If a table query exists for the database table... if( array_key_exists(strtolower($table), $cqueries) ) { // Clear the field and index arrays unset($cfields); unset($indices); // Get all of the field names in the query from between the parens preg_match("|\((.*)\)|ms", $cqueries[strtolower($table)], $match2); $qryline = trim($match2[1]); // Separate field lines into an array $flds = explode("\n", $qryline); //echo "
    \n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."

    "; // For every field line specified in the query foreach($flds as $fld) { // Extract the field name preg_match("|^([^ ]*)|", trim($fld), $fvals); $fieldname = $fvals[1]; // Verify the found field name $validfield = true; switch(strtolower($fieldname)) { case '': case 'primary': case 'index': case 'fulltext': case 'unique': case 'key': $validfield = false; $indices[] = trim(trim($fld), ", \n"); break; } $fld = trim($fld); // If it's a valid field, add it to the field array if($validfield) { $cfields[strtolower($fieldname)] = trim($fld, ", \n"); } } // Fetch the table column structure from the database $tablefields = $wpdb->get_results("DESCRIBE {$table};"); // For every field in the table foreach($tablefields as $tablefield) { // If the table field exists in the field array... if(array_key_exists(strtolower($tablefield->Field), $cfields)) { // Get the field type from the query preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches); $fieldtype = $matches[1]; // Is actual field type different from the field type in query? if($tablefield->Type != $fieldtype) { // Add a query to change the column type $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)]; $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}"; } // Get the default value from the array //echo "{$cfields[strtolower($tablefield->Field)]}
    "; if(preg_match("| DEFAULT '(.*)'|i", $cfields[strtolower($tablefield->Field)], $matches)) { $default_value = $matches[1]; if($tablefield->Default != $default_value) { // Add a query to change the column's default value $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'"; $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}"; } } // Remove the field from the array (so it's not added) unset($cfields[strtolower($tablefield->Field)]); } else { // This field exists in the table, but not in the creation queries? } } // For every remaining field specified for the table foreach($cfields as $fieldname => $fielddef) { // Push a query line into $cqueries that adds the field to that table $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef"; $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname; } // Index stuff goes here // Fetch the table index structure from the database $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};"); if($tableindices) { // Clear the index array unset($index_ary); // For every index in the table foreach($tableindices as $tableindex) { // Add the index to the index data array $keyname = $tableindex->Key_name; $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; } // For each actual index in the index array foreach($index_ary as $index_name => $index_data) { // Build a create string to compare to the query $index_string = ''; if($index_name == 'PRIMARY') { $index_string .= 'PRIMARY '; } else if($index_data['unique']) { $index_string .= 'UNIQUE '; } $index_string .= 'KEY '; if($index_name != 'PRIMARY') { $index_string .= $index_name; } $index_columns = ''; // For each column in the index foreach($index_data['columns'] as $column_data) { if($index_columns != '') $index_columns .= ','; // Add the field to the column list string $index_columns .= $column_data['fieldname']; if($column_data['subpart'] != '') { $index_columns .= '('.$column_data['subpart'].')'; } } // Add the column list to the index create string $index_string .= ' ('.$index_columns.')'; if(!(($aindex = array_search($index_string, $indices)) == false)) { unset($indices[$aindex]); //echo "
    {$table}:
    Found index:".$index_string."
    \n"; } //else echo "
    {$table}:
    Did not find index:".$index_string."
    ".print_r($indices, true)."
    \n"; } } // For every remaining index specified for the table foreach($indices as $index) { // Push a query line into $cqueries that adds the index to that table $cqueries[] = "ALTER TABLE {$table} ADD $index"; $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index; } // Remove the original table creation query from processing unset($cqueries[strtolower($table)]); unset($for_update[strtolower($table)]); } else { // This table exists in the database, but not in the creation queries? } } } $allqueries = array_merge($cqueries, $iqueries); if($execute) { foreach($allqueries as $query) { //echo "
    ".print_r($query, true)."
    \n"; $wpdb->query($query); } } return $for_update; } function make_db_current() { global $wp_queries; $alterations = dbDelta($wp_queries); echo "
      \n"; foreach($alterations as $alteration) echo "
    1. $alteration
    2. \n"; echo "
    \n"; } function make_db_current_silent() { global $wp_queries; $alterations = dbDelta($wp_queries); } function make_site_theme_from_oldschool($theme_name, $template) { $home_path = get_home_path(); $site_dir = ABSPATH . "wp-content/themes/$template"; if (! file_exists("$home_path/index.php")) return false; // Copy files from the old locations to the site theme. // TODO: This does not copy arbitarary include dependencies. Only the // standard WP files are copied. $files = array('index.php' => 'index.php', 'wp-layout.css' => 'style.css', 'wp-comments.php' => 'comments.php', 'wp-comments-popup.php' => 'comments-popup.php'); foreach ($files as $oldfile => $newfile) { if ($oldfile == 'index.php') $oldpath = $home_path; else $oldpath = ABSPATH; if ($oldfile == 'index.php') { // Check to make sure it's not a new index $index = implode('', file("$oldpath/$oldfile")); if (strpos($index, 'WP_USE_THEMES') != false) { if (! @copy(ABSPATH . 'wp-content/themes/default/index.php', "$site_dir/$newfile")) return false; continue; // Don't copy anything } } if (! @copy("$oldpath/$oldfile", "$site_dir/$newfile")) return false; chmod("$site_dir/$newfile", 0777); // Update the blog header include in each file. $lines = explode("\n", implode('', file("$site_dir/$newfile"))); if ($lines) { $f = fopen("$site_dir/$newfile", 'w'); foreach ($lines as $line) { if (preg_match('/require.*wp-blog-header/', $line)) $line = '//' . $line; // Update stylesheet references. $line = str_replace("/wp-layout.css", "", $line); // Update comments template inclusion. $line = str_replace("", "", $line); fwrite($f, "{$line}\n"); } fclose($f); } } // Add a theme header. $header = "/*\nTheme Name: $theme_name\nTheme URI: " . __get_option('siteurl') . "\nDescription: A theme automatically created by the upgrade.\nVersion: 1.0\nAuthor: Moi\n*/\n"; $stylelines = file_get_contents("$site_dir/style.css"); if ($stylelines) { $f = fopen("$site_dir/style.css", 'w'); fwrite($f, $header); fwrite($f, $stylelines); fclose($f); } return true; } function make_site_theme_from_default($theme_name, $template) { $site_dir = ABSPATH . "wp-content/themes/$template"; $default_dir = ABSPATH . 'wp-content/themes/default'; // Copy files from the default theme to the site theme. //$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css'); $theme_dir = @ dir("$default_dir"); if ($theme_dir) { while(($theme_file = $theme_dir->read()) != false) { if (is_dir("$default_dir/$theme_file")) continue; if (! @copy("$default_dir/$theme_file", "$site_dir/$theme_file")) return; chmod("$site_dir/$theme_file", 0777); } } // Rewrite the theme header. $stylelines = explode("\n", implode('', file("$site_dir/style.css"))); if ($stylelines) { $f = fopen("$site_dir/style.css", 'w'); foreach ($stylelines as $line) { if (strpos($line, 'Theme Name:') != false) $line = 'Theme Name: ' . $theme_name; elseif (strpos($line, 'Theme URI:') != false) $line = 'Theme URI: ' . __get_option('url'); elseif (strpos($line, 'Description:') != false) $line = 'Description: Your theme.'; elseif (strpos($line, 'Version:') != false) $line = 'Version: 1'; elseif (strpos($line, 'Author:') != false) $line = 'Author: You'; fwrite($f, $line . "\n"); } fclose($f); } // Copy the images. umask(0); if (! mkdir("$site_dir/images", 0777)) { return false; } $images_dir = @ dir("$default_dir/images"); if ($images_dir) { while(($image = $images_dir->read()) != false) { if (is_dir("$default_dir/images/$image")) continue; if (! @copy("$default_dir/images/$image", "$site_dir/images/$image")) return; chmod("$site_dir/images/$image", 0777); } } } // Create a site theme from the default theme. function make_site_theme() { // Name the theme after the blog. $theme_name = __get_option('blogname'); $template = sanitize_title($theme_name); $site_dir = ABSPATH . "wp-content/themes/$template"; // If the theme already exists, nothing to do. if ( is_dir($site_dir)) { return false; } // We must be able to write to the themes dir. if (! is_writable(ABSPATH . "wp-content/themes")) { return false; } umask(0); if (! mkdir($site_dir, 0777)) { return false; } if (file_exists(ABSPATH . 'wp-layout.css')) { if (! make_site_theme_from_oldschool($theme_name, $template)) { // TODO: rm -rf the site theme directory. return false; } } else { if (! make_site_theme_from_default($theme_name, $template)) // TODO: rm -rf the site theme directory. return false; } // Make the new site theme active. $current_template = __get_option('template'); if ($current_template == 'default') { update_option('template', $template); update_option('stylesheet', $template); } return $template; } function translate_level_to_role($level) { switch ($level) { case 10: case 9: case 8: return 'administrator'; case 7: case 6: case 5: return 'editor'; case 4: case 3: case 2: return 'author'; case 1: return 'contributor'; case 0: return 'subscriber'; } } function wp_check_mysql_version() { global $wp_version; // Make sure the server has MySQL 4.0 $mysql_version = preg_replace('|[^0-9\.]|', '', @mysql_get_server_info()); if ( version_compare($mysql_version, '4.0.0', '<') ) die(sprintf(__('ERROR: WordPress %s requires MySQL 4.0.0 or higher'), $wp_version)); } function maybe_disable_automattic_widgets() { $plugins = __get_option( 'active_plugins' ); foreach ( (array) $plugins as $plugin ) { if ( basename( $plugin ) == 'widgets.php' ) { array_splice( $plugins, array_search( $plugin, $plugins ), 1 ); update_option( 'active_plugins', $plugins ); break; } } } ?>6wordpress/wp-admin/.svn/text-base/upgrade.php.svn-base wp-config.php file. I need this before we can get started. Need more help? We got it. You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file."); require('../wp-config.php'); timer_start(); require_once(ABSPATH . '/wp-admin/upgrade-functions.php'); if (isset($_GET['step'])) $step = (int) $_GET['step']; else $step = 0; @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); ?> > <?php _e('WordPress › Upgrade'); ?> text_direction) ) : ?>

    WordPress

    =wordpress/wp-admin/.svn/text-base/upgrade-schema.php.svn-base:3=') ) { if ( ! empty($wpdb->charset) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; } $wp_queries="CREATE TABLE $wpdb->categories ( cat_ID bigint(20) NOT NULL auto_increment, cat_name varchar(55) NOT NULL default '', category_nicename varchar(200) NOT NULL default '', category_description longtext NOT NULL, category_parent bigint(20) NOT NULL default '0', category_count bigint(20) NOT NULL default '0', link_count bigint(20) NOT NULL default '0', posts_private tinyint(1) NOT NULL default '0', links_private tinyint(1) NOT NULL default '0', PRIMARY KEY (cat_ID), KEY category_nicename (category_nicename) ) $charset_collate; CREATE TABLE $wpdb->comments ( comment_ID bigint(20) unsigned NOT NULL auto_increment, comment_post_ID int(11) NOT NULL default '0', comment_author tinytext NOT NULL, comment_author_email varchar(100) NOT NULL default '', comment_author_url varchar(200) NOT NULL default '', comment_author_IP varchar(100) NOT NULL default '', comment_date datetime NOT NULL default '0000-00-00 00:00:00', comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', comment_content text NOT NULL, comment_karma int(11) NOT NULL default '0', comment_approved enum('0','1','spam') NOT NULL default '1', comment_agent varchar(255) NOT NULL default '', comment_type varchar(20) NOT NULL default '', comment_parent bigint(20) NOT NULL default '0', user_id bigint(20) NOT NULL default '0', PRIMARY KEY (comment_ID), KEY comment_approved (comment_approved), KEY comment_post_ID (comment_post_ID) ) $charset_collate; CREATE TABLE $wpdb->link2cat ( rel_id bigint(20) NOT NULL auto_increment, link_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY link_id (link_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->links ( link_id bigint(20) NOT NULL auto_increment, link_url varchar(255) NOT NULL default '', link_name varchar(255) NOT NULL default '', link_image varchar(255) NOT NULL default '', link_target varchar(25) NOT NULL default '', link_category bigint(20) NOT NULL default '0', link_description varchar(255) NOT NULL default '', link_visible enum('Y','N') NOT NULL default 'Y', link_owner int(11) NOT NULL default '1', link_rating int(11) NOT NULL default '0', link_updated datetime NOT NULL default '0000-00-00 00:00:00', link_rel varchar(255) NOT NULL default '', link_notes mediumtext NOT NULL, link_rss varchar(255) NOT NULL default '', PRIMARY KEY (link_id), KEY link_category (link_category), KEY link_visible (link_visible) ) $charset_collate; CREATE TABLE $wpdb->options ( option_id bigint(20) NOT NULL auto_increment, blog_id int(11) NOT NULL default '0', option_name varchar(64) NOT NULL default '', option_can_override enum('Y','N') NOT NULL default 'Y', option_type int(11) NOT NULL default '1', option_value longtext NOT NULL, option_width int(11) NOT NULL default '20', option_height int(11) NOT NULL default '8', option_description tinytext NOT NULL, option_admin_level int(11) NOT NULL default '1', autoload enum('yes','no') NOT NULL default 'yes', PRIMARY KEY (option_id,blog_id,option_name), KEY option_name (option_name) ) $charset_collate; CREATE TABLE $wpdb->post2cat ( rel_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY post_id (post_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->postmeta ( meta_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY post_id (post_id), KEY meta_key (meta_key) ) $charset_collate; CREATE TABLE $wpdb->posts ( ID bigint(20) unsigned NOT NULL auto_increment, post_author bigint(20) NOT NULL default '0', post_date datetime NOT NULL default '0000-00-00 00:00:00', post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content longtext NOT NULL, post_title text NOT NULL, post_category int(4) NOT NULL default '0', post_excerpt text NOT NULL, post_status enum('publish','draft','private','static','object','attachment','inherit','future') NOT NULL default 'publish', comment_status enum('open','closed','registered_only') NOT NULL default 'open', ping_status enum('open','closed') NOT NULL default 'open', post_password varchar(20) NOT NULL default '', post_name varchar(200) NOT NULL default '', to_ping text NOT NULL, pinged text NOT NULL, post_modified datetime NOT NULL default '0000-00-00 00:00:00', post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content_filtered text NOT NULL, post_parent bigint(20) NOT NULL default '0', guid varchar(255) NOT NULL default '', menu_order int(11) NOT NULL default '0', post_type varchar(20) NOT NULL default 'post', post_mime_type varchar(100) NOT NULL default '', comment_count bigint(20) NOT NULL default '0', PRIMARY KEY (ID), KEY post_name (post_name), KEY type_status_date (post_type,post_status,post_date,ID) ) $charset_collate; CREATE TABLE $wpdb->users ( ID bigint(20) unsigned NOT NULL auto_increment, user_login varchar(60) NOT NULL default '', user_pass varchar(64) NOT NULL default '', user_nicename varchar(50) NOT NULL default '', user_email varchar(100) NOT NULL default '', user_url varchar(100) NOT NULL default '', user_registered datetime NOT NULL default '0000-00-00 00:00:00', user_activation_key varchar(60) NOT NULL default '', user_status int(11) NOT NULL default '0', display_name varchar(250) NOT NULL default '', PRIMARY KEY (ID), KEY user_login_key (user_login) ) $charset_collate; CREATE TABLE $wpdb->usermeta ( umeta_id bigint(20) NOT NULL auto_increment, user_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (umeta_id), KEY user_id (user_id), KEY meta_key (meta_key) ) $charset_collate;"; function populate_options() { global $wpdb, $wp_db_version; $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); add_option('siteurl', $guessurl, __('WordPress web address')); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another WordPress weblog'), __('Short tagline')); add_option('new_users_can_blog', 0); add_option('users_can_register', 0); add_option('admin_email', 'you@example.com'); add_option('start_of_week', 1); add_option('use_balanceTags', 0); add_option('use_smilies', 1); add_option('require_name_email', 1); add_option('comments_notify', 1); add_option('posts_per_rss', 10); add_option('rss_excerpt_length', 50); add_option('rss_use_excerpt', 0); add_option('mailserver_url', 'mail.example.com'); add_option('mailserver_login', 'login@example.com'); add_option('mailserver_pass', 'password'); add_option('mailserver_port', 110); add_option('default_category', 1); add_option('default_comment_status', 'open'); add_option('default_ping_status', 'open'); add_option('default_pingback_flag', 1); add_option('default_post_edit_rows', 10); add_option('posts_per_page', 10); add_option('what_to_show', 'posts'); add_option('date_format', __('F j, Y')); add_option('time_format', __('g:i a')); add_option('links_updated_date_format', __('F j, Y g:i a')); add_option('links_recently_updated_prepend', ''); add_option('links_recently_updated_append', ''); add_option('links_recently_updated_time', 120); add_option('comment_moderation', 0); add_option('moderation_notify', 1); add_option('permalink_structure'); add_option('gzipcompression', 0); add_option('hack_file', 0); add_option('blog_charset', 'UTF-8'); add_option('moderation_keys'); add_option('active_plugins'); add_option('home', $guessurl); // in case it is set, but blank, update "home" if ( !__get_option('home') ) update_option('home', $guessurl); add_option('category_base'); add_option('ping_sites', 'http://rpc.pingomatic.com/'); add_option('advanced_edit', 0); add_option('comment_max_links', 2); add_option('gmt_offset', date('Z') / 3600); // 1.5 add_option('default_email_category', 1, __('Posts by email go to this category')); add_option('recently_edited'); add_option('use_linksupdate', 0); add_option('template', 'default'); add_option('stylesheet', 'default'); add_option('comment_whitelist', 1); add_option('page_uris'); add_option('blacklist_keys'); add_option('comment_registration', 0); add_option('rss_language', 'en'); add_option('html_type', 'text/html'); // 1.5.1 add_option('use_trackback', 0); // 2.0 add_option('default_role', 'subscriber'); add_option('db_version', $wp_db_version); // 2.0.1 if ( ini_get('safe_mode') ) { // Safe mode screws up mkdir(), so we must use a flat structure. add_option('uploads_use_yearmonth_folders', 0); add_option('upload_path', 'wp-content'); } else { add_option('uploads_use_yearmonth_folders', 1); add_option('upload_path', 'wp-content/uploads'); } // 2.0.3 add_option('secret', md5(uniqid(microtime()))); // 2.1 add_option('blog_public', '1'); add_option('default_link_category', 2); add_option('show_on_front', 'posts'); // Delete unused options $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing'); foreach ($unusedoptions as $option) : delete_option($option); endforeach; // Set up a few options not to load by default $fatoptions = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); foreach ($fatoptions as $fatoption) : $wpdb->query("UPDATE $wpdb->options SET autoload = 'no' WHERE option_name = '$fatoption'"); endforeach; } function populate_roles() { populate_roles_160(); populate_roles_210(); } function populate_roles_160() { global $wp_roles; // Add roles add_role('administrator', __('Administrator')); add_role('editor', __('Editor')); add_role('author', __('Author')); add_role('contributor', __('Contributor')); add_role('subscriber', __('Subscriber')); // Add caps for Administrator role $role = get_role('administrator'); $role->add_cap('switch_themes'); $role->add_cap('edit_themes'); $role->add_cap('activate_plugins'); $role->add_cap('edit_plugins'); $role->add_cap('edit_users'); $role->add_cap('edit_files'); $role->add_cap('manage_options'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('import'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_10'); $role->add_cap('level_9'); $role->add_cap('level_8'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Editor role $role = get_role('editor'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Author role $role = get_role('author'); $role->add_cap('upload_files'); $role->add_cap('edit_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('read'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Contributor role $role = get_role('contributor'); $role->add_cap('edit_posts'); $role->add_cap('read'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Subscriber role $role = get_role('subscriber'); $role->add_cap('read'); $role->add_cap('level_0'); } function populate_roles_210() { $roles = array('administrator', 'editor'); foreach ($roles as $role) { $role = get_role($role); if ( empty($role) ) continue; $role->add_cap('edit_others_pages'); $role->add_cap('edit_published_pages'); $role->add_cap('publish_pages'); $role->add_cap('delete_pages'); $role->add_cap('delete_others_pages'); $role->add_cap('delete_published_pages'); $role->add_cap('delete_posts'); $role->add_cap('delete_others_posts'); $role->add_cap('delete_published_posts'); $role->add_cap('delete_private_posts'); $role->add_cap('edit_private_posts'); $role->add_cap('read_private_posts'); $role->add_cap('delete_private_pages'); $role->add_cap('edit_private_pages'); $role->add_cap('read_private_pages'); } $role = get_role('administrator'); if ( ! empty($role) ) { $role->add_cap('delete_users'); $role->add_cap('create_users'); } $role = get_role('author'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); $role->add_cap('delete_published_posts'); } $role = get_role('contributor'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); } } ?>5wordpress/wp-admin/.svn/text-base/upload.css.svn-base body { background: #f9fcfe; } .upload-file-data { display: none; } #upload-menu { border-top: 2em solid #247fab; margin: 0; padding: 0; height: 0; list-style: none; width: 100%; } body > #upload-menu { border-bottom: 7px solid #fff; } #upload-menu li { margin: 0; position: relative; top: -2em; padding-bottom: 5px; border: none; border-top: 3px solid #247fab; } #upload-menu li a.upload-tab-link { margin-left: 0.75em; padding: 5px 5px 0; display: block; float: left; height: 100%; text-decoration: none; border-bottom: none; color: #fff; } #upload-menu li.current { border-right: 2px solid #448abd; color: #000; } #upload-menu li.current a.upload-tab-link, #upload-menu li a:hover { background: #f9fcfe; color: #000; } #upload-menu li #current-tab-nav { background: #f9fcfe; float: left; padding: 5px 5px 0 0; margin-left: -5px; } #upload-menu li span .page-numbers { padding: 0; border: none; } #upload-menu li span a.page-numbers { color: #00019b; } #upload-menu li span a.page-numbers:hover { text-decoration: underline; } #upload-content { position: relative; clear: both; margin: 0; padding: 0; border: none; width: 100%; height: 100%; background: none; } #upload-file { margin: 0 auto; top: 0; left: 0; width: 95%; height: 100%; background: #f9fcfe; } #upload-file th { width: 8em; } form#upload-file input, form#upload-file textarea, div#upload-content.upload table { width: 100%; } form#upload-file .submit input { width: auto; } #upload-file-view { padding: 0 0 0 75px; } #file-title { margin: 0 0 .2em 75px; padding: 0; display: block; font-family: Georgia, "Times New Roman", Times, serif; font-size: 16px; } h2 { margin: 0 .2em 0 0; padding: 0; display: inline; border: none; color: #000; font-size: 1.4em; line-height: 1.4em; } .wrap h2 { margin: .4em 0 .5em; display: block; border-bottom: .5em solid #e5f3ff; color: #333; font: normal 32px/5px serif; clear: both; } * html .wrap h2 { margin-top: 1em; } .back { display: block; position: absolute; left: 14px; top: 10px; } #upload-files { list-style-type: none; margin: 0; padding: 15px 0 0; } #upload-files li { margin: 0 0 15px 15px; } #upload-files a, #upload-file-view a, a.file-link { border: none; text-decoration: none; } #upload-file-view a img { padding-bottom: .2em; border-bottom: 1px solid #6699CC; } #upload-files a.file-link { display: block; width: 130px; height: 128px; background-color: rgb(209, 226, 239); text-align: center; overflow: hidden; } #upload-files a.text { padding-top: 40px; height: 88px; font-size: 16px; } #upload-files a.file-link.image { font-size: 2px; letter-spacing: 0; } #upload-files a.file-link img { vertical-align: middle; } #the-attachment-links textarea { font-size: 10px; overflow: hidden; } form table { float: none; padding: 0 15px; } table { float: left; margin: 0; padding: 0; } th { text-align: right; vertical-align: text-top; } tr, td, th { margin-top: 0; padding-top: 0; } #uploadoptions th { width: 80px; } #uploadoptions p { margin: 0; padding: 0; } #uploadoptions td { padding-left: 1em; line-height: 140%; } #uploadoptions table { width: 300px; } input.readonly { background-color: #ddd; } ?wordpress/wp-admin/.svn/text-base/upload-functions.php.svn-base4+post_content )); $class = 'text'; $innerHTML = get_attachment_innerHTML( $id, false, $dims ); if ( $image_src = get_attachment_icon_src() ) { $image_rel = wp_make_link_relative($image_src); $innerHTML = ' ' . str_replace($image_src, $image_rel, $innerHTML); $class = 'image'; } $src_base = wp_get_attachment_url(); $src = wp_make_link_relative( $src_base ); $src_base = str_replace($src, '', $src_base); $r = ''; if ( $href ) $r .= "\n"; if ( $href || $image_src ) $r .= "\t\t\t$innerHTML"; if ( $href ) $r .= "\n"; $r .= "\n\t\t
    \n\t\t\t

    \n"; $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; if ( !$thumb_base = wp_get_attachment_thumb_url() ) $thumb_base = wp_mime_type_icon(); if ( $thumb_base ) { $thumb_rel = wp_make_link_relative( $thumb_base ); $thumb_base = str_replace( $thumb_rel, '', $thumb_base ); $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; } $r .= "\t\t\t\t\n"; if ( isset($width) ) { $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; } $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; $r .= "\t\t\t

    \n\t\t
    \n"; return $r; } function wp_upload_view() { global $style, $post_id, $style; $id = get_the_ID(); $attachment_data = wp_get_attachment_metadata( $id ); ?>

    "; the_title(); if ( !isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>

    ' . __('view') . ''; echo ' | '; echo '' . __('edit') . ''; echo ' | '; echo '' . __('cancel') . ''; echo ' ]'; ?>
    "; echo wp_upload_display( array(171, 128) ); if ( isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>
    \n"; } function wp_upload_form() { $id = get_the_ID(); global $post_id, $tab, $style; $enctype = $id ? '' : ' enctype="multipart/form-data"'; $post_id = (int) $post_id; ?> id="upload-file" method="post" action="">

    "; the_title(); if ( !isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>

    ' . __('view') . ''; echo ' | '; echo '' . __('links') . ''; echo ' | '; echo '' . __('cancel') . ''; echo ' ]'; ?>
    "; echo wp_upload_display( array(171, 128) ); if ( isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>
    " . __('Browse Files') . '' ); $overrides = array('action'=>'upload'); $file = wp_handle_upload($_FILES['image'], $overrides); if ( isset($file['error']) ) wp_die($file['error'] . "
    " . __('Back to Image Uploading') . '' ); $url = $file['url']; $type = $file['type']; $file = $file['file']; $filename = basename($file); // Construct the attachment array $attachment = array( 'post_title' => $post_title ? $post_title : $filename, 'post_content' => $post_content, 'post_type' => 'attachment', 'post_parent' => $post_id, 'post_mime_type' => $type, 'guid' => $url ); // Save the data $id = wp_insert_attachment($attachment, $file, $post_id); wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); wp_redirect( get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=browse&action=view&ID=$id&post_id=$post_id"); die; break; case 'save' : global $from_tab, $post_id, $style; if ( !$from_tab ) $from_tab = 'upload'; check_admin_referer( 'inlineuploading' ); wp_update_post($_POST); wp_redirect( get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=$from_tab&post_id=$post_id"); die; break; case 'delete' : global $ID, $post_id, $from_tab, $style; if ( !$from_tab ) $from_tab = 'upload'; check_admin_referer( 'inlineuploading' ); if ( !current_user_can('edit_post', (int) $ID) ) wp_die( __('You are not allowed to delete this attachment.') . " " . __('Go back') . '' ); wp_delete_attachment($ID); wp_redirect( get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=$from_tab&post_id=$post_id" ); die; break; endswitch; } add_action( 'upload_files_upload', 'wp_upload_tab_upload_action' ); function wp_upload_grab_attachments( $obj ) { $obj->is_attachment = true; } function wp_upload_posts_where( $where ) { global $post_id; return $where . " AND post_parent = '" . (int) $post_id . "'"; } function wp_upload_tab_browse() { global $wpdb, $action, $paged; $old_vars = compact( 'paged' ); switch ( $action ) : case 'edit' : case 'view' : global $ID; $attachments = query_posts("attachment_id=$ID"); if ( have_posts() ) : while ( have_posts() ) : the_post(); 'edit' == $action ? wp_upload_form() : wp_upload_view(); endwhile; endif; break; default : global $tab, $post_id, $style; add_action( 'pre_get_posts', 'wp_upload_grab_attachments' ); if ( 'browse' == $tab && $post_id ) add_filter( 'posts_where', 'wp_upload_posts_where' ); $attachments = query_posts("what_to_show=posts&posts_per_page=10&paged=$paged"); $count_query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment'"; if ( $post_id ) $count_query .= " AND post_parent = '$post_id'"; $total = $wpdb->get_var($count_query); echo "
      \n"; if ( have_posts() ) : while ( have_posts() ) : the_post(); $href = wp_specialchars( add_query_arg( array( 'action' => 'inline' == $style ? 'view' : 'edit', 'ID' => get_the_ID()) ), 1 ); echo "\t
    • \n"; echo wp_upload_display( array(128,128), $href ); echo "\t
    • \n"; endwhile; else : echo "\t
    • " . __('There are no attachments to show.') . "
    • \n"; endif; echo "
    \n\n"; echo "
    \n"; break; endswitch; extract($old_vars); } function wp_upload_tab_browse_action() { global $style; if ( 'inline' == $style ) wp_enqueue_script('upload'); } add_action( 'upload_files_browse', 'wp_upload_tab_browse_action' ); add_action( 'upload_files_browse-all', 'wp_upload_tab_browse_action' ); function wp_upload_admin_head() { global $wp_locale; echo "\n"; if ( 'rtl' == $wp_locale->text_direction ) echo "\n"; if ( 'inline' == @$_GET['style'] ) { echo ""; } } ?>4wordpress/wp-admin/.svn/text-base/upload.js.svn-base+aaddLoadEvent( function() { theFileList = { currentImage: {ID: 0}, nonce: '', tab: '', postID: 0, initializeVars: function() { this.urlData = document.location.href.split('?'); this.params = this.urlData[1].toQueryParams(); this.postID = this.params['post_id']; this.tab = this.params['tab']; this.style = this.params['style']; this.ID = this.params['ID']; if ( !this.style ) this.style = 'default'; var nonceEl = $('nonce-value'); if ( nonceEl ) this.nonce = nonceEl.value; if ( this.ID ) { this.grabImageData( this.ID ); this.imageView( this.ID ); } }, initializeLinks: function() { if ( this.ID ) return; $$('a.file-link').each( function(i) { var id = i.id.split('-').pop(); i.onclick = function(e) { theFileList[ 'inline' == theFileList.style ? 'imageView' : 'editView' ](id, e); } } ); }, grabImageData: function(id) { if ( id == this.currentImage.ID ) return; var thumbEl = $('attachment-thumb-url-' + id); if ( thumbEl ) { this.currentImage.thumb = ( 0 == id ? '' : thumbEl.value ); this.currentImage.thumbBase = ( 0 == id ? '' : $('attachment-thumb-url-base-' + id).value ); } else { this.currentImage.thumb = false; } this.currentImage.src = ( 0 == id ? '' : $('attachment-url-' + id).value ); this.currentImage.srcBase = ( 0 == id ? '' : $('attachment-url-base-' + id).value ); this.currentImage.page = ( 0 == id ? '' : $('attachment-page-url-' + id).value ); this.currentImage.title = ( 0 == id ? '' : $('attachment-title-' + id).value ); this.currentImage.description = ( 0 == id ? '' : $('attachment-description-' + id).value ); var widthEl = $('attachment-width-' + id); if ( widthEl ) { this.currentImage.width = ( 0 == id ? '' : widthEl.value ); this.currentImage.height = ( 0 == id ? '' : $('attachment-height-' + id).value ); } else { this.currentImage.width = false; this.currentImage.height = false; } this.currentImage.isImage = ( 0 == id ? 0 : $('attachment-is-image-' + id).value ); this.currentImage.ID = id; }, imageView: function(id, e) { this.prepView(id); var h = ''; h += "
    " if ( this.ID ) { var params = $H(this.params); params.ID = ''; params.action = ''; h += "" + this.back + ""; h += "
    " if ( 0 == this.currentImage.isImage ) h += "

    " + this.currentImage.title + "

    "; else h += "

    " + this.currentImage.title + "

    "; h += " — "; h += "" + this.edit + "" h += ""; h += '
    ' h += "
    "; if ( 1 == this.currentImage.isImage ) { h += ""; h += "" + this.currentImage.title + ""; h += ""; } else h += ' '; h += "
    "; h += "
    "; h += ""; var display = []; var checked = 'display-title'; if ( 1 == this.currentImage.isImage ) { checked = 'display-full'; if ( this.currentImage.thumb ) { display.push("
    "); checked = 'display-thumb'; } display.push(""); } else if ( this.currentImage.thumb ) { display.push(""); } if ( display.length ) { display.push("
    "); h += ""; } h += ""; h += "
    " + this.show + ""; $A(display).each( function(i) { h += i; } ); h += "
    " + this.link + ""; h += "
    "; h += "
    "; h += ""; h += "

    "; h += ""; h += "

    "; h += "
    "; h += "
    "; new Insertion.Top('upload-content', h); var displayEl = $(checked); if ( displayEl ) displayEl.checked = true; if (e) Event.stop(e); return false; }, editView: function(id, e) { this.prepView(id); var h = ''; var action = 'upload.php?style=' + this.style + '&tab=upload'; if ( this.postID ) action += '&post_id=' + this.postID; h += "
    "; if ( this.ID ) { var params = $H(this.params); params.ID = ''; params.action = ''; h += "" + this.back + ""; h += "
    " if ( 0 == this.currentImage.isImage ) h += "

    " + this.currentImage.title + "

    "; else h += "

    " + this.currentImage.title + "

    "; h += " — "; h += "" + this.insert + ""; h += ""; h += '
    ' h += "
    "; if ( 1 == this.currentImage.isImage ) { h += ""; h += "" + this.currentImage.title + ""; h += ""; } else h += ' '; h += "
    "; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += "
    "; h += ""; h += ""; h += ""; h += ""; h += "
    "; h += "
    "; new Insertion.Top('upload-content', h); if (e) Event.stop(e); return false; }, prepView: function(id) { this.cancelView( true ); var filesEl = $('upload-files'); if ( filesEl ) filesEl.hide(); var navEl = $('current-tab-nav'); if ( navEl ) navEl.hide(); this.grabImageData(id); }, cancelView: function( prep ) { if ( !prep ) { var filesEl = $('upload-files'); if ( filesEl ) Element.show(filesEl); var navEl = $('current-tab-nav'); if ( navEl ) Element.show(navEl); } if ( !this.ID ) this.grabImageData(0); var div = $('upload-file'); if ( div ) Element.remove(div); return false; }, sendToEditor: function(id) { this.grabImageData(id); var link = ''; var display = ''; var h = ''; link = $A(document.forms.uploadoptions.elements.link).detect( function(i) { return i.checked; } ).value; displayEl = $A(document.forms.uploadoptions.elements.display).detect( function(i) { return i.checked; } ) if ( displayEl ) display = displayEl.value; else if ( 1 == this.currentImage.isImage ) display = 'full'; if ( 'none' != link ) h += ""; if ( display && 'title' != display ) h += "" + this.currentImage.title + ""; else h += this.currentImage.title; if ( 'none' != link ) h += ""; var win = window.opener ? window.opener : window.dialogArguments; if ( !win ) win = top; tinyMCE = win.tinyMCE; if ( typeof tinyMCE != 'undefined' && tinyMCE.getInstanceById('content') ) { tinyMCE.selectedInstance.getWin().focus(); tinyMCE.execCommand('mceInsertContent', false, h); } else win.edInsertContent(win.edCanvas, h); if ( !this.ID ) this.cancelView(); return false; }, deleteFile: function(id) { if ( confirm( this.confirmText.replace(/%title%/g, this.currentImage.title) ) ) { $('action-value').value = 'delete'; $('upload-file').submit(); return true; } return false; } }; Object.extend( theFileList, uploadL10n ); theFileList.initializeVars(); theFileList.initializeLinks(); } ); 5wordpress/wp-admin/.svn/text-base/upload.php.svn-baseget_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment'"); $post_atts = 0; if ( $pid ) { // 0 => tab display name, 1 => required cap, 2 => function that produces tab content, 3 => total number objects OR array(total, objects per page), 4 => add_query_args $wp_upload_tabs['upload'] = array(__('Upload'), 'upload_files', 'wp_upload_tab_upload', 0); if ( $all_atts && $post_atts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = " . $post_id) ) $wp_upload_tabs['browse'] = array(__('Browse'), 'upload_files', "wp_upload_tab_browse", $action ? 0 : $post_atts); if ( $post_atts < $all_atts ) $wp_upload_tabs['browse-all'] = array(__('Browse All'), 'upload_files', 'wp_upload_tab_browse', $action ? 0 : $all_atts); } else $wp_upload_tabs['browse-all'] = array(__('Browse All'), 'upload_files', 'wp_upload_tab_browse', $action ? 0 : $all_atts); $wp_upload_tabs = array_merge($wp_upload_tabs, apply_filters( 'wp_upload_tabs', array() )); if ( !is_callable($wp_upload_tabs[$tab][2]) ) { $to_tab = isset($wp_upload_tabs['upload']) ? 'upload' : 'browse-all'; wp_redirect( add_query_arg( 'tab', $to_tab ) ); exit; } foreach ( $wp_upload_tabs as $t => $tab_array ) { if ( !current_user_can( $tab_array[1] ) ) { unset($wp_upload_tabs[$t]); if ( $tab == $t ) wp_die(__("You are not allowed to be here")); } } if ( 'inline' == $style ) : ?> > <?php bloginfo('name') ?> › <?php _e('Uploads'); ?> — WordPress text_direction) ) : ?>

    \n"; foreach ( $wp_upload_tabs as $t => $tab_array ) { // We've already done the current_user_can check $href = add_query_arg( array('tab' => $t, 'ID' => '', 'action' => '', 'paged' => '') ); if ( isset($tab_array[4]) && is_array($tab_array[4]) ) $href = add_query_arg( $tab_array[4], $href ); $_href = clean_url( $href); $page_links = ''; $class = 'upload-tab alignleft'; if ( $tab == $t ) { $class .= ' current'; if ( $tab_array[3] ) { if ( is_array($tab_array[3]) ) { $total = $tab_array[3][0]; $per = $tab_array[3][1]; } else { $total = $tab_array[3]; $per = 10; } $page_links = paginate_links( array( 'base' => add_query_arg( 'paged', '%#%' ), 'format' => '', 'total' => ceil($total / $per), 'current' => $paged ? $paged : 1, 'prev_text' => '«', 'next_text' => '»' )); if ( $page_links ) $page_links = ": $page_links"; } } echo "\t
  • {$tab_array[0]}$page_links
  • \n"; } unset($t, $tab_array, $href, $_href, $page_links, $total, $per, $class); echo "\n\n"; echo "
    \n"; call_user_func( $wp_upload_tabs[$tab][2] ); echo "
    \n"; if ( 'inline' != $style ) : echo "
    "; include_once('admin-footer.php'); else : ?> 9wordpress/wp-admin/.svn/text-base/upload-rtl.css.svn-base#upload-menu li a.upload-tab-link { float: right; margin: 0 .75em 0 0; } table { float: right; } #upload-menu li #current-tab-nav { float: right; padding: 5px 0 0 5px; margin-right: -5px; } #upload-file th, #the-attachment-links textarea { text-align: left; } h2 { margin: 0 0 0 .2em; } #upload-files li { margin: 0 15px 15px 0; } #upload-file-view { padding: 0 75px 0 0; } #upload-menu li { display: block; float: right; } #upload-menu li.current { border-right: 0; border-left: 2px solid #448abd; } #upload-file { left: auto; right: 0; } #file-title { margin: 0 75px .2em 0; font-family: Tahoma, Georgia, "Times New Roman", Times, serif; } .back { left: auto; right: 14px; } #uploadoptions td { padding-left: 0; padding-right: 1em; } 8wordpress/wp-admin/.svn/text-base/user-edit.php.svn-base

      get_error_messages() as $message ) echo "
    • $message
    • "; ?>



    caps) > count($profileuser->roles)): ?>
    caps as $cap => $value) { if(!$wp_roles->is_role($cap)) { if($output != '') $output .= ', '; $output .= $value ? $cap : "Denied: {$cap}"; } } echo $output; ?>

    3wordpress/wp-admin/.svn/text-base/users.js.svn-baseMaddLoadEvent(function() { theListEls = document.getElementsByTagName('tbody'); theUserLists = new Array(); for ( var l = 0; l < theListEls.length; l++ ) { if ( theListEls[l].id ) theUserLists[theListEls[l].id] = new listMan(theListEls[l].id); } addUserInputs = document.getElementById('adduser').getElementsByTagName('input'); for ( var i = 0; i < addUserInputs.length; i++ ) { addUserInputs[i].onkeypress = function(e) { return killSubmit('addUserSubmit();', e); } } document.getElementById('addusersub').onclick = function(e) { return killSubmit('addUserSubmit();', e); } } ); function addUserSubmit() { var roleEl = document.getElementById('role'); var role = roleEl.options[roleEl.selectedIndex].value; if ( !theUserLists['role-' + role] ) return true; return theUserLists['role-' + role].ajaxAdder('user', 'adduser'); } 4wordpress/wp-admin/.svn/text-base/users.php.svn-base>'; } elseif ( isset($_POST['wp_http_referer']) ) { $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_POST['wp_http_referer'])); $referer = ''; } else { $redirect = 'users.php'; } // WP_User_Search class // by Mark Jaquith class WP_User_Search { var $results; var $search_term; var $page; var $raw_page; var $users_per_page = 50; var $first_user; var $last_user; var $query_limit; var $query_from_where; var $total_users_for_query = 0; var $too_many_total_users = false; var $search_errors; function WP_User_Search ($search_term = '', $page = '') { // constructor $this->search_term = $search_term; $this->raw_page = ( '' == $page ) ? false : (int) $page; $this->page = (int) ( '' == $page ) ? 1 : $page; $this->prepare_query(); $this->query(); $this->prepare_vars_for_template_usage(); $this->do_paging(); } function prepare_query() { global $wpdb; $this->first_user = ($this->page - 1) * $this->users_per_page; $this->query_limit = '';//'LIMIT ' . $this->first_user . ',' . $this->users_per_page; if ( $this->search_term ) { $searches = array(); $search_sql = 'AND ('; foreach ( array('user_login', 'user_nicename', 'user_email', 'user_url', 'display_name') as $col ) $searches[] = $col . " LIKE '%$this->search_term%'"; $search_sql .= implode(' OR ', $searches); $search_sql .= ')'; } $this->query_from_where = "FROM $wpdb->users WHERE 1=1 $search_sql"; } function query() { global $wpdb; $this->results = $wpdb->get_col('SELECT ID ' . $this->query_from_where . $this->query_limit); if ( $this->results ) $this->total_users_for_query = $wpdb->get_var('SELECT COUNT(ID) ' . $this->query_from_where); // no limit else $this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!')); } function prepare_vars_for_template_usage() { $this->search_term = stripslashes($this->search_term); // done with DB, from now on we want slashes gone } function do_paging() { if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results $this->paging_text = paginate_links( array( 'total' => ceil($this->total_users_for_query / $this->users_per_page), 'current' => $this->page, 'prev_text' => __('« Previous Page'), 'next_text' => __('Next Page »'), 'base' => 'users.php?%_%', 'format' => 'userspage=%#%', 'add_args' => array( 'usersearch' => urlencode($this->search_term) ) ) ); } } function get_results() { return (array) $this->results; } function page_links() { echo $this->paging_text; } function results_are_paged() { if ( $this->paging_text ) return true; return false; } function is_search() { if ( $this->search_term ) return true; return false; } } switch ($action) { case 'promote': check_admin_referer('bulk-users'); if (empty($_POST['users'])) { wp_redirect($redirect); exit(); } if ( !current_user_can('edit_users') ) wp_die(__('You can’t edit users.')); $userids = $_POST['users']; $update = 'promote'; foreach($userids as $id) { if ( ! current_user_can('edit_user', $id) ) wp_die(__('You can’t edit that user.')); // The new role of the current user must also have edit_users caps if($id == $current_user->ID && !$wp_roles->role_objects[$_POST['new_role']]->has_cap('edit_users')) { $update = 'err_admin_role'; continue; } $user = new WP_User($id); $user->set_role($_POST['new_role']); } wp_redirect(add_query_arg('update', $update, $redirect)); exit(); break; case 'dodelete': check_admin_referer('delete-users'); if ( empty($_POST['users']) ) { wp_redirect($redirect); exit(); } if ( !current_user_can('delete_users') ) wp_die(__('You can’t delete users.')); $userids = $_POST['users']; $update = 'del'; $delete_count = 0; foreach ( (array) $userids as $id) { if ( ! current_user_can('delete_user', $id) ) wp_die(__('You can’t delete that user.')); if($id == $current_user->ID) { $update = 'err_admin_del'; continue; } switch($_POST['delete_option']) { case 'delete': wp_delete_user($id); break; case 'reassign': wp_delete_user($id, $_POST['reassign_user']); break; } ++$delete_count; } $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect); wp_redirect($redirect); exit(); break; case 'delete': check_admin_referer('bulk-users'); if ( empty($_POST['users']) ) { wp_redirect($redirect); exit(); } if ( !current_user_can('delete_users') ) $errors = new WP_Error('edit_users', __('You can’t delete users.')); $userids = $_POST['users']; include ('admin-header.php'); ?>

      ID ) { echo "
    • " . sprintf(__('ID #%1s: %2s The current user will not be deleted.'), $id, $user->user_login) . "
    • \n"; } else { echo "
    • " . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "
    • \n"; $go_delete = true; } } $all_logins = $wpdb->get_results("SELECT ID, user_login FROM $wpdb->users ORDER BY user_login"); $user_dropdown = ''; ?>

    • '.__('Attribute all posts and links to:')." $user_dropdown"; ?>

    urlencode($new_user_login), 'update' => $update), $redirect ); wp_redirect( $redirect . '#user-' . $user_id ); die(); } default: wp_enqueue_script('admin-users'); include('admin-header.php'); // Query the users $wp_user_search = new WP_User_Search($_GET['usersearch'], $_GET['userspage']); // Make the user objects foreach ( $wp_user_search->get_results() as $userid ) { $tmp_user = new WP_User($userid); $roles = $tmp_user->roles; $role = array_shift($roles); $roleclasses[$role][$tmp_user->user_login] = $tmp_user; } if ( isset($_GET['update']) ) : switch($_GET['update']) { case 'del': case 'del_many': ?>

      get_error_messages() as $message ) echo "
    • $message
    • "; ?>
    is_search() ) : ?>

    search_term)); ?>

    search_errors ) ) : ?>
      search_errors->get_error_messages() as $message ) echo "
    • $message
    • "; ?>
    get_results() ) : ?> is_search() ) : ?>

    first_user && $wp_user_search->total_users_for_query <= 50 ) printf(__('%3$s shown below'), $wp_user_search->first_user + 1, min($wp_user_search->first_user + $wp_user_search->users_per_page, $wp_user_search->total_users_for_query), $wp_user_search->total_users_for_query); else printf(__('%1$s – %2$s of %3$s shown below'), $wp_user_search->first_user + 1, min($wp_user_search->first_user + $wp_user_search->users_per_page, $wp_user_search->total_users_for_query), $wp_user_search->total_users_for_query); ?>

    results_are_paged() ) : ?>

    page_links(); ?>

    $roleclass) { uksort($roleclass, "strnatcasecmp"); ?>

    role_names[$role]; ?>

    results_are_paged() ) : ?>

    page_links(); ?>

    'user_login', 'first_name' => 'user_firstname', 'last_name' => 'user_lastname', 'email' => 'user_email', 'url' => 'user_uri', 'role' => 'user_role') as $formpost => $var ) { $var = 'new_' . $var; $$var = attribute_escape(stripslashes($_POST[$formpost])); } unset($name); } ?>

    get_error_messages() as $message ) echo "

    $message

    "; ?>
    ' . sprintf(__('Users can register themselves or you can manually create users here.'), get_option('siteurl').'/wp-register.php') . '

    '; else echo '

    ' . sprintf(__('Users cannot currently register themselves, but you can manually create users here.'), get_option('siteurl').'/wp-admin/options-general.php#users_can_register') . '

    '; ?>

    6wordpress/wp-admin/.svn/text-base/widgets.css.svn-base Fbody { height: 100%; } #sbadmin #zones { -moz-user-select: none; -khtml-user-select: none; user-select: none; } #sbreset { float: left; margin: 1px 0; } .dropzone { float: left; margin-right: 10px; padding: 5px; border: 1px solid #bbb; background-color: #f0f8ff; } .dropzone h3 { text-align: center; color: #333; } .dropzone ul { list-style-type: none; width: 240px; float: left; margin: 0; padding: 0; } * .module, #lastmodule { width: 238px; padding: 0; margin: 5px 0; cursor: move; display: block; border: 1px solid #ccc; background-color: #fbfbfb; text-align: left; line-height: 25px; } * .handle, #lastmodule span { display: block; width: 216px; padding: 0 10px; border-top: 1px solid #f2f2f2; border-right: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8; border-left: 1px solid #f2f2f2; } * .popper { margin: 0; display: inline; position: absolute; top: 3px; right: 3px; overflow: hidden; text-align: center; height: 16px; font-size: 18px; line-height: 14px; cursor: pointer; padding: 0 3px 1px; border-top: 4px solid #6da6d1; background: url( images/fade-butt.png ) -5px 0px; } * html .popper { padding: 1px 6px 0; font-size: 16px; } #sbadmin p.submit { padding-right: 10px; clear: left; } .placematt { cursor: default; margin: 10px 0 0; padding: 0; width: 238px; float:left; background-color: #ffe; } * html .placematt { margin-top: 5px; } .placematt h4 { text-align: center; margin-bottom: 5px; } .placematt span { padding: 0 10px 10px; text-align: justify; } #palettediv { border: 1px solid #bbb; background-color: #f0f8ff; height:auto; margin-top: 10px; } #palettediv h3 { text-align: center; color: #333; } #palettediv ul { padding: 0 0 0 10px; } #palettediv .module, #lastmodule { margin-right: 10px; float: left; width: 120px; } #palettediv .handle, #lastmodule span { height: 40px; font-size: 90%; width: 110px; padding: 0 5px; } #palettediv .popper { visibility: hidden; } #lastmodule { visibility: hidden; } * html #palettediv ul { margin: 0; padding: 0 0 0 10px; } * html #palettediv .module { float: none; display: inline; } #controls { height: 0px; } .control { position: absolute; display: block; background: #f9fcfe; padding: 0; } .controlhandle { cursor: move; background-color: #6da6d1; border-bottom: 2px solid #448abd; color: #333; display: block; margin: 0 0 5px; padding: 4px; font-size: 120%; } .controlcloser { cursor: pointer; font-size: 120%; display: block; position: absolute; top: 2px; right: 8px; padding: 0 3px; font-weight: bold; } .controlform { margin: 20px 30px; } .controlform p { text-align: center; } .control .checkbox { border: none; background: transparent; } .hidden { display: none; } #shadow { background: black; display: none; position: absolute; top: 0px; left: 0px; width: 100%; }6wordpress/wp-admin/.svn/text-base/widgets.php.svn-base0k $sidebar ) { $cols[] = '\'' . $index . '\''; } $cols = implode( ', ', $cols ); $widgets = array(); foreach ( $wp_registered_widgets as $name => $widget ) { $widgets[] = '\'' . $widget['id'] . '\''; } $widgets = implode( ', ', $widgets ); ?> ≡' : ''; $output = '
  • %2$s
  • '; printf( $output, $sanitized_name, $wp_registered_widgets[$name]['name'] . $popper ); } $title = __( 'Widgets' ); $parent_file = 'themes.php'; require_once 'admin-header.php'; if ( count( $wp_registered_sidebars ) < 1 ) { ?>

    follow these instructions.' ); /* TODO: article on codex */; ?>

    $sidebar ) { $postindex = $index . 'order'; parse_str( $_POST[$postindex], $order ); $new_order = $order[$index]; if ( is_array( $new_order ) ) { foreach ( $new_order as $sanitized_name ) { foreach ( $wp_registered_widgets as $name => $widget ) { if ( $sanitized_name == $widget['id'] ) { $sidebars_widgets[$index][] = $name; } } } } } wp_set_sidebars_widgets( $sidebars_widgets ); break; } } ksort( $wp_registered_widgets ); $inactive_widgets = array(); foreach ( $wp_registered_widgets as $name => $widget ) { $is_active = false; foreach ( $wp_registered_sidebars as $index => $sidebar ) { if ( is_array( $sidebars_widgets[$index] ) && in_array( $name, $sidebars_widgets[$index] ) ) { $is_active = true; break; } } if ( !$is_active ) { $inactive_widgets[] = $name; } } $containers = array( 'palette' ); foreach ( $wp_registered_sidebars as $index => $sidebar ) { $containers[] = $index; } $c_string = ''; foreach ( $containers as $container ) { $c_string .= '"' . $container . '",'; } $c_string = substr( $c_string, 0, -1 ); if ( isset( $_POST['action'] ) ) { ?>

    View site »' ), get_bloginfo( 'url' ) . '/' ); ?>

    $sidebar ) { ?>


    $widget ) { ?>

    :wordpress/wp-admin/.svn/text-base/widgets-rtl.css.svn-base#sbreset, #lastmodule, #palettediv .module, .dropzone, .dropzone ul { float: right; } * .module, #lastmodule { text-align: right; } * html #palettediv ul { padding: 0 10px 0 0; } #palettediv ul { padding: 0 10px 0 0; margin-left: 1px!important;} * .handle, #lastmodule span { border-right: 1px solid #f2f2f2; border-left: 1px solid #e8e8e8; } #sbadmin p.submit { padding-right: 0; padding-left: 10px; clear: right; } #palettediv .module, #lastmodule, .dropzone { margin-right: auto; margin-left: 10px; } * .popper { right: auto; left: 3px; background-position: 5px 0; } .controlcloser { right: auto; left: 8px; } #shadow { left: auto; right: 0px; }7wordpress/wp-admin/.svn/text-base/wp-admin.css.svn-baseK* html #poststuff { height: 100%; /* kill peekaboo bug in IE */ } /* This is the Holly Hack \*/ * html .wrap { height: 1% } /* For Win IE's eyes only */ body { border: none; } a { border-bottom: 1px solid #69c; color: #00019b; text-decoration: none; } a.delete:hover { background: #c00; color: #fff; } #devnews h4 { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; font-weight: normal; } #planetnews ul { list-style: none; margin: 0; padding: 0; } #planetnews li { width: 17%; margin: 1%; float: left; } #planetnews li a { display: block; padding: .5em; background: #ddd; height: 6em; overflow: hidden; } #planetnews cite { font-size: 11px; } #planetnews li .post { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; display: block; height: 60px; overflow: hidden; } #planetnews .hidden { display: none; } .readmore { clear: both; text-align: right; margin-right: 5em; } .widefat { width: 100%; } .widefat td, .widefat th { padding: 5px 6px; } .widefat th { text-align: left; } .plugins p { margin: 4px; padding: 0; } .plugins .name { font-size: 16px; } .import-system { font-size: 16px; } thead, .thead { background: #dfdfdf } #import-upload-form { margin: auto; background: #eee; padding: 1em; } a.edit, a.delete, a.edit:hover, a.delete:hover { border-bottom: none; display: block; padding: 5px 0; text-align: center; } a.edit:hover { background: #ccc; color: #036; } a:visited { color: #006; } a:hover { /* border-bottom: 1px solid #3a75ae;*/ color: #069; } body { background: #f9fcfe; color: #000; margin: 0; padding: 0; } body, td { font: 13px "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana; } fieldset { border: none; padding: 3px; } fieldset label.selectit { display: block; font-size: 11px; padding: 0 2px; } fieldset label.selectit:hover { background: #e9e9e9; } fieldset legend { padding: .1em .3em; } fieldset.options { padding: 1em; } fieldset.options legend { font-size: 1.5em; font-weight: bold; font-family: Georgia, "Times New Roman", Times, serif; } form, label input { margin: 0; padding: 0; } h2 { border-bottom: .5em solid #e5f3ff; color: #333; font: normal 32px/5px serif; margin: 5px 10px; } img, #footer a { border: 0; } input:focus, textarea:focus, label:focus { background: #fff; border: 1px solid #686868; } label { cursor: pointer; } li, dd { margin-bottom: 6px; } p, li, dl, dd, dt { line-height: 140%; } textarea, input, select { background: #f4f4f4; border: 1px solid #b2b2b2; color: #000; font: 13px Verdana, Arial, Helvetica, sans-serif; margin: 1px; padding: 3px; } #uploading { border-style: none; padding: 0; margin-bottom: 16px; height: 18em; width: 100%; } form#upload th { text-align: right; } form#upload #post_content, form#upload #post_title { width: 250px; } form#upload #post_content { height: 50px; } .attpreview { width: 1px; /* hug */ text-align: center; } .alignleft { float: left } .alignright { float: right; } .alternate { background: #f1f1f1; } .anchors { margin: 10px 20px 10px 20px; } .available-theme { width: 30%; margin: 0 1em; float: left; text-align: center; height: 28em; overflow: hidden; } .available-theme a.screenshot { width: 250px; height: 200px; display: block; margin: auto; background: #f1f1f1; border: 1px solid #ccc; margin-bottom: 10px; overflow: hidden; } .available-theme a.screenshot:hover { /* border: 1px solid #666;*/ } .available-theme img { width: 100%; } .checkbox { background: #fff; border: none; margin: 0; padding: 0; } .code { font-family: "Courier New", Courier, monospace; } .commentlist li { border-bottom: 1px solid #ccc; padding: 1em 1em .2em; margin: 0; } .commentlist li li { border-bottom: 0px; padding: 0; } .commentlist p { padding: 0; margin: 0 0 .8em; } .clear { clear: both; height: 2px; } .hidden { display: none; } .navigation { display: block; text-align: center; margin-top: 10px; margin-bottom: 30px; } .post-categories { display: inline; margin: 0; padding: 0; } .post-categories li, #ed_toolbar { display: inline; } .quicktags, .search { background: #ccc; color: #000; font: 12px Georgia, "Times New Roman", Times, serif; } .submit input, .submit input:focus, .button, .button:focus { background: url( images/fade-butt.png ); border: 3px double #999; border-left-color: #ccc; border-top-color: #ccc; color: #333; padding: 0.25em; } .submit input:active, .button:active { background: #f4f4f4; border: 3px double #ccc; border-left-color: #999; border-top-color: #999; } .button, .button:focus { padding: 0.15em; } * html .button { padding: 0; } .submit, .editform th, #postcustomsubmit { text-align: right; } .optiontable { width: 100%; } .optiontable td, .optiontable th { padding: .5em; } .optiontable th { width: 33%; text-align: right; font-size: 1.3em; font-weight: normal; } .unapproved { color: #888; } .unapproved a:link { color: #b9bcff; } .unapproved a:visited { color: #696dff; } .unapproved a:hover { color: #009ef0; } .approve { display: none; } .unapproved .approve { display: inline; } .unapproved .unapprove { display: none; } .updated, .confirm { background: #CFEBF7 url(images/notice.gif) no-repeat 1em; border: 1px solid #2580B2; margin: 1em 5% 10px; padding: 0 1em 0 3em; } .error { background: #FFEFF7; border: 1px solid #c69; margin: 1em 5% 10px; padding: 0 1em 0 1em; } .wrap { background: #fff; border: 1px solid #ccc; clear: both; margin: 15px 5%; padding: 1em; } .narrow { width: 450px; margin: auto; } .narrow p { line-height: 150%; } .wrap h2 { margin: .4em 0 .5em; clear: both; } * html .wrap h2 { margin-top: 1em; } table .vers { text-align: center; } textarea.all-options, input.all-options { width: 250px; } input.disabled, textarea.disabled { background: #ccc; } #adminmenu { background: #83B4D8; border-top: 3px solid #448abd; margin: 0; padding: .2em .2em .3em 2em; } #adminmenu .current, #submenu .current { font-weight: bold; text-decoration: none; } #adminmenu a { color: #000; font-size: 14px; font-weight: normal; margin: 0; padding: 3px 5px; border-bottom: none; } #adminmenu a:hover, #adminmenu a.current { background: #ddeaf4; color: #333; } #adminmenu li, #submenu li { display: inline; line-height: 200%; list-style: none; text-align: center; white-space: nowrap; } #adminmenu a.current { background: #0d324f; border-right: 2px solid #4f96c8; border-top: 1px solid #96c0de; color: #fff; padding-bottom: 8px; } #submenu, #minisub { background: #0d324f; border-bottom: none; margin: 0; padding: 3px 2em 0 3em; } #minisub { height: 6px; } #submenu .current { background: #f9fcfe; border-top: 1px solid #045290; border-right: 2px solid #045290; color: #000; } #submenu a { border: none; color: #fff; font-size: 12px; padding: .3em .4em .4em; } #submenu a:hover { background: #ddeaf4; color: #393939; } #submenu li { line-height: 180%; height: 25px; } #categorydiv input, #poststatusdiv input, #commentstatusdiv input, #pingstatusdiv input { border: none; } #postdiv, #titlediv, #guiddiv { margin: 0 8px 0 0; padding: 0; } #postdivrich { margin: 0; padding: 0; } #content { margin: 0; width: 100%; } #postdivrich #content { padding: 5px; line-height: 140%; } #titlediv input, #guiddiv input { margin: 0; width: 100%; } #currenttheme img { float: left; border: 1px solid #666; margin-right: 1em; margin-bottom: 1.5em; width: 300px; } input.delete:hover { background: #ce0000; color: #fff; } #deletebookmarks:hover { background: #ce0000; color: #fff; } #postdivrich #quicktags { background: #f0f0ee; padding: 0; border: 1px solid #ccc; border-bottom: none; } #postdiv #quicktags { padding-right: 6px; } #postdivrich #quicktags { display: none; } #quicktags #ed_toolbar { padding: 0 2px; } #ed_toolbar input { background: #fff url( images/fade-butt.png ) repeat-x 0 -2px; margin: 3px 2px 2px; } #quicktags #ed_strong { font-weight: bold; } #quicktags #ed_link { color: blue; text-decoration: underline; } #quicktags #ed_del { text-decoration: line-through; } #quicktags #ed_em { font-style: italic; } #quicktags #ed_code { font-family: "Courier New", Courier, mono; margin-bottom: 3px; } #title { font-size: 1.7em; padding: 4px 3px; } #postexcerpt div, #attachmentlinks div { margin-right: 8px; } #attachmentlinks textarea { width: 100%; height: 2.5em; margin-bottom: 6px; } * html #postexcerpt .dbx-toggle-open, * html #postexcerpt .dbx-toggle-open { padding-right: 8px; } #excerpt, .attachmentlinks { margin: 0; height: 4em; width: 100%; } #footer { clear: both; text-align: center; width: 500px; margin: auto; height: 100px; } #footer .docs { padding-top: 19px; line-height: 160%; } #footer .docs a { text-decoration: underline; } #footer .logo { float: left; margin: 0; padding: 0; } #login { position: relative; background: url('images/login-bkg-tile.gif') no-repeat top center; color: #fff; margin: 5em auto 1em; padding: 20px 0 0; width: 425px; _width: 390px; } #login form { background: url('images/login-bkg-bottom.gif') no-repeat bottom center; padding: 0 50px 25px; _width: 325px; _margin: 0 auto; } #login #login_error { background: #0e3350; border: 1px solid #2571ab; color: #ebcd4e; font-size: 11px; font-weight: bold; padding: .6em; width: 310px; margin: 0 50px; text-align: center; } #login p { font-size: 12px; } #login p.message { width: 310px; margin: 0 auto 1em; } #login #login_error a { color: #ebcd4e; border-color: #ebcd4e; } #login #send { color: #fff; text-align: left; font-weight: normal; font-size: 1.1em; _width: 325px; _margin: 0 auto 15px; } #login h1 a { margin: 0 auto; height: 88px; width: 320px; display: block; border-bottom: none; text-indent: -9999px; } #login .message { font-size: 10pt; text-align: center; } #login .register { font-size: 20px; } #login input { padding: 4px; } .login ul, #protected #login .bottom { list-style: none; width: 325px; margin: 0 auto; padding: 0; line-height: 1.2; } .login ul li { font-size: 11px; } .login ul li a { color: #0d324f; border: none; } #login ul li a:hover { color: #fff; } #login .input { font-size: 1.8em; margin-top: 3px; width: 97%; } #login p label { font-size: 11px; } #login #submit { margin: 0; font-size: 15px; } .plugins p { } #login .fullwidth { width: 320px; } #searchform { float: left; margin-right: 1em; width: 18em; } #viewarc { float: left; width: 23em; margin-bottom: 1em; } #viewcat { float: left; width: 30em; margin-bottom: 1em; } #postcustom .updatemeta, #postcustom .deletemeta { margin: auto; } #postcustom table { border: 1px solid #ccc; margin: 0; width: 100%; } #postcustom table input, #postcustom table textarea { width: 95%; } #poststuff { margin-right: 16em; } #save { width: 15em; } #template div { margin-right: 190px; } * html #template div { margin-right: 0; } #template, #template div, #editcat, #addcat { zoom: 1; } #template textarea { font: small 'Courier New', Courier, monospace; width: 97%; } #templateside { float: right; width: 170px; overflow: hidden; } #templateside h3, #postcustom p.submit { margin: 0; } #templateside ol, #templateside ul { list-style: none; margin: .5em; padding: 0; } #user_info { position: absolute; right: 1em; top: 0; color: #fff; font-size: .9em; } #user_info a { color: #fff; } #wphead { background: #14568a; padding: .8em 19em .8em 2em; color: #c3def1; } #wphead a { color: #fff; } #wphead h1 { font-size: 2.5em; font-weight: normal; letter-spacing: -.05em; margin: 0; font-family: Georgia, "Times New Roman", Times, serif; } #wphead h1 span { font-size: .4em; letter-spacing: 0; } #zeitgeist { background: #eee; border: 1px solid #c5c5c5; float: right; font-size: 90%; margin-bottom: .5em; margin-left: 1em; margin-top: .5em; padding: 1em; width: 40%; } #zeitgeist h2, fieldset legend a { border-bottom: none; } * html #zeitgeist h2 { padding-top: 10px; } #zeitgeist h2 { margin-top: .4em; } #zeitgeist h3 { border-bottom: 1px solid #ccc; font-size: 16px; margin: 1em 0 0; } #zeitgeist h3 cite { font-size: 12px; font-style: normal; } #zeitgeist li, #zeitgeist p { margin: .2em 0; } #zeitgeist ul { margin: 0 0 .3em .6em; padding: 0 0 0 .6em; } .active td { background: #BEB; } .active .name { background: #9C9; } .alternate.active td { background: #ADA; } .alternate.active .name { background: #8B8; } #namediv, #emaildiv, #uridiv { float: left; } #ajax-response { padding: .5em; } /* A handy div class for hiding controls. Some browsers will disable them when you set display:none; */ .zerosize { height: 0; width: 0; margin: 0; border: 0; padding: 0; overflow: hidden; position: absolute; } /* Box stuff */ .dbx-clone { position: absolute; visibility: hidden; } .dbx-clone, .dbx-clone .dbx-handle-cursor { cursor: move !important; } .dbx-dummy { display: block; width: 0; height: 0; overflow: hidden; } .dbx-group, .dbx-box, .dbx-handle { position: relative; display: block; } #grabit { width: 188px; } * html #themeselect { padding: 0 3px; height: 22px; } /**************************************************************** avoid padding, margins or borders on dbx-box, to reduce visual discrepancies between it and the clone. overall, dbx-box is best left as visually unstyled as possible *****************************************************************/ .dbx-box { margin: 0; padding: 0; border: none; } /* Can change this */ #moremeta fieldset, #advancedstuff fieldset { margin-bottom: 1em; } #moremeta fieldset div { margin: 2px 0 0 0; padding: 7px; } #moremeta { line-height: 130%; margin-right: 15px; position: absolute; right: 5%; width: 14.5em; } #moremeta select { width: 96%; } #slugdiv input, #passworddiv input, #authordiv select, #thumbdiv input, #parentdiv input { margin-top: .5em; width: 90%; } #moremeta h3, #advancedstuff h3 { padding: 3px; font-weight: normal; font-size: 13px; } #advancedstuff div { margin-top: .5em; } #categorydiv ul { list-style: none; padding: 0; margin-left: 10px; } #categorychecklist { height: 12em; overflow: auto; margin-top: 8px; } #categorychecklist li { margin: 0; padding: 0; } #ajaxcat input { border: 1px solid #ccc; } #your-profile #rich_editing { border: none; background: #fff; } #your-profile fieldset { border: 1px solid #ccc; float: left; width: 40%; padding: .5em 2em 1em; margin: 1em 1em 1em 0; } #your-profile fieldset input { width: 100%; font-size: 20px; padding: 2px; } #your-profile fieldset textarea { width: 100%; padding: 2px; } #your-profile legend { font-family: Georgia, "Times New Roman", Times, serif; font-size: 22px; } /* default box styles */ /* toggle state of inner content area */ .dbx-box-open .dbx-content { display: block; } .dbx-box-closed .dbx-content { display: none; } #moremeta .dbx-content { background: url(images/box-butt.gif) no-repeat bottom right; padding-bottom: 15px; padding-right: 2px; } #moremeta fieldset.dbx-box-closed { background: url(images/box-butt.gif) no-repeat bottom; padding-bottom: 9px; } /* handles */ .dbx-handle { background: #2685af; padding: 6px 1em 2px; font-size: 12px; margin: 0; color: #E3EFF5; } #moremeta .dbx-handle { padding: 6px 1em 2px; font-size: 12px; background: #2685af url(images/box-head.gif) no-repeat right; } #moremeta .dbx-box { background: url(images/box-bg.gif) repeat-y right; } #advancedstuff h3.dbx-handle { margin-left: 7px; margin-bottom: -7px; padding: 6px 1em 0 3px; height: 19px; font-size: 12px; background: #2685af url(images/box-head-right.gif) no-repeat top right; } #advancedstuff div.dbx-h-andle-wrapper { margin: 0 0 0 -7px; background: #fff url(images/box-head-left.gif) no-repeat top left; } #advancedstuff div.dbx-content { margin-left: 8px; background: url(images/box-bg-right.gif) repeat-y right; padding: 10px 10px 15px 0; } #postexcerpt div.dbx-content { margin-right: 0; padding-right: 17px; } #advancedstuff div.dbx-c-ontent-wrapper { margin-left: -7px; margin-right: 0; background: url(images/box-bg-left.gif) repeat-y left; } #advancedstuff fieldset.dbx-box { padding-bottom: 9px; margin-left: 6px; background: url(images/box-butt-right.gif) no-repeat bottom right; } #advancedstuff div.dbx-b-ox-wrapper { background: url(images/box-butt-left.gif) no-repeat bottom left; } #advancedstuff .dbx-box-closed div.dbx-c-ontent-wrapper { padding-bottom: 2px; background: url(images/box-butt-left.gif) no-repeat bottom left; } #advancedstuff .dbx-box { background: url(images/box-butt-right.gif) no-repeat bottom right; } /* handle cursors */ .dbx-handle-cursor { cursor: move; } /* toggle images */ a.dbx-toggle, a.dbx-toggle:visited { display: block; overflow: hidden; background-image: url( images/toggle.gif ); position: absolute; top: 0; right: 0; background-repeat: no-repeat; border: 0; margin: 0; padding: 0; } #moremeta a.dbx-toggle, #moremeta a.dbx-toggle-open:visited { height: 25px; width: 27px; background-position: 0 0; } #moremeta a.dbx-toggle-open, #moremeta a.dbx-toggle-open:visited { height: 25px; width: 27px; background-position: 0 -25px; } #advancedstuff a.dbx-toggle, #advancedstuff a.dbx-toggle-open:visited { height: 22px; width: 22px; top: 3px; right: 5px; background-position: 0 -3px; } #advancedstuff a.dbx-toggle-open, #advancedstuff a.dbx-toggle-open:visited { height: 22px; width: 22px; top: 3px; right: 5px; background-position: 0 -28px; } #categorychecklist { margin-right: 6px; } /* additional clone styles */ .dbx-clone { opacity: 0.8; -moz-opacity: 0.8; -khtml-opacity: 0.8; filter: alpha(opacity=80); } #newcat { width: 120px; margin-right: 5px; } input #catadd { background: #a4a4a4; border-bottom: 1px solid #898989; border-left: 1px solid #bcbcbc; border-right: 1px solid #898989; border-top: 1px solid #bcbcbc; color: #fff; font-size: 10px; padding: 0; margin: 0; font-weight: bold; height: 20px; margin-bottom: 2px; text-align: center; width: 37px; } #howto { font-size: 11px; margin: 0 5px; display: block; } #jaxcat { margin: 0; padding: 0; } #ajax-response.alignleft { margin-left: 2em; } #postdivrich #edButtons { padding-left: 3px; } #postdivrich #content, #postdivrich #content:active { border: 1px solid #ccc; } #edButtons input, #edButtons input:active { margin: 0 2px -1px; } #edButtons input.edButtonFore, #edButtons input.edButtonFore:active { background: #f0f0ee; border-bottom: 1px solid #f0f0ee; } #edButtons input.edButtonBack, #edButtons input.edButtonBack:active { background: #fff url( images/fade-butt.png ) repeat-x 0 15px; border-bottom: 1px solid #ccc; } .page-numbers { padding: 4px 7px; border: 1px solid #fff; margin-right: 3px; } a.page-numbers { border: 1px solid #ccc; } a.page-numbers:hover { border: 1px solid #999; } .page-numbers.current { border: 1px solid #999; font-weight: bold; } .pagenav span { font-weight: bold; margin: 0 6px; } a.view-link { position: absolute; right: 5%; margin-right: 220px; text-decoration:underline; } 1wordpress/wp-admin/.svn/text-base/xfn.js.svn-base function GetElementsWithClassName(elementName, className) { var allElements = document.getElementsByTagName(elementName); var elemColl = new Array(); for (i = 0; i < allElements.length; i++) { if (allElements[i].className == className) { elemColl[elemColl.length] = allElements[i]; } } return elemColl; } function meChecked() { var undefined; var eMe = document.getElementById('me'); if (eMe == undefined) return false; else return eMe.checked; } function upit() { var isMe = meChecked(); //document.getElementById('me').checked; var inputColl = GetElementsWithClassName('input', 'valinp'); var results = document.getElementById('link_rel'); var linkText, linkUrl, inputs = ''; for (i = 0; i < inputColl.length; i++) { inputColl[i].disabled = isMe; inputColl[i].parentNode.className = isMe ? 'disabled' : ''; if (!isMe && inputColl[i].checked && inputColl[i].value != '') { inputs += inputColl[i].value + ' '; } } inputs = inputs.substr(0,inputs.length - 1); if (isMe) inputs='me'; results.value = inputs; } function blurry() { if (!document.getElementById) return; var aInputs = document.getElementsByTagName('input'); for (var i = 0; i < aInputs.length; i++) { aInputs[i].onclick = aInputs[i].onkeyup = upit; } } addLoadEvent(blurry); wordpress/wp-admin/templates.php'.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); $newcontent = stripslashes($_POST['newcontent']); if (is_writeable($real_file)) { $f = @ fopen($real_file, 'w+'); if ( $f ) { fwrite($f, $newcontent); fclose($f); wp_redirect("templates.php?file=$file&a=te"); } else { wp_redirect("templates.php?file=$file&a=err"); } } else { wp_redirect("templates.php?file=$file&a=err"); } exit(); break; default: require_once('./admin-header.php'); if ( ! current_user_can('edit_files') ) wp_die('

    '.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); if (strpos($file, 'wp-config.php') != false) wp_die('

    '.__('The config file cannot be edited or viewed through the web interface. Sorry!').'

    '); update_recently_edited($file); if (!is_file($real_file)) $error = true; if (!$error) { $f = @ fopen($real_file, 'r'); if ( $f ) { if ( filesize($real_file ) > 0 ) { $content = fread($f, filesize($real_file)); $content = htmlspecialchars($content); } else { $content = ''; } } else { $error = true; } } ?>

    ' . sprintf(__('Editing %s'), wp_specialchars($file) ) . ''; } else { echo '

    ' . sprintf(__('Browsing %s'), wp_specialchars($file) ) . '

    '; } ?>

    '; foreach ($recents as $recent) : echo "
  • " . wp_specialchars(get_file_description(basename($recent))) . "
  • "; endforeach; echo ''; endif; ?>

    "; ?>

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; } ?>
     

    writable by the server, e.g. CHMOD 666.') ?>

    #wordpress/wp-admin/theme-editor.php'.__('You do not have sufficient permissions to edit templates for this blog.').'

    '); $newcontent = stripslashes($_POST['newcontent']); $theme = urlencode($theme); if (is_writeable($real_file)) { $f = fopen($real_file, 'w+'); fwrite($f, $newcontent); fclose($f); $location = "theme-editor.php?file=$file&theme=$theme&a=te"; } else { $location = "theme-editor.php?file=$file&theme=$theme"; } $location = wp_kses_no_null($location); $strip = array('%0d', '%0a'); $location = str_replace($strip, '', $location); header("Location: $location"); exit(); break; default: if ( !current_user_can('edit_themes') ) wp_die('

    '.__('You do not have sufficient permissions to edit themes for this blog.').'

    '); require_once('admin-header.php'); update_recently_edited($file); if (!is_file($real_file)) $error = 1; if (!$error && filesize($real_file) > 0) { $f = fopen($real_file, 'r'); $content = fread($f, filesize($real_file)); $content = htmlspecialchars($content); } ?>

    ' . sprintf(__('Editing %s'), $file_show) . ''; } else { echo '

    ' . sprintf(__('Browsing %s'), $file_show) . '

    '; } ?>

    '%s' theme files"), $theme) ?>

    "; ?>

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; } ?>
     
    wordpress/wp-admin/themes.phpX

    View site »'), get_bloginfo('url') . '/'); ?>

    screenshot ) : ?> <?php _e('Current theme preview'); ?>

    title, $ct->version, $ct->author) ; ?>

    description; ?>

    parent_theme) { ?>

    %2$s. The stylesheet files are located in %3$s. %4$s uses templates from %5$s. Changes made to the templates will affect both themes.'), $ct->title, $ct->template_dir, $ct->stylesheet_dir, $ct->title, $ct->parent_theme); ?>

    %2$s.'), $ct->title, $ct->template_dir, $ct->stylesheet_dir); ?>

    name ) continue; $template = $themes[$theme_name]['Template']; $stylesheet = $themes[$theme_name]['Stylesheet']; $title = $themes[$theme_name]['Title']; $version = $themes[$theme_name]['Version']; $description = $themes[$theme_name]['Description']; $author = $themes[$theme_name]['Author']; $screenshot = $themes[$theme_name]['Screenshot']; $stylesheet_dir = $themes[$theme_name]['Stylesheet Dir']; $activate_link = wp_nonce_url("themes.php?action=activate&template=$template&stylesheet=$stylesheet", 'switch-theme_' . $template); ?>

    "; } ?>
    $title $description

    WordPress theme directory. To install a theme you generally just need to upload the theme folder into your wp-content/themes directory. Once a theme is uploaded, you should see it on this page.'); ?>

    #wordpress/wp-admin/update-links.phpget_col("SELECT link_url FROM $wpdb->links"); if ( !$link_uris ) wp_die(__('No links')); $link_uris = urlencode( join( $link_uris, "\n" ) ); $query_string = "uris=$link_uris"; $http_request = "POST /updated-batch/ HTTP/1.0\r\n"; $http_request .= "Host: api.pingomatic.com\r\n"; $http_request .= 'Content-Type: application/x-www-form-urlencoded; charset='.get_option('blog_charset')."\r\n"; $http_request .= 'Content-Length: ' . strlen($query_string) . "\r\n"; $http_request .= 'User-Agent: WordPress/' . $wp_version . "\r\n"; $http_request .= "\r\n"; $http_request .= $query_string; $response = ''; if ( false != ( $fs = @fsockopen('api.pingomatic.com', 80, $errno, $errstr, 5) ) ) { fwrite($fs, $http_request); while ( !feof($fs) ) $response .= fgets($fs, 1160); // One TCP-IP packet fclose($fs); $response = explode("\r\n\r\n", $response, 2); $body = trim( $response[1] ); $body = str_replace(array("\r\n", "\r"), "\n", $body); $returns = explode("\n", $body); foreach ($returns as $return) : $time = $wpdb->escape( substr($return, 0, 19) ); $uri = $wpdb->escape( preg_replace('/(.*?) | (.*?)/', '$2', $return) ); $wpdb->query("UPDATE $wpdb->links SET link_updated = '$time' WHERE link_url = '$uri'"); endforeach; } ?> (wordpress/wp-admin/upgrade-functions.phpcheck_version(); wp_cache_flush(); make_db_current_silent(); populate_options(); populate_roles(); update_option('blogname', $blog_title); update_option('admin_email', $user_email); update_option('blog_public', $public); $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; if ( defined('WP_SITEURL') && '' != WP_SITEURL ) $guessurl = WP_SITEURL; else $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); update_option('siteurl', $guessurl); // If not a public blog, don't ping. if ( ! $public ) update_option('default_pingback_flag', 0); // Create default user. If the user already exists, the user tables are // being shared among blogs. Just set the role in that case. $user_id = username_exists($user_name); if ( !$user_id ) { $random_password = substr(md5(uniqid(microtime())), 0, 6); $user_id = wp_create_user($user_name, $random_password, $user_email); } else { $random_password = __('User already exists. Password inherited.'); } $user = new WP_User($user_id); $user->set_role('administrator'); wp_install_defaults($user_id); $wp_rewrite->flush_rules(); wp_new_blog_notification($blog_title, $guessurl, $user_id, $random_password); wp_cache_flush(); return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $random_password); } endif; if ( !function_exists('wp_install_defaults') ) : function wp_install_defaults($user_id) { global $wpdb; // Default category $wpdb->insert("INSERT INTO $wpdb->categories (cat_name, category_nicename, category_count, category_description) VALUES ('".$wpdb->escape(__('Uncategorized'))."', '".sanitize_title(__('Uncategorized'))."', 1, '')",$wpdb->categories, "cat_ID"); $uncat_ID = $wpdb->insert_id; // Default link category $wpdb->insert("INSERT INTO $wpdb->categories (cat_name, category_nicename, link_count, category_description) VALUES ('".$wpdb->escape(__('Blogroll'))."', '".sanitize_title(__('Blogroll'))."', 7, '')",$wpdb->categories, "cat_ID"); $blogroll_ID = $wpdb->insert_id; // Now drop in some default links $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://inphotos.org/', 'Donncha', 0, 'http://inphotos.org/feed/', '')", $wpdb->links, "link_id" ); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://zengun.org/weblog/', 'Michel', 0, 'http://zengun.org/weblog/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id,$blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://boren.nu/', 'Ryan', 0, 'http://boren.nu/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://photomatt.net/', 'Matt', 0, 'http://xml.photomatt.net/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id,$blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://zed1.com/journalized/', 'Mike', 0, 'http://zed1.com/journalized/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id,$blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://www.alexking.org/', 'Alex', 0, 'http://www.alexking.org/blog/wp-rss2.php', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); $wpdb->insert("INSERT INTO $wpdb->links (link_url, link_name, link_category, link_rss, link_notes) VALUES ('http://dougal.gunters.org/', 'Dougal', 0, 'http://dougal.gunters.org/feed/', '')", $wpdb->links, "link_id"); $wpdb->query( "INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES ($wpdb->insert_id, $blogroll_ID)" ); // First post $now = date('Y-m-d H:i:s'); $now_gmt = gmdate('Y-m-d H:i:s'); $wpdb->insert("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, comment_count, to_ping, pinged, post_content_filtered) VALUES ($user_id, '$now', '$now_gmt', '".$wpdb->escape(__('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'))."', '', '".$wpdb->escape(__('Hello world!'))."', '0', '".$wpdb->escape(__('hello-world'))."', '$now', '$now_gmt', '1', '', '', '')",$wpdb->posts,"ID"); $post_ident = $wpdb->insert_id; $wpdb->query( "INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES ($post_ident, $uncat_ID)" ); // Default comment $wpdb->query("INSERT INTO $wpdb->comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_date, comment_date_gmt, comment_content) VALUES ($post_ident, '".$wpdb->escape(__('Mr WordPress'))."', '', 'http://wordpress.org/', '$now', '$now_gmt', '".$wpdb->escape(__('Hi, this is a comment.
    To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.'))."')"); // First Page $wpdb->query("INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_excerpt, post_title, post_category, post_name, post_modified, post_modified_gmt, post_status, post_type, to_ping, pinged, post_content_filtered) VALUES ($user_id, '$now', '$now_gmt', '".$wpdb->escape(__('This is an example of a WordPress page, you could edit this to put information about yourself or your site so readers know where you are coming from. You can create as many pages like this one or sub-pages as you like and manage all of your content inside of WordPress.'))."', '', '".$wpdb->escape(__('About'))."', 0, '".$wpdb->escape(__('about'))."', '$now', '$now_gmt', 'publish', 'page', '', '', '')"); } endif; if ( !function_exists('wp_new_blog_notification') ) : function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { $user = new WP_User($user_id); $email = $user->user_email; $name = $user->user_login; $message_headers = 'From: "' . $blog_title . '" '; $message = sprintf(__("Your new WordPress blog has been successfully set up at: %1\$s You can log in to the administrator account with the following information: Username: %2\$s Password: %3\$s We hope you enjoy your new weblog. Thanks! --The WordPress Team http://wordpress.org/ "), $blog_url, $name, $password); @wp_mail($email, __('New WordPress Blog'), $message, $message_headers); } endif; if ( !function_exists('wp_upgrade') ) : function wp_upgrade() { global $wp_current_db_version, $wp_db_version; $wp_current_db_version = __get_option('db_version'); // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; wp_check_mysql_version(); wp_cache_flush(); make_db_current_silent(); upgrade_all(); wp_cache_flush(); } endif; // Functions to be called in install and upgrade scripts function upgrade_all() { global $wp_current_db_version, $wp_db_version, $wp_rewrite; $wp_current_db_version = __get_option('db_version'); // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; // If the version is not set in the DB, try to guess the version. if ( empty($wp_current_db_version) ) { $wp_current_db_version = 0; // If the template option exists, we have 1.5. $template = __get_option('template'); if ( !empty($template) ) $wp_current_db_version = 2541; } populate_options(); if ( $wp_current_db_version < 2541 ) { upgrade_100(); upgrade_101(); upgrade_110(); upgrade_130(); } maybe_disable_automattic_widgets(); if ( $wp_current_db_version < 3308 ) upgrade_160(); if ( $wp_current_db_version < 4772 ) upgrade_210(); if ( $wp_current_db_version < 4351 ) upgrade_old_slugs(); $wp_rewrite->flush_rules(); update_option('db_version', $wp_db_version); } function upgrade_100() { global $wpdb; // Get the title and ID of every post, post_name to check if it already has a value $posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''"); if ($posts) { foreach($posts as $post) { if ('' == $post->post_name) { $newtitle = sanitize_title($post->post_title); $wpdb->query("UPDATE $wpdb->posts SET post_name = '$newtitle' WHERE ID = " . $post->ID); } } } $categories = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories"); foreach ($categories as $category) { if ('' == $category->category_nicename) { $newtitle = sanitize_title($category->cat_name); $wpdb->query("UPDATE $wpdb->categories SET category_nicename = '$newtitle' WHERE cat_ID = " . $category->cat_ID); } } $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') WHERE option_name LIKE 'links_rating_image%' AND option_value LIKE 'wp-links/links-images/%'"); $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); if ($done_ids) : foreach ($done_ids as $done_id) : $done_posts[] = $done_id->post_id; endforeach; $catwhere = ' AND ID NOT IN (' . implode(',', $done_posts) . ')'; else: $catwhere = ''; endif; $allposts = $wpdb->get_results("SELECT ID, post_category FROM $wpdb->posts WHERE post_category <> 0 $catwhere"); if ($allposts) : foreach ($allposts as $post) { // Check to see if it's already been imported $cat = $wpdb->get_row("SELECT * FROM $wpdb->post2cat WHERE post_id = " . $post->ID . " AND category_id = " . $post->post_category); if (!$cat && 0 != $post->post_category) { // If there's no result $wpdb->query("INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES (" . $post->ID. ", " . $post->post_category . ")"); } } endif; } function upgrade_101() { global $wpdb; // Clean up indices, add a few add_clean_index($wpdb->posts, 'post_name'); add_clean_index($wpdb->posts, 'post_status'); add_clean_index($wpdb->categories, 'category_nicename'); add_clean_index($wpdb->comments, 'comment_approved'); add_clean_index($wpdb->comments, 'comment_post_ID'); add_clean_index($wpdb->links , 'link_category'); add_clean_index($wpdb->links , 'link_visible'); } function upgrade_110() { global $wpdb; // Set user_nicename. $users = $wpdb->get_results("SELECT ID, user_nickname, user_nicename FROM $wpdb->users"); foreach ($users as $user) { if ('' == $user->user_nicename) { $newname = sanitize_title($user->user_nickname); $wpdb->query("UPDATE $wpdb->users SET user_nicename = '$newname' WHERE ID = " . $user->ID); } } $users = $wpdb->get_results("SELECT ID, user_pass from $wpdb->users"); foreach ($users as $row) { if (!preg_match('/^[A-Fa-f0-9]{32}$/', $row->user_pass)) { $wpdb->query(" UPDATE $wpdb->users SET user_pass = MD5(" . $row->user_pass . ") WHERE ID = " . $row->ID ); } } // Get the GMT offset, we'll use that later on $all_options = get_alloptions_110(); $time_difference = $all_options->time_difference; $server_time = time()+date('Z'); $weblogger_time = $server_time + $time_difference*3600; $gmt_time = time(); $diff_gmt_server = ($gmt_time - $server_time) / 3600; $diff_weblogger_server = ($weblogger_time - $server_time) / 3600; $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; $gmt_offset = -$diff_gmt_weblogger; // Add a gmt_offset option, with value $gmt_offset add_option('gmt_offset', $gmt_offset); // Check if we already set the GMT fields (if we did, then // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' // I just slapped myself silly for not thinking about it earlier $got_gmt_fields = ($wpdb->get_var("SELECT MAX(post_date_gmt) FROM $wpdb->posts") == '1900-01-01 00:00:00') ? false : true; if (!$got_gmt_fields) { // Add or substract time to all dates, to get GMT dates $add_hours = intval($diff_gmt_weblogger); $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); $full_minutes = $add_hours * 60 + $add_minutes; $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = dateadd('minute', " . $full_minutes . " , stringdate(post_date))"); $wpdb->query("UPDATE $wpdb->posts SET post_modified = post_date"); $wpdb->query("UPDATE $wpdb->posts SET post_modified_gmt = dateadd('minute', " . $full_minutes . " , stringdate( post_modified) ) WHERE post_modified <> '1900-01-01 00:00:00'"); $wpdb->query("UPDATE $wpdb->comments SET comment_date_gmt = dateadd('minute', " . $full_minutes . " , stringdate( comment_date) )"); $wpdb->query("UPDATE $wpdb->users SET user_registered = dateadd('minute', " . $full_minutes . " , stringdate( user_registered) )"); } } function upgrade_130() { global $wpdb; // Remove extraneous backslashes. $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts"); if ($posts) { foreach($posts as $post) { $post_content = addslashes(deslash($post->post_content)); $post_title = addslashes(deslash($post->post_title)); $post_excerpt = addslashes(deslash($post->post_excerpt)); if ( empty($post->guid) ) $guid = get_permalink($post->ID); else $guid = $post->guid; $wpdb->query("UPDATE $wpdb->posts SET post_title = '$post_title', post_content = '$post_content', post_excerpt = '$post_excerpt', guid = '$guid' WHERE ID = " . $post->ID); } } // Remove extraneous backslashes. $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments"); if ($comments) { foreach($comments as $comment) { $comment_content = addslashes(deslash($comment->comment_content)); $comment_author = addslashes(deslash($comment->comment_author)); $wpdb->query("UPDATE $wpdb->comments SET comment_content = '$comment_content', comment_author = '$comment_author' WHERE comment_ID = " . $comment->comment_ID); } } // Remove extraneous backslashes. $links = $wpdb->get_results("SELECT link_id, link_name, link_description FROM $wpdb->links"); if ($links) { foreach($links as $link) { $link_name = addslashes(deslash($link->link_name)); $link_description = addslashes(deslash($link->link_description)); $wpdb->query("UPDATE $wpdb->links SET link_name = '$link_name', link_description = '$link_description' WHERE link_id = " . $link->link_id); } } // The "paged" option for what_to_show is no more. if ($wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'what_to_show'") == 'paged') { $wpdb->query("UPDATE $wpdb->options SET option_value = 'posts' WHERE option_name = 'what_to_show'"); } $active_plugins = __get_option('active_plugins'); // If plugins are not stored in an array, they're stored in the old // newline separated format. Convert to new format. if ( !is_array( $active_plugins ) ) { $active_plugins = explode("\n", trim($active_plugins)); update_option('active_plugins', $active_plugins); } // Obsolete tables $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optionvalues'); $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiontypes'); $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroups'); $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroup_options'); // Update comments table to use comment_type $wpdb->query("UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); $wpdb->query("UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); // Some versions have multiple duplicate option_name rows with the same values $options = $wpdb->get_results("SELECT option_name, COUNT(option_name) AS dupes FROM $wpdb->options GROUP BY option_name"); foreach ( $options as $option ) { if ( 1 != $option->dupes ) { // Could this be done in the query? $limit = $option->dupes - 1; $dupe_ids = $wpdb->get_col("SELECT option_id FROM $wpdb->options WHERE option_name = '$option->option_name'"); $dupe_ids = join($dupe_ids, ','); $wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)"); } } make_site_theme(); } function upgrade_160() { global $wpdb, $wp_current_db_version; populate_roles_160(); $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); foreach ( $users as $user ) : if ( !empty( $user->user_firstname ) ) update_usermeta( $user->ID, 'first_name', $wpdb->escape($user->user_firstname) ); if ( !empty( $user->user_lastname ) ) update_usermeta( $user->ID, 'last_name', $wpdb->escape($user->user_lastname) ); if ( !empty( $user->user_nickname ) ) update_usermeta( $user->ID, 'nickname', $wpdb->escape($user->user_nickname) ); if ( !empty( $user->user_level ) ) update_usermeta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); if ( !empty( $user->user_icq ) ) update_usermeta( $user->ID, 'icq', $wpdb->escape($user->user_icq) ); if ( !empty( $user->user_aim ) ) update_usermeta( $user->ID, 'aim', $wpdb->escape($user->user_aim) ); if ( !empty( $user->user_msn ) ) update_usermeta( $user->ID, 'msn', $wpdb->escape($user->user_msn) ); if ( !empty( $user->user_yim ) ) update_usermeta( $user->ID, 'yim', $wpdb->escape($user->user_icq) ); if ( !empty( $user->user_description ) ) update_usermeta( $user->ID, 'description', $wpdb->escape($user->user_description) ); if ( isset( $user->user_idmode ) ): $idmode = $user->user_idmode; if ($idmode == 'nickname') $id = $user->user_nickname; if ($idmode == 'login') $id = $user->user_login; if ($idmode == 'firstname') $id = $user->user_firstname; if ($idmode == 'lastname') $id = $user->user_lastname; if ($idmode == 'namefl') $id = $user->user_firstname.' '.$user->user_lastname; if ($idmode == 'namelf') $id = $user->user_lastname.' '.$user->user_firstname; if (!$idmode) $id = $user->user_nickname; $id = $wpdb->escape( $id ); $wpdb->query("UPDATE $wpdb->users SET display_name = '$id' WHERE ID = " . $user->ID); endif; // FIXME: RESET_CAPS is temporary code to reset roles and caps if flag is set. $caps = get_usermeta( $user->ID, $wpdb->prefix . 'capabilities'); if ( empty($caps) || defined('RESET_CAPS') ) { $level = get_usermeta($user->ID, $wpdb->prefix . 'user_level'); $role = translate_level_to_role($level); update_usermeta( $user->ID, $wpdb->prefix . 'capabilities', array($role => true) ); } endforeach; $old_user_fields = array( 'user_firstname', 'user_lastname', 'user_icq', 'user_aim', 'user_msn', 'user_yim', 'user_idmode', 'user_ip', 'user_domain', 'user_browser', 'user_description', 'user_nickname', 'user_level' ); $wpdb->hide_errors(); foreach ( $old_user_fields as $old ) $wpdb->query("ALTER TABLE $wpdb->users DROP $old"); $wpdb->show_errors(); if ( 0 == $wpdb->get_var("SELECT SUM(category_count) FROM $wpdb->categories") ) { // Create counts $categories = $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories"); foreach ( $categories as $cat_id ) { $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID = " . $wpdb->post2cat.post_id . " AND post_status='publish' AND category_id = " . $cat_id); $wpdb->query("UPDATE $wpdb->categories SET category_count = '$count' WHERE cat_ID = " . $cat_id); } } // populate comment_count field of posts table $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); if( is_array( $comments ) ) { foreach ($comments as $comment) { $wpdb->query( "UPDATE $wpdb->posts SET comment_count = " . $comment->c ." WHERE ID = " . $comment->comment_post_ID ); } } // Some alpha versions used a post status of object instead of attachment and put // the mime type in post_type instead of post_mime_type. if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { $objects = $wpdb->get_results("SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'"); foreach ($objects as $object) { $wpdb->query("UPDATE $wpdb->posts SET post_status = 'attachment', post_mime_type = '$object->post_type', post_type = '' WHERE ID = $object->ID"); $meta = get_post_meta($object->ID, 'imagedata', true); if ( ! empty($meta['file']) ) update_attached_file( $object->ID, $meta['file'] ); } } } function upgrade_210() { global $wpdb, $wp_current_db_version; if ( $wp_current_db_version < 3506 ) { // Update status and type. $posts = $wpdb->get_results("SELECT ID, post_status FROM $wpdb->posts"); if ( ! empty($posts) ) foreach ($posts as $post) { $status = $post->post_status; $type = 'post'; if ( 'static' == $status ) { $status = 'publish'; $type = 'page'; } else if ( 'attachment' == $status ) { $status = 'inherit'; $type = 'attachment'; } $wpdb->query("UPDATE $wpdb->posts SET post_status = '$status', post_type = '$type' WHERE ID = " . $post->ID); } } if ( $wp_current_db_version < 3845 ) { populate_roles_210(); } if ( $wp_current_db_version < 3531 ) { // Give future posts a post_status of future. $now = gmdate('Y-m-d H:i:59'); $wpdb->query ("UPDATE $wpdb->posts SET post_status = 'future' WHERE post_status = 'publish' AND post_date_gmt > '$now'"); $posts = $wpdb->get_results("SELECT ID, post_date FROM $wpdb->posts WHERE post_status ='future'"); if ( !empty($posts) ) foreach ( $posts as $post ) wp_schedule_single_event(mysql2date('U', $post->post_date), 'publish_future_post', array($post->ID)); } if ( $wp_current_db_version < 3570 ) { // Create categories for link categories if a category with the same // name doesn't exist. Create a map of link cat IDs to cat IDs. $link_cat_id_map = array(); $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM " . $wpdb->prefix . 'linkcategories'); foreach ( $link_cats as $link_cat) { if ( $cat_id = category_exists($link_cat->cat_name) ) { $link_cat_id_map[$link_cat->cat_id] = $cat_id; $default_link_cat = $cat_id; } else { $link_cat_id_map[$link_cat->cat_id] = wp_create_category($link_cat->cat_name); $default_link_cat = $link_cat_id_map[$link_cat->cat_id]; } } // Associate links to cats. $links = $wpdb->get_results("SELECT link_id, link_category FROM $wpdb->links"); if ( !empty($links) ) foreach ( $links as $link ) { if ( 0 == $link->link_category ) continue; if ( ! isset($link_cat_id_map[$link->link_category]) ) continue; $link_cat = $link_cat_id_map[$link->link_category]; $cat = $wpdb->get_row("SELECT * FROM $wpdb->link2cat WHERE link_id = " . $link->link_id . " AND category_id = " . $link_cat); if ( !$cat ) { $wpdb->query("INSERT INTO $wpdb->link2cat (link_id, category_id) VALUES (" . $link->link_id . "," . $link_cat . ")"); } } // Set default to the last category we grabbed during the upgrade loop. update_option('default_link_category', $default_link_cat); // Count links per category. if ( 0 == $wpdb->get_var("SELECT SUM(link_count) FROM $wpdb->categories") ) { $categories = $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories"); foreach ( $categories as $cat_id ) { $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->link2cat, $wpdb->links WHERE $wpdb->links.link_id = " . $wpdb->link2cat.link_id . " AND category_id = " . $cat_id); $wpdb->query("UPDATE $wpdb->categories SET link_count = " .$count. " WHERE cat_ID = ". $cat_id); } } } if ( $wp_current_db_version < 4772 ) { // Obsolete linkcategories table $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories'); } } function upgrade_old_slugs() { // upgrade people who were using the Redirect Old Slugs plugin global $wpdb; $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); } // The functions we use to actually do stuff // General function maybe_create_table($table_name, $create_ddl) { global $wpdb; foreach ($wpdb->get_tables() as $table ) { if ($table == $table_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_tables() as $table ) { if ($table == $table_name) { return true; } } return false; } function drop_index($table, $index) { global $wpdb; $wpdb->hide_errors(); $wpdb->query("ALTER TABLE $table DROP INDEX $index"); // Now we need to take out all the extra ones we may have created for ($i = 0; $i < 25; $i++) { $wpdb->query("ALTER TABLE $table DROP INDEX {$index}_$i"); } $wpdb->show_errors(); return true; } function add_clean_index($table, $index) { global $wpdb; drop_index($table, $index); $wpdb->query("ALTER TABLE $table ADD INDEX ( $index )"); return true; } /** ** maybe_add_column() ** Add column to db table if it doesn't exist. ** Returns: true if already exists or on successful completion ** false on error */ function maybe_add_column($table_name, $column_name, $create_ddl) { global $wpdb, $debug; foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { if ($debug) echo("checking $column == $column_name
    "); if ($column == $column_name) { return true; } } //didn't find it try to create it. $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { if ($column == $column_name) { return true; } } return false; } // get_alloptions as it was for 1.2. function get_alloptions_110() { global $wpdb; if ($options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options")) { foreach ($options as $option) { // "When trying to design a foolproof system, // never underestimate the ingenuity of the fools :)" -- Dougal if ('siteurl' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ('home' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ('category_base' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); $all_options->{$option->option_name} = stripslashes($option->option_value); } } return $all_options; } // Version of get_option that is private to install/upgrade. function __get_option($setting) { global $wpdb; if ( $setting == 'home' && defined( 'WP_HOME' ) ) { return preg_replace( '|/+$|', '', constant( 'WP_HOME' ) ); } if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) { return preg_replace( '|/+$|', '', constant( 'WP_SITEURL' ) ); } $option = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = '$setting'"); if ( 'home' == $setting && '' == $option ) return __get_option('siteurl'); if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) $option = preg_replace('|/+$|', '', $option); @ $kellogs = unserialize($option); if ($kellogs != FALSE) return $kellogs; else return $option; } function deslash($content) { // Note: \\\ inside a regex denotes a single backslash. // Replace one or more backslashes followed by a single quote with // a single quote. $content = preg_replace("/\\\+'/", "'", $content); // Replace one or more backslashes followed by a double quote with // a double quote. $content = preg_replace('/\\\+"/', '"', $content); // Replace one or more backslashes with one backslash. $content = preg_replace("/\\\+/", "\\", $content); return $content; } function dbDelta($queries, $execute = true) { global $wpdb; // Seperate individual queries into an array if( !is_array($queries) ) { $queries = explode( ';', $queries ); if('' == $queries[count($queries) - 1]) array_pop($queries); } $cqueries = array(); // Creation Queries $iqueries = array(); // Insertion Queries $for_update = array(); // Create a tablename index for an array ($cqueries) of queries foreach($queries as $qry) { if(preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { $cqueries[strtolower($matches[1])] = $qry; $for_update[$matches[1]] = 'Created table '.$matches[1]; } else if(preg_match("|CREATE DATABASE ([^ ]*)|", $qry, $matches)) { array_unshift($cqueries, $qry); } else if(preg_match("|INSERT INTO ([^ ]*)|", $qry, $matches)) { $iqueries[] = $qry; } else if(preg_match("|UPDATE ([^ ]*)|", $qry, $matches)) { $iqueries[] = $qry; } else { // Unrecognized query type } } // Check to see which tables and fields exist if($tables = $wpdb->get_tables() ) { // For every table in the database foreach($tables as $table) { // If a table query exists for the database table... if( array_key_exists(strtolower($table), $cqueries) ) { // Clear the field and index arrays unset($cfields); unset($indices); // Get all of the field names in the query from between the parens preg_match("|\((.*)\)|ms", $cqueries[strtolower($table)], $match2); $qryline = trim($match2[1]); // Separate field lines into an array $flds = explode("\n", $qryline); //echo "
    \n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."

    "; // For every field line specified in the query foreach($flds as $fld) { // Extract the field name preg_match("|^([^ ]*)|", trim($fld), $fvals); $fieldname = $fvals[1]; // Verify the found field name $validfield = true; switch(strtolower($fieldname)) { case '': case 'primary': case 'index': case 'fulltext': case 'unique': case 'key': $validfield = false; $indices[] = trim(trim($fld), ", \n"); break; } $fld = trim($fld); // If it's a valid field, add it to the field array if($validfield) { $cfields[strtolower($fieldname)] = trim($fld, ", \n"); } } // Fetch the table column structure from the database $tablefields = $wpdb->get_results("DESCRIBE {$table};"); // For every field in the table foreach($tablefields as $tablefield) { // If the table field exists in the field array... if(array_key_exists(strtolower($tablefield->Field), $cfields)) { // Get the field type from the query preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches); $fieldtype = $matches[1]; // Is actual field type different from the field type in query? if($tablefield->Type != $fieldtype) { // Add a query to change the column type $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)]; $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}"; } // Get the default value from the array //echo "{$cfields[strtolower($tablefield->Field)]}
    "; if(preg_match("| DEFAULT '(.*)'|i", $cfields[strtolower($tablefield->Field)], $matches)) { $default_value = $matches[1]; if($tablefield->Default != $default_value) { // Add a query to change the column's default value $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'"; $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}"; } } // Remove the field from the array (so it's not added) unset($cfields[strtolower($tablefield->Field)]); } else { // This field exists in the table, but not in the creation queries? } } // For every remaining field specified for the table foreach($cfields as $fieldname => $fielddef) { // Push a query line into $cqueries that adds the field to that table $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef"; $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname; } // Index stuff goes here // Fetch the table index structure from the database $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};"); if($tableindices) { // Clear the index array unset($index_ary); // For every index in the table foreach($tableindices as $tableindex) { // Add the index to the index data array $keyname = $tableindex->Key_name; $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; } // For each actual index in the index array foreach($index_ary as $index_name => $index_data) { // Build a create string to compare to the query $index_string = ''; if($index_name == 'PRIMARY') { $index_string .= 'PRIMARY '; } else if($index_data['unique']) { $index_string .= 'UNIQUE '; } $index_string .= 'KEY '; if($index_name != 'PRIMARY') { $index_string .= $index_name; } $index_columns = ''; // For each column in the index foreach($index_data['columns'] as $column_data) { if($index_columns != '') $index_columns .= ','; // Add the field to the column list string $index_columns .= $column_data['fieldname']; if($column_data['subpart'] != '') { $index_columns .= '('.$column_data['subpart'].')'; } } // Add the column list to the index create string $index_string .= ' ('.$index_columns.')'; if(!(($aindex = array_search($index_string, $indices)) == false)) { unset($indices[$aindex]); //echo "
    {$table}:
    Found index:".$index_string."
    \n"; } //else echo "
    {$table}:
    Did not find index:".$index_string."
    ".print_r($indices, true)."
    \n"; } } // For every remaining index specified for the table foreach($indices as $index) { // Push a query line into $cqueries that adds the index to that table $cqueries[] = "ALTER TABLE {$table} ADD $index"; $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index; } // Remove the original table creation query from processing unset($cqueries[strtolower($table)]); unset($for_update[strtolower($table)]); } else { // This table exists in the database, but not in the creation queries? } } } $allqueries = array_merge($cqueries, $iqueries); if($execute) { foreach($allqueries as $query) { //echo "
    ".print_r($query, true)."
    \n"; $wpdb->query($query); } } return $for_update; } function make_db_current() { global $wp_queries; $alterations = dbDelta($wp_queries); echo "
      \n"; foreach($alterations as $alteration) echo "
    1. $alteration
    2. \n"; echo "
    \n"; } function make_db_current_silent() { global $wp_queries; $alterations = dbDelta($wp_queries); } function make_site_theme_from_oldschool($theme_name, $template) { $home_path = get_home_path(); $site_dir = ABSPATH . "wp-content/themes/$template"; if (! file_exists("$home_path/index.php")) return false; // Copy files from the old locations to the site theme. // TODO: This does not copy arbitarary include dependencies. Only the // standard WP files are copied. $files = array('index.php' => 'index.php', 'wp-layout.css' => 'style.css', 'wp-comments.php' => 'comments.php', 'wp-comments-popup.php' => 'comments-popup.php'); foreach ($files as $oldfile => $newfile) { if ($oldfile == 'index.php') $oldpath = $home_path; else $oldpath = ABSPATH; if ($oldfile == 'index.php') { // Check to make sure it's not a new index $index = implode('', file("$oldpath/$oldfile")); if (strpos($index, 'WP_USE_THEMES') != false) { if (! @copy(ABSPATH . 'wp-content/themes/default/index.php', "$site_dir/$newfile")) return false; continue; // Don't copy anything } } if (! @copy("$oldpath/$oldfile", "$site_dir/$newfile")) return false; chmod("$site_dir/$newfile", 0777); // Update the blog header include in each file. $lines = explode("\n", implode('', file("$site_dir/$newfile"))); if ($lines) { $f = fopen("$site_dir/$newfile", 'w'); foreach ($lines as $line) { if (preg_match('/require.*wp-blog-header/', $line)) $line = '//' . $line; // Update stylesheet references. $line = str_replace("/wp-layout.css", "", $line); // Update comments template inclusion. $line = str_replace("", "", $line); fwrite($f, "{$line}\n"); } fclose($f); } } // Add a theme header. $header = "/*\nTheme Name: $theme_name\nTheme URI: " . __get_option('siteurl') . "\nDescription: A theme automatically created by the upgrade.\nVersion: 1.0\nAuthor: Moi\n*/\n"; $stylelines = file_get_contents("$site_dir/style.css"); if ($stylelines) { $f = fopen("$site_dir/style.css", 'w'); fwrite($f, $header); fwrite($f, $stylelines); fclose($f); } return true; } function make_site_theme_from_default($theme_name, $template) { $site_dir = ABSPATH . "wp-content/themes/$template"; $default_dir = ABSPATH . 'wp-content/themes/default'; // Copy files from the default theme to the site theme. //$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css'); $theme_dir = @ dir("$default_dir"); if ($theme_dir) { while(($theme_file = $theme_dir->read()) != false) { if (is_dir("$default_dir/$theme_file")) continue; if (! @copy("$default_dir/$theme_file", "$site_dir/$theme_file")) return; chmod("$site_dir/$theme_file", 0777); } } // Rewrite the theme header. $stylelines = explode("\n", implode('', file("$site_dir/style.css"))); if ($stylelines) { $f = fopen("$site_dir/style.css", 'w'); foreach ($stylelines as $line) { if (strpos($line, 'Theme Name:') != false) $line = 'Theme Name: ' . $theme_name; elseif (strpos($line, 'Theme URI:') != false) $line = 'Theme URI: ' . __get_option('url'); elseif (strpos($line, 'Description:') != false) $line = 'Description: Your theme.'; elseif (strpos($line, 'Version:') != false) $line = 'Version: 1'; elseif (strpos($line, 'Author:') != false) $line = 'Author: You'; fwrite($f, $line . "\n"); } fclose($f); } // Copy the images. umask(0); if (! mkdir("$site_dir/images", 0777)) { return false; } $images_dir = @ dir("$default_dir/images"); if ($images_dir) { while(($image = $images_dir->read()) != false) { if (is_dir("$default_dir/images/$image")) continue; if (! @copy("$default_dir/images/$image", "$site_dir/images/$image")) return; chmod("$site_dir/images/$image", 0777); } } } // Create a site theme from the default theme. function make_site_theme() { // Name the theme after the blog. $theme_name = __get_option('blogname'); $template = sanitize_title($theme_name); $site_dir = ABSPATH . "wp-content/themes/$template"; // If the theme already exists, nothing to do. if ( is_dir($site_dir)) { return false; } // We must be able to write to the themes dir. if (! is_writable(ABSPATH . "wp-content/themes")) { return false; } umask(0); if (! mkdir($site_dir, 0777)) { return false; } if (file_exists(ABSPATH . 'wp-layout.css')) { if (! make_site_theme_from_oldschool($theme_name, $template)) { // TODO: rm -rf the site theme directory. return false; } } else { if (! make_site_theme_from_default($theme_name, $template)) // TODO: rm -rf the site theme directory. return false; } // Make the new site theme active. $current_template = __get_option('template'); if ($current_template == 'default') { update_option('template', $template); update_option('stylesheet', $template); } return $template; } function translate_level_to_role($level) { switch ($level) { case 10: case 9: case 8: return 'administrator'; case 7: case 6: case 5: return 'editor'; case 4: case 3: case 2: return 'author'; case 1: return 'contributor'; case 0: return 'subscriber'; } } function wp_check_mysql_version() { global $wp_version; // Make sure the server has MySQL 4.0 $mysql_version = preg_replace('|[^0-9\.]|', '', @mysql_get_server_info()); if ( version_compare($mysql_version, '4.0.0', '<') ) die(sprintf(__('ERROR: WordPress %s requires MySQL 4.0.0 or higher'), $wp_version)); } function maybe_disable_automattic_widgets() { $plugins = __get_option( 'active_plugins' ); foreach ( (array) $plugins as $plugin ) { if ( basename( $plugin ) == 'widgets.php' ) { array_splice( $plugins, array_search( $plugin, $plugins ), 1 ); update_option( 'active_plugins', $plugins ); break; } } } ?>wordpress/wp-admin/upgrade.php wp-config.php file. I need this before we can get started. Need more help? We got it. You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file."); require('../wp-config.php'); timer_start(); require_once(ABSPATH . '/wp-admin/upgrade-functions.php'); if (isset($_GET['step'])) $step = (int) $_GET['step']; else $step = 0; @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); ?> > <?php _e('WordPress › Upgrade'); ?> text_direction) ) : ?>

    WordPress

    %wordpress/wp-admin/upgrade-schema.php:3=') ) { if ( ! empty($wpdb->charset) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; } $wp_queries="CREATE TABLE $wpdb->categories ( cat_ID bigint(20) NOT NULL auto_increment, cat_name varchar(55) NOT NULL default '', category_nicename varchar(200) NOT NULL default '', category_description longtext NOT NULL, category_parent bigint(20) NOT NULL default '0', category_count bigint(20) NOT NULL default '0', link_count bigint(20) NOT NULL default '0', posts_private tinyint(1) NOT NULL default '0', links_private tinyint(1) NOT NULL default '0', PRIMARY KEY (cat_ID), KEY category_nicename (category_nicename) ) $charset_collate; CREATE TABLE $wpdb->comments ( comment_ID bigint(20) unsigned NOT NULL auto_increment, comment_post_ID int(11) NOT NULL default '0', comment_author tinytext NOT NULL, comment_author_email varchar(100) NOT NULL default '', comment_author_url varchar(200) NOT NULL default '', comment_author_IP varchar(100) NOT NULL default '', comment_date datetime NOT NULL default '0000-00-00 00:00:00', comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', comment_content text NOT NULL, comment_karma int(11) NOT NULL default '0', comment_approved enum('0','1','spam') NOT NULL default '1', comment_agent varchar(255) NOT NULL default '', comment_type varchar(20) NOT NULL default '', comment_parent bigint(20) NOT NULL default '0', user_id bigint(20) NOT NULL default '0', PRIMARY KEY (comment_ID), KEY comment_approved (comment_approved), KEY comment_post_ID (comment_post_ID) ) $charset_collate; CREATE TABLE $wpdb->link2cat ( rel_id bigint(20) NOT NULL auto_increment, link_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY link_id (link_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->links ( link_id bigint(20) NOT NULL auto_increment, link_url varchar(255) NOT NULL default '', link_name varchar(255) NOT NULL default '', link_image varchar(255) NOT NULL default '', link_target varchar(25) NOT NULL default '', link_category bigint(20) NOT NULL default '0', link_description varchar(255) NOT NULL default '', link_visible enum('Y','N') NOT NULL default 'Y', link_owner int(11) NOT NULL default '1', link_rating int(11) NOT NULL default '0', link_updated datetime NOT NULL default '0000-00-00 00:00:00', link_rel varchar(255) NOT NULL default '', link_notes mediumtext NOT NULL, link_rss varchar(255) NOT NULL default '', PRIMARY KEY (link_id), KEY link_category (link_category), KEY link_visible (link_visible) ) $charset_collate; CREATE TABLE $wpdb->options ( option_id bigint(20) NOT NULL auto_increment, blog_id int(11) NOT NULL default '0', option_name varchar(64) NOT NULL default '', option_can_override enum('Y','N') NOT NULL default 'Y', option_type int(11) NOT NULL default '1', option_value longtext NOT NULL, option_width int(11) NOT NULL default '20', option_height int(11) NOT NULL default '8', option_description tinytext NOT NULL, option_admin_level int(11) NOT NULL default '1', autoload enum('yes','no') NOT NULL default 'yes', PRIMARY KEY (option_id,blog_id,option_name), KEY option_name (option_name) ) $charset_collate; CREATE TABLE $wpdb->post2cat ( rel_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', category_id bigint(20) NOT NULL default '0', PRIMARY KEY (rel_id), KEY post_id (post_id,category_id) ) $charset_collate; CREATE TABLE $wpdb->postmeta ( meta_id bigint(20) NOT NULL auto_increment, post_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY post_id (post_id), KEY meta_key (meta_key) ) $charset_collate; CREATE TABLE $wpdb->posts ( ID bigint(20) unsigned NOT NULL auto_increment, post_author bigint(20) NOT NULL default '0', post_date datetime NOT NULL default '0000-00-00 00:00:00', post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content longtext NOT NULL, post_title text NOT NULL, post_category int(4) NOT NULL default '0', post_excerpt text NOT NULL, post_status enum('publish','draft','private','static','object','attachment','inherit','future') NOT NULL default 'publish', comment_status enum('open','closed','registered_only') NOT NULL default 'open', ping_status enum('open','closed') NOT NULL default 'open', post_password varchar(20) NOT NULL default '', post_name varchar(200) NOT NULL default '', to_ping text NOT NULL, pinged text NOT NULL, post_modified datetime NOT NULL default '0000-00-00 00:00:00', post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00', post_content_filtered text NOT NULL, post_parent bigint(20) NOT NULL default '0', guid varchar(255) NOT NULL default '', menu_order int(11) NOT NULL default '0', post_type varchar(20) NOT NULL default 'post', post_mime_type varchar(100) NOT NULL default '', comment_count bigint(20) NOT NULL default '0', PRIMARY KEY (ID), KEY post_name (post_name), KEY type_status_date (post_type,post_status,post_date,ID) ) $charset_collate; CREATE TABLE $wpdb->users ( ID bigint(20) unsigned NOT NULL auto_increment, user_login varchar(60) NOT NULL default '', user_pass varchar(64) NOT NULL default '', user_nicename varchar(50) NOT NULL default '', user_email varchar(100) NOT NULL default '', user_url varchar(100) NOT NULL default '', user_registered datetime NOT NULL default '0000-00-00 00:00:00', user_activation_key varchar(60) NOT NULL default '', user_status int(11) NOT NULL default '0', display_name varchar(250) NOT NULL default '', PRIMARY KEY (ID), KEY user_login_key (user_login) ) $charset_collate; CREATE TABLE $wpdb->usermeta ( umeta_id bigint(20) NOT NULL auto_increment, user_id bigint(20) NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (umeta_id), KEY user_id (user_id), KEY meta_key (meta_key) ) $charset_collate;"; function populate_options() { global $wpdb, $wp_db_version; $schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://'; $guessurl = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); add_option('siteurl', $guessurl, __('WordPress web address')); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another WordPress weblog'), __('Short tagline')); add_option('new_users_can_blog', 0); add_option('users_can_register', 0); add_option('admin_email', 'you@example.com'); add_option('start_of_week', 1); add_option('use_balanceTags', 0); add_option('use_smilies', 1); add_option('require_name_email', 1); add_option('comments_notify', 1); add_option('posts_per_rss', 10); add_option('rss_excerpt_length', 50); add_option('rss_use_excerpt', 0); add_option('mailserver_url', 'mail.example.com'); add_option('mailserver_login', 'login@example.com'); add_option('mailserver_pass', 'password'); add_option('mailserver_port', 110); add_option('default_category', 1); add_option('default_comment_status', 'open'); add_option('default_ping_status', 'open'); add_option('default_pingback_flag', 1); add_option('default_post_edit_rows', 10); add_option('posts_per_page', 10); add_option('what_to_show', 'posts'); add_option('date_format', __('F j, Y')); add_option('time_format', __('g:i a')); add_option('links_updated_date_format', __('F j, Y g:i a')); add_option('links_recently_updated_prepend', ''); add_option('links_recently_updated_append', ''); add_option('links_recently_updated_time', 120); add_option('comment_moderation', 0); add_option('moderation_notify', 1); add_option('permalink_structure'); add_option('gzipcompression', 0); add_option('hack_file', 0); add_option('blog_charset', 'UTF-8'); add_option('moderation_keys'); add_option('active_plugins'); add_option('home', $guessurl); // in case it is set, but blank, update "home" if ( !__get_option('home') ) update_option('home', $guessurl); add_option('category_base'); add_option('ping_sites', 'http://rpc.pingomatic.com/'); add_option('advanced_edit', 0); add_option('comment_max_links', 2); add_option('gmt_offset', date('Z') / 3600); // 1.5 add_option('default_email_category', 1, __('Posts by email go to this category')); add_option('recently_edited'); add_option('use_linksupdate', 0); add_option('template', 'default'); add_option('stylesheet', 'default'); add_option('comment_whitelist', 1); add_option('page_uris'); add_option('blacklist_keys'); add_option('comment_registration', 0); add_option('rss_language', 'en'); add_option('html_type', 'text/html'); // 1.5.1 add_option('use_trackback', 0); // 2.0 add_option('default_role', 'subscriber'); add_option('db_version', $wp_db_version); // 2.0.1 if ( ini_get('safe_mode') ) { // Safe mode screws up mkdir(), so we must use a flat structure. add_option('uploads_use_yearmonth_folders', 0); add_option('upload_path', 'wp-content'); } else { add_option('uploads_use_yearmonth_folders', 1); add_option('upload_path', 'wp-content/uploads'); } // 2.0.3 add_option('secret', md5(uniqid(microtime()))); // 2.1 add_option('blog_public', '1'); add_option('default_link_category', 2); add_option('show_on_front', 'posts'); // Delete unused options $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing'); foreach ($unusedoptions as $option) : delete_option($option); endforeach; // Set up a few options not to load by default $fatoptions = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); foreach ($fatoptions as $fatoption) : $wpdb->query("UPDATE $wpdb->options SET autoload = 'no' WHERE option_name = '$fatoption'"); endforeach; } function populate_roles() { populate_roles_160(); populate_roles_210(); } function populate_roles_160() { global $wp_roles; // Add roles add_role('administrator', __('Administrator')); add_role('editor', __('Editor')); add_role('author', __('Author')); add_role('contributor', __('Contributor')); add_role('subscriber', __('Subscriber')); // Add caps for Administrator role $role = get_role('administrator'); $role->add_cap('switch_themes'); $role->add_cap('edit_themes'); $role->add_cap('activate_plugins'); $role->add_cap('edit_plugins'); $role->add_cap('edit_users'); $role->add_cap('edit_files'); $role->add_cap('manage_options'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('import'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_10'); $role->add_cap('level_9'); $role->add_cap('level_8'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Editor role $role = get_role('editor'); $role->add_cap('moderate_comments'); $role->add_cap('manage_categories'); $role->add_cap('manage_links'); $role->add_cap('upload_files'); $role->add_cap('unfiltered_html'); $role->add_cap('edit_posts'); $role->add_cap('edit_others_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('edit_pages'); $role->add_cap('read'); $role->add_cap('level_7'); $role->add_cap('level_6'); $role->add_cap('level_5'); $role->add_cap('level_4'); $role->add_cap('level_3'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Author role $role = get_role('author'); $role->add_cap('upload_files'); $role->add_cap('edit_posts'); $role->add_cap('edit_published_posts'); $role->add_cap('publish_posts'); $role->add_cap('read'); $role->add_cap('level_2'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Contributor role $role = get_role('contributor'); $role->add_cap('edit_posts'); $role->add_cap('read'); $role->add_cap('level_1'); $role->add_cap('level_0'); // Add caps for Subscriber role $role = get_role('subscriber'); $role->add_cap('read'); $role->add_cap('level_0'); } function populate_roles_210() { $roles = array('administrator', 'editor'); foreach ($roles as $role) { $role = get_role($role); if ( empty($role) ) continue; $role->add_cap('edit_others_pages'); $role->add_cap('edit_published_pages'); $role->add_cap('publish_pages'); $role->add_cap('delete_pages'); $role->add_cap('delete_others_pages'); $role->add_cap('delete_published_pages'); $role->add_cap('delete_posts'); $role->add_cap('delete_others_posts'); $role->add_cap('delete_published_posts'); $role->add_cap('delete_private_posts'); $role->add_cap('edit_private_posts'); $role->add_cap('read_private_posts'); $role->add_cap('delete_private_pages'); $role->add_cap('edit_private_pages'); $role->add_cap('read_private_pages'); } $role = get_role('administrator'); if ( ! empty($role) ) { $role->add_cap('delete_users'); $role->add_cap('create_users'); } $role = get_role('author'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); $role->add_cap('delete_published_posts'); } $role = get_role('contributor'); if ( ! empty($role) ) { $role->add_cap('delete_posts'); } } ?>wordpress/wp-admin/upload.css body { background: #f9fcfe; } .upload-file-data { display: none; } #upload-menu { border-top: 2em solid #247fab; margin: 0; padding: 0; height: 0; list-style: none; width: 100%; } body > #upload-menu { border-bottom: 7px solid #fff; } #upload-menu li { margin: 0; position: relative; top: -2em; padding-bottom: 5px; border: none; border-top: 3px solid #247fab; } #upload-menu li a.upload-tab-link { margin-left: 0.75em; padding: 5px 5px 0; display: block; float: left; height: 100%; text-decoration: none; border-bottom: none; color: #fff; } #upload-menu li.current { border-right: 2px solid #448abd; color: #000; } #upload-menu li.current a.upload-tab-link, #upload-menu li a:hover { background: #f9fcfe; color: #000; } #upload-menu li #current-tab-nav { background: #f9fcfe; float: left; padding: 5px 5px 0 0; margin-left: -5px; } #upload-menu li span .page-numbers { padding: 0; border: none; } #upload-menu li span a.page-numbers { color: #00019b; } #upload-menu li span a.page-numbers:hover { text-decoration: underline; } #upload-content { position: relative; clear: both; margin: 0; padding: 0; border: none; width: 100%; height: 100%; background: none; } #upload-file { margin: 0 auto; top: 0; left: 0; width: 95%; height: 100%; background: #f9fcfe; } #upload-file th { width: 8em; } form#upload-file input, form#upload-file textarea, div#upload-content.upload table { width: 100%; } form#upload-file .submit input { width: auto; } #upload-file-view { padding: 0 0 0 75px; } #file-title { margin: 0 0 .2em 75px; padding: 0; display: block; font-family: Georgia, "Times New Roman", Times, serif; font-size: 16px; } h2 { margin: 0 .2em 0 0; padding: 0; display: inline; border: none; color: #000; font-size: 1.4em; line-height: 1.4em; } .wrap h2 { margin: .4em 0 .5em; display: block; border-bottom: .5em solid #e5f3ff; color: #333; font: normal 32px/5px serif; clear: both; } * html .wrap h2 { margin-top: 1em; } .back { display: block; position: absolute; left: 14px; top: 10px; } #upload-files { list-style-type: none; margin: 0; padding: 15px 0 0; } #upload-files li { margin: 0 0 15px 15px; } #upload-files a, #upload-file-view a, a.file-link { border: none; text-decoration: none; } #upload-file-view a img { padding-bottom: .2em; border-bottom: 1px solid #6699CC; } #upload-files a.file-link { display: block; width: 130px; height: 128px; background-color: rgb(209, 226, 239); text-align: center; overflow: hidden; } #upload-files a.text { padding-top: 40px; height: 88px; font-size: 16px; } #upload-files a.file-link.image { font-size: 2px; letter-spacing: 0; } #upload-files a.file-link img { vertical-align: middle; } #the-attachment-links textarea { font-size: 10px; overflow: hidden; } form table { float: none; padding: 0 15px; } table { float: left; margin: 0; padding: 0; } th { text-align: right; vertical-align: text-top; } tr, td, th { margin-top: 0; padding-top: 0; } #uploadoptions th { width: 80px; } #uploadoptions p { margin: 0; padding: 0; } #uploadoptions td { padding-left: 1em; line-height: 140%; } #uploadoptions table { width: 300px; } input.readonly { background-color: #ddd; } 'wordpress/wp-admin/upload-functions.php4+post_content )); $class = 'text'; $innerHTML = get_attachment_innerHTML( $id, false, $dims ); if ( $image_src = get_attachment_icon_src() ) { $image_rel = wp_make_link_relative($image_src); $innerHTML = ' ' . str_replace($image_src, $image_rel, $innerHTML); $class = 'image'; } $src_base = wp_get_attachment_url(); $src = wp_make_link_relative( $src_base ); $src_base = str_replace($src, '', $src_base); $r = ''; if ( $href ) $r .= "\n"; if ( $href || $image_src ) $r .= "\t\t\t$innerHTML"; if ( $href ) $r .= "\n"; $r .= "\n\t\t
    \n\t\t\t

    \n"; $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; if ( !$thumb_base = wp_get_attachment_thumb_url() ) $thumb_base = wp_mime_type_icon(); if ( $thumb_base ) { $thumb_rel = wp_make_link_relative( $thumb_base ); $thumb_base = str_replace( $thumb_rel, '', $thumb_base ); $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; } $r .= "\t\t\t\t\n"; if ( isset($width) ) { $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; } $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; $r .= "\t\t\t\t\n"; $r .= "\t\t\t

    \n\t\t
    \n"; return $r; } function wp_upload_view() { global $style, $post_id, $style; $id = get_the_ID(); $attachment_data = wp_get_attachment_metadata( $id ); ?>

    "; the_title(); if ( !isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>

    ' . __('view') . ''; echo ' | '; echo '' . __('edit') . ''; echo ' | '; echo '' . __('cancel') . ''; echo ' ]'; ?>
    "; echo wp_upload_display( array(171, 128) ); if ( isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>
    \n"; } function wp_upload_form() { $id = get_the_ID(); global $post_id, $tab, $style; $enctype = $id ? '' : ' enctype="multipart/form-data"'; $post_id = (int) $post_id; ?> id="upload-file" method="post" action="">

    "; the_title(); if ( !isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>

    ' . __('view') . ''; echo ' | '; echo '' . __('links') . ''; echo ' | '; echo '' . __('cancel') . ''; echo ' ]'; ?>
    "; echo wp_upload_display( array(171, 128) ); if ( isset($attachment_data['width']) && 'inline' != $style ) echo ''; ?>
    " . __('Browse Files') . '' ); $overrides = array('action'=>'upload'); $file = wp_handle_upload($_FILES['image'], $overrides); if ( isset($file['error']) ) wp_die($file['error'] . "
    " . __('Back to Image Uploading') . '' ); $url = $file['url']; $type = $file['type']; $file = $file['file']; $filename = basename($file); // Construct the attachment array $attachment = array( 'post_title' => $post_title ? $post_title : $filename, 'post_content' => $post_content, 'post_type' => 'attachment', 'post_parent' => $post_id, 'post_mime_type' => $type, 'guid' => $url ); // Save the data $id = wp_insert_attachment($attachment, $file, $post_id); wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); wp_redirect( get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=browse&action=view&ID=$id&post_id=$post_id"); die; break; case 'save' : global $from_tab, $post_id, $style; if ( !$from_tab ) $from_tab = 'upload'; check_admin_referer( 'inlineuploading' ); wp_update_post($_POST); wp_redirect( get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=$from_tab&post_id=$post_id"); die; break; case 'delete' : global $ID, $post_id, $from_tab, $style; if ( !$from_tab ) $from_tab = 'upload'; check_admin_referer( 'inlineuploading' ); if ( !current_user_can('edit_post', (int) $ID) ) wp_die( __('You are not allowed to delete this attachment.') . " " . __('Go back') . '' ); wp_delete_attachment($ID); wp_redirect( get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=$from_tab&post_id=$post_id" ); die; break; endswitch; } add_action( 'upload_files_upload', 'wp_upload_tab_upload_action' ); function wp_upload_grab_attachments( $obj ) { $obj->is_attachment = true; } function wp_upload_posts_where( $where ) { global $post_id; return $where . " AND post_parent = '" . (int) $post_id . "'"; } function wp_upload_tab_browse() { global $wpdb, $action, $paged; $old_vars = compact( 'paged' ); switch ( $action ) : case 'edit' : case 'view' : global $ID; $attachments = query_posts("attachment_id=$ID"); if ( have_posts() ) : while ( have_posts() ) : the_post(); 'edit' == $action ? wp_upload_form() : wp_upload_view(); endwhile; endif; break; default : global $tab, $post_id, $style; add_action( 'pre_get_posts', 'wp_upload_grab_attachments' ); if ( 'browse' == $tab && $post_id ) add_filter( 'posts_where', 'wp_upload_posts_where' ); $attachments = query_posts("what_to_show=posts&posts_per_page=10&paged=$paged"); $count_query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment'"; if ( $post_id ) $count_query .= " AND post_parent = '$post_id'"; $total = $wpdb->get_var($count_query); echo "
      \n"; if ( have_posts() ) : while ( have_posts() ) : the_post(); $href = wp_specialchars( add_query_arg( array( 'action' => 'inline' == $style ? 'view' : 'edit', 'ID' => get_the_ID()) ), 1 ); echo "\t
    • \n"; echo wp_upload_display( array(128,128), $href ); echo "\t
    • \n"; endwhile; else : echo "\t
    • " . __('There are no attachments to show.') . "
    • \n"; endif; echo "
    \n\n"; echo "
    \n"; break; endswitch; extract($old_vars); } function wp_upload_tab_browse_action() { global $style; if ( 'inline' == $style ) wp_enqueue_script('upload'); } add_action( 'upload_files_browse', 'wp_upload_tab_browse_action' ); add_action( 'upload_files_browse-all', 'wp_upload_tab_browse_action' ); function wp_upload_admin_head() { global $wp_locale; echo "\n"; if ( 'rtl' == $wp_locale->text_direction ) echo "\n"; if ( 'inline' == @$_GET['style'] ) { echo ""; } } ?>wordpress/wp-admin/upload.js+aaddLoadEvent( function() { theFileList = { currentImage: {ID: 0}, nonce: '', tab: '', postID: 0, initializeVars: function() { this.urlData = document.location.href.split('?'); this.params = this.urlData[1].toQueryParams(); this.postID = this.params['post_id']; this.tab = this.params['tab']; this.style = this.params['style']; this.ID = this.params['ID']; if ( !this.style ) this.style = 'default'; var nonceEl = $('nonce-value'); if ( nonceEl ) this.nonce = nonceEl.value; if ( this.ID ) { this.grabImageData( this.ID ); this.imageView( this.ID ); } }, initializeLinks: function() { if ( this.ID ) return; $$('a.file-link').each( function(i) { var id = i.id.split('-').pop(); i.onclick = function(e) { theFileList[ 'inline' == theFileList.style ? 'imageView' : 'editView' ](id, e); } } ); }, grabImageData: function(id) { if ( id == this.currentImage.ID ) return; var thumbEl = $('attachment-thumb-url-' + id); if ( thumbEl ) { this.currentImage.thumb = ( 0 == id ? '' : thumbEl.value ); this.currentImage.thumbBase = ( 0 == id ? '' : $('attachment-thumb-url-base-' + id).value ); } else { this.currentImage.thumb = false; } this.currentImage.src = ( 0 == id ? '' : $('attachment-url-' + id).value ); this.currentImage.srcBase = ( 0 == id ? '' : $('attachment-url-base-' + id).value ); this.currentImage.page = ( 0 == id ? '' : $('attachment-page-url-' + id).value ); this.currentImage.title = ( 0 == id ? '' : $('attachment-title-' + id).value ); this.currentImage.description = ( 0 == id ? '' : $('attachment-description-' + id).value ); var widthEl = $('attachment-width-' + id); if ( widthEl ) { this.currentImage.width = ( 0 == id ? '' : widthEl.value ); this.currentImage.height = ( 0 == id ? '' : $('attachment-height-' + id).value ); } else { this.currentImage.width = false; this.currentImage.height = false; } this.currentImage.isImage = ( 0 == id ? 0 : $('attachment-is-image-' + id).value ); this.currentImage.ID = id; }, imageView: function(id, e) { this.prepView(id); var h = ''; h += "
    " if ( this.ID ) { var params = $H(this.params); params.ID = ''; params.action = ''; h += "" + this.back + ""; h += "
    " if ( 0 == this.currentImage.isImage ) h += "

    " + this.currentImage.title + "

    "; else h += "

    " + this.currentImage.title + "

    "; h += " — "; h += "" + this.edit + "" h += ""; h += '
    ' h += "
    "; if ( 1 == this.currentImage.isImage ) { h += ""; h += "" + this.currentImage.title + ""; h += ""; } else h += ' '; h += "
    "; h += "
    "; h += ""; var display = []; var checked = 'display-title'; if ( 1 == this.currentImage.isImage ) { checked = 'display-full'; if ( this.currentImage.thumb ) { display.push("
    "); checked = 'display-thumb'; } display.push(""); } else if ( this.currentImage.thumb ) { display.push(""); } if ( display.length ) { display.push("
    "); h += ""; } h += ""; h += "
    " + this.show + ""; $A(display).each( function(i) { h += i; } ); h += "
    " + this.link + ""; h += "
    "; h += "
    "; h += ""; h += "

    "; h += ""; h += "

    "; h += "
    "; h += "
    "; new Insertion.Top('upload-content', h); var displayEl = $(checked); if ( displayEl ) displayEl.checked = true; if (e) Event.stop(e); return false; }, editView: function(id, e) { this.prepView(id); var h = ''; var action = 'upload.php?style=' + this.style + '&tab=upload'; if ( this.postID ) action += '&post_id=' + this.postID; h += "
    "; if ( this.ID ) { var params = $H(this.params); params.ID = ''; params.action = ''; h += "" + this.back + ""; h += "
    " if ( 0 == this.currentImage.isImage ) h += "

    " + this.currentImage.title + "

    "; else h += "

    " + this.currentImage.title + "

    "; h += " — "; h += "" + this.insert + ""; h += ""; h += '
    ' h += "
    "; if ( 1 == this.currentImage.isImage ) { h += ""; h += "" + this.currentImage.title + ""; h += ""; } else h += ' '; h += "
    "; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += ""; h += "
    "; h += ""; h += ""; h += ""; h += ""; h += "
    "; h += "
    "; new Insertion.Top('upload-content', h); if (e) Event.stop(e); return false; }, prepView: function(id) { this.cancelView( true ); var filesEl = $('upload-files'); if ( filesEl ) filesEl.hide(); var navEl = $('current-tab-nav'); if ( navEl ) navEl.hide(); this.grabImageData(id); }, cancelView: function( prep ) { if ( !prep ) { var filesEl = $('upload-files'); if ( filesEl ) Element.show(filesEl); var navEl = $('current-tab-nav'); if ( navEl ) Element.show(navEl); } if ( !this.ID ) this.grabImageData(0); var div = $('upload-file'); if ( div ) Element.remove(div); return false; }, sendToEditor: function(id) { this.grabImageData(id); var link = ''; var display = ''; var h = ''; link = $A(document.forms.uploadoptions.elements.link).detect( function(i) { return i.checked; } ).value; displayEl = $A(document.forms.uploadoptions.elements.display).detect( function(i) { return i.checked; } ) if ( displayEl ) display = displayEl.value; else if ( 1 == this.currentImage.isImage ) display = 'full'; if ( 'none' != link ) h += ""; if ( display && 'title' != display ) h += "" + this.currentImage.title + ""; else h += this.currentImage.title; if ( 'none' != link ) h += ""; var win = window.opener ? window.opener : window.dialogArguments; if ( !win ) win = top; tinyMCE = win.tinyMCE; if ( typeof tinyMCE != 'undefined' && tinyMCE.getInstanceById('content') ) { tinyMCE.selectedInstance.getWin().focus(); tinyMCE.execCommand('mceInsertContent', false, h); } else win.edInsertContent(win.edCanvas, h); if ( !this.ID ) this.cancelView(); return false; }, deleteFile: function(id) { if ( confirm( this.confirmText.replace(/%title%/g, this.currentImage.title) ) ) { $('action-value').value = 'delete'; $('upload-file').submit(); return true; } return false; } }; Object.extend( theFileList, uploadL10n ); theFileList.initializeVars(); theFileList.initializeLinks(); } ); wordpress/wp-admin/upload.phpget_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment'"); $post_atts = 0; if ( $pid ) { // 0 => tab display name, 1 => required cap, 2 => function that produces tab content, 3 => total number objects OR array(total, objects per page), 4 => add_query_args $wp_upload_tabs['upload'] = array(__('Upload'), 'upload_files', 'wp_upload_tab_upload', 0); if ( $all_atts && $post_atts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = " . $post_id) ) $wp_upload_tabs['browse'] = array(__('Browse'), 'upload_files', "wp_upload_tab_browse", $action ? 0 : $post_atts); if ( $post_atts < $all_atts ) $wp_upload_tabs['browse-all'] = array(__('Browse All'), 'upload_files', 'wp_upload_tab_browse', $action ? 0 : $all_atts); } else $wp_upload_tabs['browse-all'] = array(__('Browse All'), 'upload_files', 'wp_upload_tab_browse', $action ? 0 : $all_atts); $wp_upload_tabs = array_merge($wp_upload_tabs, apply_filters( 'wp_upload_tabs', array() )); if ( !is_callable($wp_upload_tabs[$tab][2]) ) { $to_tab = isset($wp_upload_tabs['upload']) ? 'upload' : 'browse-all'; wp_redirect( add_query_arg( 'tab', $to_tab ) ); exit; } foreach ( $wp_upload_tabs as $t => $tab_array ) { if ( !current_user_can( $tab_array[1] ) ) { unset($wp_upload_tabs[$t]); if ( $tab == $t ) wp_die(__("You are not allowed to be here")); } } if ( 'inline' == $style ) : ?> > <?php bloginfo('name') ?> › <?php _e('Uploads'); ?> — WordPress text_direction) ) : ?>

    \n"; foreach ( $wp_upload_tabs as $t => $tab_array ) { // We've already done the current_user_can check $href = add_query_arg( array('tab' => $t, 'ID' => '', 'action' => '', 'paged' => '') ); if ( isset($tab_array[4]) && is_array($tab_array[4]) ) $href = add_query_arg( $tab_array[4], $href ); $_href = clean_url( $href); $page_links = ''; $class = 'upload-tab alignleft'; if ( $tab == $t ) { $class .= ' current'; if ( $tab_array[3] ) { if ( is_array($tab_array[3]) ) { $total = $tab_array[3][0]; $per = $tab_array[3][1]; } else { $total = $tab_array[3]; $per = 10; } $page_links = paginate_links( array( 'base' => add_query_arg( 'paged', '%#%' ), 'format' => '', 'total' => ceil($total / $per), 'current' => $paged ? $paged : 1, 'prev_text' => '«', 'next_text' => '»' )); if ( $page_links ) $page_links = ": $page_links"; } } echo "\t
  • {$tab_array[0]}$page_links
  • \n"; } unset($t, $tab_array, $href, $_href, $page_links, $total, $per, $class); echo "\n\n"; echo "
    \n"; call_user_func( $wp_upload_tabs[$tab][2] ); echo "
    \n"; if ( 'inline' != $style ) : echo "
    "; include_once('admin-footer.php'); else : ?> !wordpress/wp-admin/upload-rtl.css#upload-menu li a.upload-tab-link { float: right; margin: 0 .75em 0 0; } table { float: right; } #upload-menu li #current-tab-nav { float: right; padding: 5px 0 0 5px; margin-right: -5px; } #upload-file th, #the-attachment-links textarea { text-align: left; } h2 { margin: 0 0 0 .2em; } #upload-files li { margin: 0 15px 15px 0; } #upload-file-view { padding: 0 75px 0 0; } #upload-menu li { display: block; float: right; } #upload-menu li.current { border-right: 0; border-left: 2px solid #448abd; } #upload-file { left: auto; right: 0; } #file-title { margin: 0 75px .2em 0; font-family: Tahoma, Georgia, "Times New Roman", Times, serif; } .back { left: auto; right: 14px; } #uploadoptions td { padding-left: 0; padding-right: 1em; } wordpress/wp-admin/user-edit.php

      get_error_messages() as $message ) echo "
    • $message
    • "; ?>



    caps) > count($profileuser->roles)): ?>
    caps as $cap => $value) { if(!$wp_roles->is_role($cap)) { if($output != '') $output .= ', '; $output .= $value ? $cap : "Denied: {$cap}"; } } echo $output; ?>

    wordpress/wp-admin/users.jsMaddLoadEvent(function() { theListEls = document.getElementsByTagName('tbody'); theUserLists = new Array(); for ( var l = 0; l < theListEls.length; l++ ) { if ( theListEls[l].id ) theUserLists[theListEls[l].id] = new listMan(theListEls[l].id); } addUserInputs = document.getElementById('adduser').getElementsByTagName('input'); for ( var i = 0; i < addUserInputs.length; i++ ) { addUserInputs[i].onkeypress = function(e) { return killSubmit('addUserSubmit();', e); } } document.getElementById('addusersub').onclick = function(e) { return killSubmit('addUserSubmit();', e); } } ); function addUserSubmit() { var roleEl = document.getElementById('role'); var role = roleEl.options[roleEl.selectedIndex].value; if ( !theUserLists['role-' + role] ) return true; return theUserLists['role-' + role].ajaxAdder('user', 'adduser'); } wordpress/wp-admin/users.php>'; } elseif ( isset($_POST['wp_http_referer']) ) { $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_POST['wp_http_referer'])); $referer = ''; } else { $redirect = 'users.php'; } // WP_User_Search class // by Mark Jaquith class WP_User_Search { var $results; var $search_term; var $page; var $raw_page; var $users_per_page = 50; var $first_user; var $last_user; var $query_limit; var $query_from_where; var $total_users_for_query = 0; var $too_many_total_users = false; var $search_errors; function WP_User_Search ($search_term = '', $page = '') { // constructor $this->search_term = $search_term; $this->raw_page = ( '' == $page ) ? false : (int) $page; $this->page = (int) ( '' == $page ) ? 1 : $page; $this->prepare_query(); $this->query(); $this->prepare_vars_for_template_usage(); $this->do_paging(); } function prepare_query() { global $wpdb; $this->first_user = ($this->page - 1) * $this->users_per_page; $this->query_limit = '';//'LIMIT ' . $this->first_user . ',' . $this->users_per_page; if ( $this->search_term ) { $searches = array(); $search_sql = 'AND ('; foreach ( array('user_login', 'user_nicename', 'user_email', 'user_url', 'display_name') as $col ) $searches[] = $col . " LIKE '%$this->search_term%'"; $search_sql .= implode(' OR ', $searches); $search_sql .= ')'; } $this->query_from_where = "FROM $wpdb->users WHERE 1=1 $search_sql"; } function query() { global $wpdb; $this->results = $wpdb->get_col('SELECT ID ' . $this->query_from_where . $this->query_limit); if ( $this->results ) $this->total_users_for_query = $wpdb->get_var('SELECT COUNT(ID) ' . $this->query_from_where); // no limit else $this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!')); } function prepare_vars_for_template_usage() { $this->search_term = stripslashes($this->search_term); // done with DB, from now on we want slashes gone } function do_paging() { if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results $this->paging_text = paginate_links( array( 'total' => ceil($this->total_users_for_query / $this->users_per_page), 'current' => $this->page, 'prev_text' => __('« Previous Page'), 'next_text' => __('Next Page »'), 'base' => 'users.php?%_%', 'format' => 'userspage=%#%', 'add_args' => array( 'usersearch' => urlencode($this->search_term) ) ) ); } } function get_results() { return (array) $this->results; } function page_links() { echo $this->paging_text; } function results_are_paged() { if ( $this->paging_text ) return true; return false; } function is_search() { if ( $this->search_term ) return true; return false; } } switch ($action) { case 'promote': check_admin_referer('bulk-users'); if (empty($_POST['users'])) { wp_redirect($redirect); exit(); } if ( !current_user_can('edit_users') ) wp_die(__('You can’t edit users.')); $userids = $_POST['users']; $update = 'promote'; foreach($userids as $id) { if ( ! current_user_can('edit_user', $id) ) wp_die(__('You can’t edit that user.')); // The new role of the current user must also have edit_users caps if($id == $current_user->ID && !$wp_roles->role_objects[$_POST['new_role']]->has_cap('edit_users')) { $update = 'err_admin_role'; continue; } $user = new WP_User($id); $user->set_role($_POST['new_role']); } wp_redirect(add_query_arg('update', $update, $redirect)); exit(); break; case 'dodelete': check_admin_referer('delete-users'); if ( empty($_POST['users']) ) { wp_redirect($redirect); exit(); } if ( !current_user_can('delete_users') ) wp_die(__('You can’t delete users.')); $userids = $_POST['users']; $update = 'del'; $delete_count = 0; foreach ( (array) $userids as $id) { if ( ! current_user_can('delete_user', $id) ) wp_die(__('You can’t delete that user.')); if($id == $current_user->ID) { $update = 'err_admin_del'; continue; } switch($_POST['delete_option']) { case 'delete': wp_delete_user($id); break; case 'reassign': wp_delete_user($id, $_POST['reassign_user']); break; } ++$delete_count; } $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect); wp_redirect($redirect); exit(); break; case 'delete': check_admin_referer('bulk-users'); if ( empty($_POST['users']) ) { wp_redirect($redirect); exit(); } if ( !current_user_can('delete_users') ) $errors = new WP_Error('edit_users', __('You can’t delete users.')); $userids = $_POST['users']; include ('admin-header.php'); ?>

      ID ) { echo "
    • " . sprintf(__('ID #%1s: %2s The current user will not be deleted.'), $id, $user->user_login) . "
    • \n"; } else { echo "
    • " . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "
    • \n"; $go_delete = true; } } $all_logins = $wpdb->get_results("SELECT ID, user_login FROM $wpdb->users ORDER BY user_login"); $user_dropdown = ''; ?>

    • '.__('Attribute all posts and links to:')." $user_dropdown"; ?>

    urlencode($new_user_login), 'update' => $update), $redirect ); wp_redirect( $redirect . '#user-' . $user_id ); die(); } default: wp_enqueue_script('admin-users'); include('admin-header.php'); // Query the users $wp_user_search = new WP_User_Search($_GET['usersearch'], $_GET['userspage']); // Make the user objects foreach ( $wp_user_search->get_results() as $userid ) { $tmp_user = new WP_User($userid); $roles = $tmp_user->roles; $role = array_shift($roles); $roleclasses[$role][$tmp_user->user_login] = $tmp_user; } if ( isset($_GET['update']) ) : switch($_GET['update']) { case 'del': case 'del_many': ?>

      get_error_messages() as $message ) echo "
    • $message
    • "; ?>
    is_search() ) : ?>

    search_term)); ?>

    search_errors ) ) : ?>
      search_errors->get_error_messages() as $message ) echo "
    • $message
    • "; ?>
    get_results() ) : ?> is_search() ) : ?>

    first_user && $wp_user_search->total_users_for_query <= 50 ) printf(__('%3$s shown below'), $wp_user_search->first_user + 1, min($wp_user_search->first_user + $wp_user_search->users_per_page, $wp_user_search->total_users_for_query), $wp_user_search->total_users_for_query); else printf(__('%1$s – %2$s of %3$s shown below'), $wp_user_search->first_user + 1, min($wp_user_search->first_user + $wp_user_search->users_per_page, $wp_user_search->total_users_for_query), $wp_user_search->total_users_for_query); ?>

    results_are_paged() ) : ?>

    page_links(); ?>

    $roleclass) { uksort($roleclass, "strnatcasecmp"); ?>

    role_names[$role]; ?>

    results_are_paged() ) : ?>

    page_links(); ?>

    'user_login', 'first_name' => 'user_firstname', 'last_name' => 'user_lastname', 'email' => 'user_email', 'url' => 'user_uri', 'role' => 'user_role') as $formpost => $var ) { $var = 'new_' . $var; $$var = attribute_escape(stripslashes($_POST[$formpost])); } unset($name); } ?>

    get_error_messages() as $message ) echo "

    $message

    "; ?>
    ' . sprintf(__('Users can register themselves or you can manually create users here.'), get_option('siteurl').'/wp-register.php') . '

    '; else echo '

    ' . sprintf(__('Users cannot currently register themselves, but you can manually create users here.'), get_option('siteurl').'/wp-admin/options-general.php#users_can_register') . '

    '; ?>

    wordpress/wp-admin/widgets.css Fbody { height: 100%; } #sbadmin #zones { -moz-user-select: none; -khtml-user-select: none; user-select: none; } #sbreset { float: left; margin: 1px 0; } .dropzone { float: left; margin-right: 10px; padding: 5px; border: 1px solid #bbb; background-color: #f0f8ff; } .dropzone h3 { text-align: center; color: #333; } .dropzone ul { list-style-type: none; width: 240px; float: left; margin: 0; padding: 0; } * .module, #lastmodule { width: 238px; padding: 0; margin: 5px 0; cursor: move; display: block; border: 1px solid #ccc; background-color: #fbfbfb; text-align: left; line-height: 25px; } * .handle, #lastmodule span { display: block; width: 216px; padding: 0 10px; border-top: 1px solid #f2f2f2; border-right: 1px solid #e8e8e8; border-bottom: 1px solid #e8e8e8; border-left: 1px solid #f2f2f2; } * .popper { margin: 0; display: inline; position: absolute; top: 3px; right: 3px; overflow: hidden; text-align: center; height: 16px; font-size: 18px; line-height: 14px; cursor: pointer; padding: 0 3px 1px; border-top: 4px solid #6da6d1; background: url( images/fade-butt.png ) -5px 0px; } * html .popper { padding: 1px 6px 0; font-size: 16px; } #sbadmin p.submit { padding-right: 10px; clear: left; } .placematt { cursor: default; margin: 10px 0 0; padding: 0; width: 238px; float:left; background-color: #ffe; } * html .placematt { margin-top: 5px; } .placematt h4 { text-align: center; margin-bottom: 5px; } .placematt span { padding: 0 10px 10px; text-align: justify; } #palettediv { border: 1px solid #bbb; background-color: #f0f8ff; height:auto; margin-top: 10px; } #palettediv h3 { text-align: center; color: #333; } #palettediv ul { padding: 0 0 0 10px; } #palettediv .module, #lastmodule { margin-right: 10px; float: left; width: 120px; } #palettediv .handle, #lastmodule span { height: 40px; font-size: 90%; width: 110px; padding: 0 5px; } #palettediv .popper { visibility: hidden; } #lastmodule { visibility: hidden; } * html #palettediv ul { margin: 0; padding: 0 0 0 10px; } * html #palettediv .module { float: none; display: inline; } #controls { height: 0px; } .control { position: absolute; display: block; background: #f9fcfe; padding: 0; } .controlhandle { cursor: move; background-color: #6da6d1; border-bottom: 2px solid #448abd; color: #333; display: block; margin: 0 0 5px; padding: 4px; font-size: 120%; } .controlcloser { cursor: pointer; font-size: 120%; display: block; position: absolute; top: 2px; right: 8px; padding: 0 3px; font-weight: bold; } .controlform { margin: 20px 30px; } .controlform p { text-align: center; } .control .checkbox { border: none; background: transparent; } .hidden { display: none; } #shadow { background: black; display: none; position: absolute; top: 0px; left: 0px; width: 100%; }wordpress/wp-admin/widgets.php0k $sidebar ) { $cols[] = '\'' . $index . '\''; } $cols = implode( ', ', $cols ); $widgets = array(); foreach ( $wp_registered_widgets as $name => $widget ) { $widgets[] = '\'' . $widget['id'] . '\''; } $widgets = implode( ', ', $widgets ); ?> ≡' : ''; $output = '
  • %2$s
  • '; printf( $output, $sanitized_name, $wp_registered_widgets[$name]['name'] . $popper ); } $title = __( 'Widgets' ); $parent_file = 'themes.php'; require_once 'admin-header.php'; if ( count( $wp_registered_sidebars ) < 1 ) { ?>

    follow these instructions.' ); /* TODO: article on codex */; ?>

    $sidebar ) { $postindex = $index . 'order'; parse_str( $_POST[$postindex], $order ); $new_order = $order[$index]; if ( is_array( $new_order ) ) { foreach ( $new_order as $sanitized_name ) { foreach ( $wp_registered_widgets as $name => $widget ) { if ( $sanitized_name == $widget['id'] ) { $sidebars_widgets[$index][] = $name; } } } } } wp_set_sidebars_widgets( $sidebars_widgets ); break; } } ksort( $wp_registered_widgets ); $inactive_widgets = array(); foreach ( $wp_registered_widgets as $name => $widget ) { $is_active = false; foreach ( $wp_registered_sidebars as $index => $sidebar ) { if ( is_array( $sidebars_widgets[$index] ) && in_array( $name, $sidebars_widgets[$index] ) ) { $is_active = true; break; } } if ( !$is_active ) { $inactive_widgets[] = $name; } } $containers = array( 'palette' ); foreach ( $wp_registered_sidebars as $index => $sidebar ) { $containers[] = $index; } $c_string = ''; foreach ( $containers as $container ) { $c_string .= '"' . $container . '",'; } $c_string = substr( $c_string, 0, -1 ); if ( isset( $_POST['action'] ) ) { ?>

    View site »' ), get_bloginfo( 'url' ) . '/' ); ?>

    $sidebar ) { ?>


    $widget ) { ?>

    "wordpress/wp-admin/widgets-rtl.css#sbreset, #lastmodule, #palettediv .module, .dropzone, .dropzone ul { float: right; } * .module, #lastmodule { text-align: right; } * html #palettediv ul { padding: 0 10px 0 0; } #palettediv ul { padding: 0 10px 0 0; margin-left: 1px!important;} * .handle, #lastmodule span { border-right: 1px solid #f2f2f2; border-left: 1px solid #e8e8e8; } #sbadmin p.submit { padding-right: 0; padding-left: 10px; clear: right; } #palettediv .module, #lastmodule, .dropzone { margin-right: auto; margin-left: 10px; } * .popper { right: auto; left: 3px; background-position: 5px 0; } .controlcloser { right: auto; left: 8px; } #shadow { left: auto; right: 0px; }wordpress/wp-admin/wp-admin.cssK* html #poststuff { height: 100%; /* kill peekaboo bug in IE */ } /* This is the Holly Hack \*/ * html .wrap { height: 1% } /* For Win IE's eyes only */ body { border: none; } a { border-bottom: 1px solid #69c; color: #00019b; text-decoration: none; } a.delete:hover { background: #c00; color: #fff; } #devnews h4 { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; font-weight: normal; } #planetnews ul { list-style: none; margin: 0; padding: 0; } #planetnews li { width: 17%; margin: 1%; float: left; } #planetnews li a { display: block; padding: .5em; background: #ddd; height: 6em; overflow: hidden; } #planetnews cite { font-size: 11px; } #planetnews li .post { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; display: block; height: 60px; overflow: hidden; } #planetnews .hidden { display: none; } .readmore { clear: both; text-align: right; margin-right: 5em; } .widefat { width: 100%; } .widefat td, .widefat th { padding: 5px 6px; } .widefat th { text-align: left; } .plugins p { margin: 4px; padding: 0; } .plugins .name { font-size: 16px; } .import-system { font-size: 16px; } thead, .thead { background: #dfdfdf } #import-upload-form { margin: auto; background: #eee; padding: 1em; } a.edit, a.delete, a.edit:hover, a.delete:hover { border-bottom: none; display: block; padding: 5px 0; text-align: center; } a.edit:hover { background: #ccc; color: #036; } a:visited { color: #006; } a:hover { /* border-bottom: 1px solid #3a75ae;*/ color: #069; } body { background: #f9fcfe; color: #000; margin: 0; padding: 0; } body, td { font: 13px "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana; } fieldset { border: none; padding: 3px; } fieldset label.selectit { display: block; font-size: 11px; padding: 0 2px; } fieldset label.selectit:hover { background: #e9e9e9; } fieldset legend { padding: .1em .3em; } fieldset.options { padding: 1em; } fieldset.options legend { font-size: 1.5em; font-weight: bold; font-family: Georgia, "Times New Roman", Times, serif; } form, label input { margin: 0; padding: 0; } h2 { border-bottom: .5em solid #e5f3ff; color: #333; font: normal 32px/5px serif; margin: 5px 10px; } img, #footer a { border: 0; } input:focus, textarea:focus, label:focus { background: #fff; border: 1px solid #686868; } label { cursor: pointer; } li, dd { margin-bottom: 6px; } p, li, dl, dd, dt { line-height: 140%; } textarea, input, select { background: #f4f4f4; border: 1px solid #b2b2b2; color: #000; font: 13px Verdana, Arial, Helvetica, sans-serif; margin: 1px; padding: 3px; } #uploading { border-style: none; padding: 0; margin-bottom: 16px; height: 18em; width: 100%; } form#upload th { text-align: right; } form#upload #post_content, form#upload #post_title { width: 250px; } form#upload #post_content { height: 50px; } .attpreview { width: 1px; /* hug */ text-align: center; } .alignleft { float: left } .alignright { float: right; } .alternate { background: #f1f1f1; } .anchors { margin: 10px 20px 10px 20px; } .available-theme { width: 30%; margin: 0 1em; float: left; text-align: center; height: 28em; overflow: hidden; } .available-theme a.screenshot { width: 250px; height: 200px; display: block; margin: auto; background: #f1f1f1; border: 1px solid #ccc; margin-bottom: 10px; overflow: hidden; } .available-theme a.screenshot:hover { /* border: 1px solid #666;*/ } .available-theme img { width: 100%; } .checkbox { background: #fff; border: none; margin: 0; padding: 0; } .code { font-family: "Courier New", Courier, monospace; } .commentlist li { border-bottom: 1px solid #ccc; padding: 1em 1em .2em; margin: 0; } .commentlist li li { border-bottom: 0px; padding: 0; } .commentlist p { padding: 0; margin: 0 0 .8em; } .clear { clear: both; height: 2px; } .hidden { display: none; } .navigation { display: block; text-align: center; margin-top: 10px; margin-bottom: 30px; } .post-categories { display: inline; margin: 0; padding: 0; } .post-categories li, #ed_toolbar { display: inline; } .quicktags, .search { background: #ccc; color: #000; font: 12px Georgia, "Times New Roman", Times, serif; } .submit input, .submit input:focus, .button, .button:focus { background: url( images/fade-butt.png ); border: 3px double #999; border-left-color: #ccc; border-top-color: #ccc; color: #333; padding: 0.25em; } .submit input:active, .button:active { background: #f4f4f4; border: 3px double #ccc; border-left-color: #999; border-top-color: #999; } .button, .button:focus { padding: 0.15em; } * html .button { padding: 0; } .submit, .editform th, #postcustomsubmit { text-align: right; } .optiontable { width: 100%; } .optiontable td, .optiontable th { padding: .5em; } .optiontable th { width: 33%; text-align: right; font-size: 1.3em; font-weight: normal; } .unapproved { color: #888; } .unapproved a:link { color: #b9bcff; } .unapproved a:visited { color: #696dff; } .unapproved a:hover { color: #009ef0; } .approve { display: none; } .unapproved .approve { display: inline; } .unapproved .unapprove { display: none; } .updated, .confirm { background: #CFEBF7 url(images/notice.gif) no-repeat 1em; border: 1px solid #2580B2; margin: 1em 5% 10px; padding: 0 1em 0 3em; } .error { background: #FFEFF7; border: 1px solid #c69; margin: 1em 5% 10px; padding: 0 1em 0 1em; } .wrap { background: #fff; border: 1px solid #ccc; clear: both; margin: 15px 5%; padding: 1em; } .narrow { width: 450px; margin: auto; } .narrow p { line-height: 150%; } .wrap h2 { margin: .4em 0 .5em; clear: both; } * html .wrap h2 { margin-top: 1em; } table .vers { text-align: center; } textarea.all-options, input.all-options { width: 250px; } input.disabled, textarea.disabled { background: #ccc; } #adminmenu { background: #83B4D8; border-top: 3px solid #448abd; margin: 0; padding: .2em .2em .3em 2em; } #adminmenu .current, #submenu .current { font-weight: bold; text-decoration: none; } #adminmenu a { color: #000; font-size: 14px; font-weight: normal; margin: 0; padding: 3px 5px; border-bottom: none; } #adminmenu a:hover, #adminmenu a.current { background: #ddeaf4; color: #333; } #adminmenu li, #submenu li { display: inline; line-height: 200%; list-style: none; text-align: center; white-space: nowrap; } #adminmenu a.current { background: #0d324f; border-right: 2px solid #4f96c8; border-top: 1px solid #96c0de; color: #fff; padding-bottom: 8px; } #submenu, #minisub { background: #0d324f; border-bottom: none; margin: 0; padding: 3px 2em 0 3em; } #minisub { height: 6px; } #submenu .current { background: #f9fcfe; border-top: 1px solid #045290; border-right: 2px solid #045290; color: #000; } #submenu a { border: none; color: #fff; font-size: 12px; padding: .3em .4em .4em; } #submenu a:hover { background: #ddeaf4; color: #393939; } #submenu li { line-height: 180%; height: 25px; } #categorydiv input, #poststatusdiv input, #commentstatusdiv input, #pingstatusdiv input { border: none; } #postdiv, #titlediv, #guiddiv { margin: 0 8px 0 0; padding: 0; } #postdivrich { margin: 0; padding: 0; } #content { margin: 0; width: 100%; } #postdivrich #content { padding: 5px; line-height: 140%; } #titlediv input, #guiddiv input { margin: 0; width: 100%; } #currenttheme img { float: left; border: 1px solid #666; margin-right: 1em; margin-bottom: 1.5em; width: 300px; } input.delete:hover { background: #ce0000; color: #fff; } #deletebookmarks:hover { background: #ce0000; color: #fff; } #postdivrich #quicktags { background: #f0f0ee; padding: 0; border: 1px solid #ccc; border-bottom: none; } #postdiv #quicktags { padding-right: 6px; } #postdivrich #quicktags { display: none; } #quicktags #ed_toolbar { padding: 0 2px; } #ed_toolbar input { background: #fff url( images/fade-butt.png ) repeat-x 0 -2px; margin: 3px 2px 2px; } #quicktags #ed_strong { font-weight: bold; } #quicktags #ed_link { color: blue; text-decoration: underline; } #quicktags #ed_del { text-decoration: line-through; } #quicktags #ed_em { font-style: italic; } #quicktags #ed_code { font-family: "Courier New", Courier, mono; margin-bottom: 3px; } #title { font-size: 1.7em; padding: 4px 3px; } #postexcerpt div, #attachmentlinks div { margin-right: 8px; } #attachmentlinks textarea { width: 100%; height: 2.5em; margin-bottom: 6px; } * html #postexcerpt .dbx-toggle-open, * html #postexcerpt .dbx-toggle-open { padding-right: 8px; } #excerpt, .attachmentlinks { margin: 0; height: 4em; width: 100%; } #footer { clear: both; text-align: center; width: 500px; margin: auto; height: 100px; } #footer .docs { padding-top: 19px; line-height: 160%; } #footer .docs a { text-decoration: underline; } #footer .logo { float: left; margin: 0; padding: 0; } #login { position: relative; background: url('images/login-bkg-tile.gif') no-repeat top center; color: #fff; margin: 5em auto 1em; padding: 20px 0 0; width: 425px; _width: 390px; } #login form { background: url('images/login-bkg-bottom.gif') no-repeat bottom center; padding: 0 50px 25px; _width: 325px; _margin: 0 auto; } #login #login_error { background: #0e3350; border: 1px solid #2571ab; color: #ebcd4e; font-size: 11px; font-weight: bold; padding: .6em; width: 310px; margin: 0 50px; text-align: center; } #login p { font-size: 12px; } #login p.message { width: 310px; margin: 0 auto 1em; } #login #login_error a { color: #ebcd4e; border-color: #ebcd4e; } #login #send { color: #fff; text-align: left; font-weight: normal; font-size: 1.1em; _width: 325px; _margin: 0 auto 15px; } #login h1 a { margin: 0 auto; height: 88px; width: 320px; display: block; border-bottom: none; text-indent: -9999px; } #login .message { font-size: 10pt; text-align: center; } #login .register { font-size: 20px; } #login input { padding: 4px; } .login ul, #protected #login .bottom { list-style: none; width: 325px; margin: 0 auto; padding: 0; line-height: 1.2; } .login ul li { font-size: 11px; } .login ul li a { color: #0d324f; border: none; } #login ul li a:hover { color: #fff; } #login .input { font-size: 1.8em; margin-top: 3px; width: 97%; } #login p label { font-size: 11px; } #login #submit { margin: 0; font-size: 15px; } .plugins p { } #login .fullwidth { width: 320px; } #searchform { float: left; margin-right: 1em; width: 18em; } #viewarc { float: left; width: 23em; margin-bottom: 1em; } #viewcat { float: left; width: 30em; margin-bottom: 1em; } #postcustom .updatemeta, #postcustom .deletemeta { margin: auto; } #postcustom table { border: 1px solid #ccc; margin: 0; width: 100%; } #postcustom table input, #postcustom table textarea { width: 95%; } #poststuff { margin-right: 16em; } #save { width: 15em; } #template div { margin-right: 190px; } * html #template div { margin-right: 0; } #template, #template div, #editcat, #addcat { zoom: 1; } #template textarea { font: small 'Courier New', Courier, monospace; width: 97%; } #templateside { float: right; width: 170px; overflow: hidden; } #templateside h3, #postcustom p.submit { margin: 0; } #templateside ol, #templateside ul { list-style: none; margin: .5em; padding: 0; } #user_info { position: absolute; right: 1em; top: 0; color: #fff; font-size: .9em; } #user_info a { color: #fff; } #wphead { background: #14568a; padding: .8em 19em .8em 2em; color: #c3def1; } #wphead a { color: #fff; } #wphead h1 { font-size: 2.5em; font-weight: normal; letter-spacing: -.05em; margin: 0; font-family: Georgia, "Times New Roman", Times, serif; } #wphead h1 span { font-size: .4em; letter-spacing: 0; } #zeitgeist { background: #eee; border: 1px solid #c5c5c5; float: right; font-size: 90%; margin-bottom: .5em; margin-left: 1em; margin-top: .5em; padding: 1em; width: 40%; } #zeitgeist h2, fieldset legend a { border-bottom: none; } * html #zeitgeist h2 { padding-top: 10px; } #zeitgeist h2 { margin-top: .4em; } #zeitgeist h3 { border-bottom: 1px solid #ccc; font-size: 16px; margin: 1em 0 0; } #zeitgeist h3 cite { font-size: 12px; font-style: normal; } #zeitgeist li, #zeitgeist p { margin: .2em 0; } #zeitgeist ul { margin: 0 0 .3em .6em; padding: 0 0 0 .6em; } .active td { background: #BEB; } .active .name { background: #9C9; } .alternate.active td { background: #ADA; } .alternate.active .name { background: #8B8; } #namediv, #emaildiv, #uridiv { float: left; } #ajax-response { padding: .5em; } /* A handy div class for hiding controls. Some browsers will disable them when you set display:none; */ .zerosize { height: 0; width: 0; margin: 0; border: 0; padding: 0; overflow: hidden; position: absolute; } /* Box stuff */ .dbx-clone { position: absolute; visibility: hidden; } .dbx-clone, .dbx-clone .dbx-handle-cursor { cursor: move !important; } .dbx-dummy { display: block; width: 0; height: 0; overflow: hidden; } .dbx-group, .dbx-box, .dbx-handle { position: relative; display: block; } #grabit { width: 188px; } * html #themeselect { padding: 0 3px; height: 22px; } /**************************************************************** avoid padding, margins or borders on dbx-box, to reduce visual discrepancies between it and the clone. overall, dbx-box is best left as visually unstyled as possible *****************************************************************/ .dbx-box { margin: 0; padding: 0; border: none; } /* Can change this */ #moremeta fieldset, #advancedstuff fieldset { margin-bottom: 1em; } #moremeta fieldset div { margin: 2px 0 0 0; padding: 7px; } #moremeta { line-height: 130%; margin-right: 15px; position: absolute; right: 5%; width: 14.5em; } #moremeta select { width: 96%; } #slugdiv input, #passworddiv input, #authordiv select, #thumbdiv input, #parentdiv input { margin-top: .5em; width: 90%; } #moremeta h3, #advancedstuff h3 { padding: 3px; font-weight: normal; font-size: 13px; } #advancedstuff div { margin-top: .5em; } #categorydiv ul { list-style: none; padding: 0; margin-left: 10px; } #categorychecklist { height: 12em; overflow: auto; margin-top: 8px; } #categorychecklist li { margin: 0; padding: 0; } #ajaxcat input { border: 1px solid #ccc; } #your-profile #rich_editing { border: none; background: #fff; } #your-profile fieldset { border: 1px solid #ccc; float: left; width: 40%; padding: .5em 2em 1em; margin: 1em 1em 1em 0; } #your-profile fieldset input { width: 100%; font-size: 20px; padding: 2px; } #your-profile fieldset textarea { width: 100%; padding: 2px; } #your-profile legend { font-family: Georgia, "Times New Roman", Times, serif; font-size: 22px; } /* default box styles */ /* toggle state of inner content area */ .dbx-box-open .dbx-content { display: block; } .dbx-box-closed .dbx-content { display: none; } #moremeta .dbx-content { background: url(images/box-butt.gif) no-repeat bottom right; padding-bottom: 15px; padding-right: 2px; } #moremeta fieldset.dbx-box-closed { background: url(images/box-butt.gif) no-repeat bottom; padding-bottom: 9px; } /* handles */ .dbx-handle { background: #2685af; padding: 6px 1em 2px; font-size: 12px; margin: 0; color: #E3EFF5; } #moremeta .dbx-handle { padding: 6px 1em 2px; font-size: 12px; background: #2685af url(images/box-head.gif) no-repeat right; } #moremeta .dbx-box { background: url(images/box-bg.gif) repeat-y right; } #advancedstuff h3.dbx-handle { margin-left: 7px; margin-bottom: -7px; padding: 6px 1em 0 3px; height: 19px; font-size: 12px; background: #2685af url(images/box-head-right.gif) no-repeat top right; } #advancedstuff div.dbx-h-andle-wrapper { margin: 0 0 0 -7px; background: #fff url(images/box-head-left.gif) no-repeat top left; } #advancedstuff div.dbx-content { margin-left: 8px; background: url(images/box-bg-right.gif) repeat-y right; padding: 10px 10px 15px 0; } #postexcerpt div.dbx-content { margin-right: 0; padding-right: 17px; } #advancedstuff div.dbx-c-ontent-wrapper { margin-left: -7px; margin-right: 0; background: url(images/box-bg-left.gif) repeat-y left; } #advancedstuff fieldset.dbx-box { padding-bottom: 9px; margin-left: 6px; background: url(images/box-butt-right.gif) no-repeat bottom right; } #advancedstuff div.dbx-b-ox-wrapper { background: url(images/box-butt-left.gif) no-repeat bottom left; } #advancedstuff .dbx-box-closed div.dbx-c-ontent-wrapper { padding-bottom: 2px; background: url(images/box-butt-left.gif) no-repeat bottom left; } #advancedstuff .dbx-box { background: url(images/box-butt-right.gif) no-repeat bottom right; } /* handle cursors */ .dbx-handle-cursor { cursor: move; } /* toggle images */ a.dbx-toggle, a.dbx-toggle:visited { display: block; overflow: hidden; background-image: url( images/toggle.gif ); position: absolute; top: 0; right: 0; background-repeat: no-repeat; border: 0; margin: 0; padding: 0; } #moremeta a.dbx-toggle, #moremeta a.dbx-toggle-open:visited { height: 25px; width: 27px; background-position: 0 0; } #moremeta a.dbx-toggle-open, #moremeta a.dbx-toggle-open:visited { height: 25px; width: 27px; background-position: 0 -25px; } #advancedstuff a.dbx-toggle, #advancedstuff a.dbx-toggle-open:visited { height: 22px; width: 22px; top: 3px; right: 5px; background-position: 0 -3px; } #advancedstuff a.dbx-toggle-open, #advancedstuff a.dbx-toggle-open:visited { height: 22px; width: 22px; top: 3px; right: 5px; background-position: 0 -28px; } #categorychecklist { margin-right: 6px; } /* additional clone styles */ .dbx-clone { opacity: 0.8; -moz-opacity: 0.8; -khtml-opacity: 0.8; filter: alpha(opacity=80); } #newcat { width: 120px; margin-right: 5px; } input #catadd { background: #a4a4a4; border-bottom: 1px solid #898989; border-left: 1px solid #bcbcbc; border-right: 1px solid #898989; border-top: 1px solid #bcbcbc; color: #fff; font-size: 10px; padding: 0; margin: 0; font-weight: bold; height: 20px; margin-bottom: 2px; text-align: center; width: 37px; } #howto { font-size: 11px; margin: 0 5px; display: block; } #jaxcat { margin: 0; padding: 0; } #ajax-response.alignleft { margin-left: 2em; } #postdivrich #edButtons { padding-left: 3px; } #postdivrich #content, #postdivrich #content:active { border: 1px solid #ccc; } #edButtons input, #edButtons input:active { margin: 0 2px -1px; } #edButtons input.edButtonFore, #edButtons input.edButtonFore:active { background: #f0f0ee; border-bottom: 1px solid #f0f0ee; } #edButtons input.edButtonBack, #edButtons input.edButtonBack:active { background: #fff url( images/fade-butt.png ) repeat-x 0 15px; border-bottom: 1px solid #ccc; } .page-numbers { padding: 4px 7px; border: 1px solid #fff; margin-right: 3px; } a.page-numbers { border: 1px solid #ccc; } a.page-numbers:hover { border: 1px solid #999; } .page-numbers.current { border: 1px solid #999; font-weight: bold; } .pagenav span { font-weight: bold; margin: 0 6px; } a.view-link { position: absolute; right: 5%; margin-right: 220px; text-decoration:underline; } wordpress/wp-admin/xfn.js function GetElementsWithClassName(elementName, className) { var allElements = document.getElementsByTagName(elementName); var elemColl = new Array(); for (i = 0; i < allElements.length; i++) { if (allElements[i].className == className) { elemColl[elemColl.length] = allElements[i]; } } return elemColl; } function meChecked() { var undefined; var eMe = document.getElementById('me'); if (eMe == undefined) return false; else return eMe.checked; } function upit() { var isMe = meChecked(); //document.getElementById('me').checked; var inputColl = GetElementsWithClassName('input', 'valinp'); var results = document.getElementById('link_rel'); var linkText, linkUrl, inputs = ''; for (i = 0; i < inputColl.length; i++) { inputColl[i].disabled = isMe; inputColl[i].parentNode.className = isMe ? 'disabled' : ''; if (!isMe && inputColl[i].checked && inputColl[i].value != '') { inputs += inputColl[i].value + ' '; } } inputs = inputs.substr(0,inputs.length - 1); if (isMe) inputs='me'; results.value = inputs; } function blurry() { if (!document.getElementById) return; var aInputs = document.getElementsByTagName('input'); for (var i = 0; i < aInputs.length; i++) { aInputs[i].onclick = aInputs[i].onkeyup = upit; } } addLoadEvent(blurry);wordpress/wp-app.phpID) ) return $current_user; $current_user = new WP_User($id, $name); return $current_user; } endif; function wa_posts_where_include_drafts_filter($where) { $where = ereg_replace("post_author = ([0-9]+) AND post_status <> 'draft'","post_author = \\1 AND post_status = 'draft'", $where); return $where; } add_filter('posts_where', 'wa_posts_where_include_drafts_filter'); class AtomEntry { var $links = array(); var $categories = array(); } class AtomParser { var $ATOM_CONTENT_ELEMENTS = array('content','summary','title','subtitle','rights'); var $ATOM_SIMPLE_ELEMENTS = array('id','updated','published','draft'); var $depth = 0; var $indent = 2; var $in_content; var $ns_contexts = array(); var $ns_decls = array(); var $is_xhtml = false; var $skipped_div = false; var $entry; function AtomParser() { $this->entry = new AtomEntry(); $this->map_attrs_func = create_function('$k,$v', 'return "$k=\"$v\"";'); $this->map_xmlns_func = create_function('$p,$n', '$xd = "xmlns"; if(strlen($n[0])>0) $xd .= ":{$n[0]}"; return "{$xd}=\"{$n[1]}\"";'); } function parse() { global $app_logging; array_unshift($this->ns_contexts, array()); $parser = xml_parser_create_ns(); xml_set_object($parser, $this); xml_set_element_handler($parser, "start_element", "end_element"); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); xml_set_character_data_handler($parser, "cdata"); xml_set_default_handler($parser, "_default"); xml_set_start_namespace_decl_handler($parser, "start_ns"); xml_set_end_namespace_decl_handler($parser, "end_ns"); $contents = ""; $fp = fopen("php://input", "r"); while(!feof($fp)) { $line = fgets($fp, 4096); if($app_logging) $contents .= $line; if(!xml_parse($parser, $line)) { log_app("xml_parse_error", "line: $line"); $this->error = sprintf(__('XML error: %s at line %d')."\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)); log_app("xml_parse_error", $this->error); return false; } } fclose($fp); xml_parser_free($parser); log_app("AtomParser->parse()",trim($contents)); return true; } function start_element($parser, $name, $attrs) { $tag = array_pop(split(":", $name)); array_unshift($this->ns_contexts, $this->ns_decls); $this->depth++; #print str_repeat(" ", $this->depth * $this->indent) . "start_element('$name')" ."\n"; #print str_repeat(" ", $this->depth+1 * $this->indent) . print_r($this->ns_contexts,true) ."\n"; if(!empty($this->in_content)) { $attrs_prefix = array(); // resolve prefixes for attributes foreach($attrs as $key => $value) { $attrs_prefix[$this->ns_to_prefix($key)] = $this->xml_escape($value); } $attrs_str = join(' ', array_map($this->map_attrs_func, array_keys($attrs_prefix), array_values($attrs_prefix))); if(strlen($attrs_str) > 0) { $attrs_str = " " . $attrs_str; } $xmlns_str = join(' ', array_map($this->map_xmlns_func, array_keys($this->ns_contexts[0]), array_values($this->ns_contexts[0]))); if(strlen($xmlns_str) > 0) { $xmlns_str = " " . $xmlns_str; } // handle self-closing tags (case: a new child found right-away, no text node) if(count($this->in_content) == 2) { array_push($this->in_content, ">"); } array_push($this->in_content, "<". $this->ns_to_prefix($name) ."{$xmlns_str}{$attrs_str}"); } else if(in_array($tag, $this->ATOM_CONTENT_ELEMENTS) || in_array($tag, $this->ATOM_SIMPLE_ELEMENTS)) { $this->in_content = array(); $this->is_xhtml = $attrs['type'] == 'xhtml'; array_push($this->in_content, array($tag,$this->depth)); } else if($tag == 'link') { array_push($this->entry->links, $attrs); } else if($tag == 'category') { array_push($this->entry->categories, $attrs); } $this->ns_decls = array(); } function end_element($parser, $name) { $tag = array_pop(split(":", $name)); if(!empty($this->in_content)) { if($this->in_content[0][0] == $tag && $this->in_content[0][1] == $this->depth) { array_shift($this->in_content); if($this->is_xhtml) { $this->in_content = array_slice($this->in_content, 2, count($this->in_content)-3); } $this->entry->$tag = join('',$this->in_content); $this->in_content = array(); } else { $endtag = $this->ns_to_prefix($name); if (strpos($this->in_content[count($this->in_content)-1], '<' . $endtag) != false) { array_push($this->in_content, "/>"); } else { array_push($this->in_content, ""); } } } array_shift($this->ns_contexts); #print str_repeat(" ", $this->depth * $this->indent) . "end_element('$name')" ."\n"; $this->depth--; } function start_ns($parser, $prefix, $uri) { #print str_repeat(" ", $this->depth * $this->indent) . "starting: " . $prefix . ":" . $uri . "\n"; array_push($this->ns_decls, array($prefix,$uri)); } function end_ns($parser, $prefix) { #print str_repeat(" ", $this->depth * $this->indent) . "ending: #" . $prefix . "#\n"; } function cdata($parser, $data) { #print str_repeat(" ", $this->depth * $this->indent) . "data: #" . $data . "#\n"; if(!empty($this->in_content)) { // handle self-closing tags (case: text node found, need to close element started) if (strpos($this->in_content[count($this->in_content)-1], '<') != false) { array_push($this->in_content, ">"); } array_push($this->in_content, $this->xml_escape($data)); } } function _default($parser, $data) { # when does this gets called? } function ns_to_prefix($qname) { $components = split(":", $qname); $name = array_pop($components); if(!empty($components)) { $ns = join(":",$components); foreach($this->ns_contexts as $context) { foreach($context as $mapping) { if($mapping[1] == $ns && strlen($mapping[0]) > 0) { return "$mapping[0]:$name"; } } } } return $name; } function xml_escape($string) { return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $string ); } } class AtomServer { var $ATOM_CONTENT_TYPE = 'application/atom+xml'; var $CATEGORIES_CONTENT_TYPE = 'application/atomcat+xml'; var $INTROSPECTION_CONTENT_TYPE = 'application/atomserv+xml'; var $ENTRIES_PATH = "posts"; var $CATEGORIES_PATH = "categories"; var $MEDIA_PATH = "attachments"; var $ENTRY_PATH = "post"; var $MEDIA_SINGLE_PATH = "attachment"; var $params = array(); var $script_name = "wp-app.php"; var $media_content_types = array('image/*','audio/*','video/*'); var $atom_content_types = array('application/atom+xml'); var $selectors = array(); // support for head var $do_output = true; function AtomServer() { $this->script_name = array_pop(explode('/',$_SERVER['SCRIPT_NAME'])); $this->selectors = array( '@/service@' => array('GET' => 'get_service'), '@/categories@' => array('GET' => 'get_categories_xml'), '@/post/(\d+)@' => array('GET' => 'get_post', 'PUT' => 'put_post', 'DELETE' => 'delete_post'), '@/posts/?([^/]+)?@' => array('GET' => 'get_posts', 'POST' => 'create_post'), '@/attachments/?(\d+)?@' => array('GET' => 'get_attachment', 'POST' => 'create_attachment'), '@/attachment/file/(\d+)@' => array('GET' => 'get_file', 'PUT' => 'put_file', 'DELETE' => 'delete_file'), '@/attachment/(\d+)@' => array('GET' => 'get_attachment', 'PUT' => 'put_attachment', 'DELETE' => 'delete_attachment'), ); } function handle_request() { $path = $_SERVER['PATH_INFO']; $method = $_SERVER['REQUEST_METHOD']; log_app('REQUEST',"$method $path\n"); //$this->process_conditionals(); // exception case for HEAD (treat exactly as GET, but don't output) if($method == 'HEAD') { $this->do_output = false; $method = 'GET'; } // lame. if(strlen($path) == 0 || $path == '/') { $path = '/service'; } // authenticate regardless of the operation and set the current // user. each handler will decide if auth is required or not. $this->authenticate(); // dispatch foreach($this->selectors as $regex => $funcs) { if(preg_match($regex, $path, $matches)) { if(isset($funcs[$method])) { array_shift($matches); call_user_func_array(array(&$this,$funcs[$method]), $matches); exit(); } else { // only allow what we have handlers for... $this->not_allowed(array_keys($funcs)); } } } // oops, nothing found $this->not_found(); } function get_service() { log_app('function','get_service()'); $entries_url = $this->get_entries_url(); $categories_url = $this->get_categories_url(); $media_url = $this->get_attachments_url(); $accepted_content_types = join(',',$this->media_content_types); $introspection = << WordPress Posts entry WordPress Media $accepted_content_types EOD; $this->output($introspection, $this->INTROSPECTION_CONTENT_TYPE); } function get_categories_xml() { log_app('function','get_categories_xml()'); $home = get_bloginfo_rss('home'); $categories = ""; $cats = get_categories("hierarchical=0&hide_empty=0"); foreach ((array) $cats as $cat) { $categories .= " cat_name) . "\" />\n"; } $output = << $categories EOD; $this->output($output, $this->CATEGORIES_CONTENT_TYPE); } /* * Create Post (No arguments) */ function create_post() { global $blog_id; $this->get_accepted_content_type($this->atom_content_types); $parser = new AtomParser(); if(!$parser->parse()) { $this->client_error(); } $entry = $parser->entry; $publish = (isset($entry->draft) && trim($entry->draft) == 'yes') ? false : true; $cap = ($publish) ? 'publish_posts' : 'edit_posts'; if(!current_user_can($cap)) $this->auth_required('Sorry, you do not have the right to edit/publish new posts.'); $blog_ID = (int ) $blog_id; $post_status = ($publish) ? 'publish' : 'draft'; $post_author = (int) $user->ID; $post_title = $entry->title; $post_content = $entry->content; $post_excerpt = $entry->summary; $post_date = current_time('mysql'); $post_date_gmt = current_time('mysql', 1); $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); log_app('Inserting Post. Data:', print_r($post_data,true)); $postID = wp_insert_post($post_data); if (!$postID) { $this->internal_error('Sorry, your entry could not be posted. Something wrong happened.'); } $output = $this->get_entry($postID); log_app('function',"create_post($postID)"); $this->created($postID, $output); } function get_post($postID) { global $entry; $this->set_current_entry($postID); $output = $this->get_entry($postID); log_app('function',"get_post($postID)"); $this->output($output); } function put_post($postID) { // checked for valid content-types (atom+xml) // quick check and exit $this->get_accepted_content_type($this->atom_content_types); $parser = new AtomParser(); if(!$parser->parse()) { $this->bad_request(); } $parsed = $parser->entry; // check for not found global $entry; $entry = $GLOBALS['entry']; $this->set_current_entry($postID); $this->escape($GLOBALS['entry']); if(!current_user_can('edit_post', $entry['ID'])) $this->auth_required('Sorry, you do not have the right to edit this post.'); $publish = (isset($parsed->draft) && trim($parsed->draft) == 'yes') ? false : true; extract($entry); $post_title = $parsed->title; $post_content = $parsed->content; $post_excerpt = $parsed->summary; // let's not go backwards and make something draft again. if(!$publish && $post_status == 'draft') { $post_status = ($publish) ? 'publish' : 'draft'; } $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); $result = wp_update_post($postdata); if (!$result) { $this->internal_error('For some strange yet very annoying reason, this post could not be edited.'); } log_app('function',"put_post($postID)"); $this->ok(); } function delete_post($postID) { // check for not found global $entry; $this->set_current_entry($postID); if(!current_user_can('edit_post', $postID)) { $this->auth_required('Sorry, you do not have the right to delete this post.'); } if ($entry['post_type'] == 'attachment') { $this->delete_attachment($postID); } else { $result = wp_delete_post($postID); if (!$result) { $this->internal_error('For some strange yet very annoying reason, this post could not be deleted.'); } log_app('function',"delete_post($postID)"); $this->ok(); } } function get_attachment($postID = NULL) { global $entry; if (!isset($postID)) { $this->get_attachments(); } else { $this->set_current_entry($postID); $output = $this->get_entry($postID, 'attachment'); log_app('function',"get_attachment($postID)"); $this->output($output); } } function create_attachment() { global $wp, $wpdb, $wp_query, $blog_id; $type = $this->get_accepted_content_type(); if(!current_user_can('upload_files')) $this->auth_required('You do not have permission to upload files.'); $fp = fopen("php://input", "rb"); $bits = NULL; while(!feof($fp)) { $bits .= fread($fp, 4096); } fclose($fp); $slug = ''; if ( isset( $_SERVER['HTTP_SLUG'] ) ) $slug = sanitize_file_name( $_SERVER['HTTP_SLUG'] ); elseif ( isset( $_SERVER['HTTP_TITLE'] ) ) $slug = sanitize_file_name( $_SERVER['HTTP_TITLE'] ); elseif ( empty( $slug ) ) // just make a random name $slug = substr( md5( uniqid( microtime() ) ), 0, 7); $ext = preg_replace( '|.*/([a-z]+)|', '$1', $_SERVER['CONTENT_TYPE'] ); $slug = "$slug.$ext"; $file = wp_upload_bits( $slug, NULL, $bits); log_app('wp_upload_bits returns:',print_r($file,true)); $url = $file['url']; $file = $file['file']; $filename = basename($file); $header = apply_filters('wp_create_file_in_uploads', $file); // replicate // Construct the attachment array $attachment = array( 'post_title' => $slug, 'post_content' => $slug, 'post_status' => 'attachment', 'post_parent' => 0, 'post_mime_type' => $type, 'guid' => $url ); // Save the data $postID = wp_insert_attachment($attachment, $file, $post); if (!$postID) { $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); } $output = $this->get_entry($postID, 'attachment'); $this->created($postID, $output, 'attachment'); log_app('function',"create_attachment($postID)"); } function put_attachment($postID) { // checked for valid content-types (atom+xml) // quick check and exit $this->get_accepted_content_type($this->atom_content_types); $parser = new AtomParser(); if(!$parser->parse()) { $this->bad_request(); } $parsed = $parser->entry; // check for not found global $entry; $this->set_current_entry($postID); $this->escape($entry); if(!current_user_can('edit_post', $entry['ID'])) $this->auth_required(__('Sorry, you do not have the right to edit this post.')); $publish = (isset($parsed->draft) && trim($parsed->draft) == 'yes') ? false : true; extract($entry); $post_title = $parsed->title; $post_content = $parsed->content; $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); $result = wp_update_post($postdata); if (!$result) { $this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.')); } log_app('function',"put_attachment($postID)"); $this->ok(); } function delete_attachment($postID) { log_app('function',"delete_attachment($postID). File '$location' deleted."); // check for not found global $entry; $this->set_current_entry($postID); if(!current_user_can('edit_post', $postID)) { $this->auth_required(__('Sorry, you do not have the right to delete this post.')); } $location = get_post_meta($entry['ID'], '_wp_attached_file', true); // delete file @unlink($location); // delete attachment $result = wp_delete_post($postID); if (!$result) { $this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.')); } log_app('function',"delete_attachment($postID). File '$location' deleted."); $this->ok(); } function get_file($postID) { // check for not found global $entry; $this->set_current_entry($postID); // then whether user can edit the specific post if(!current_user_can('edit_post', $postID)) { $this->auth_required(__('Sorry, you do not have the right to edit this post.')); } $location = get_post_meta($entry['ID'], '_wp_attached_file', true); $filetype = wp_check_filetype($location); if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext'])) $this->internal_error(__('Error ocurred while accessing post metadata for file location.')); header('Content-Type: ' . $entry['post_mime_type']); $fp = fopen($location, "rb"); while(!feof($fp)) { echo fread($fp, 4096); } fclose($fp); log_app('function',"get_file($postID)"); $this->ok(); } function put_file($postID) { $type = $this->get_accepted_content_type(); // first check if user can upload if(!current_user_can('upload_files')) $this->auth_required(__('You do not have permission to upload files.')); // check for not found global $entry; $this->set_current_entry($postID); // then whether user can edit the specific post if(!current_user_can('edit_post', $postID)) { $this->auth_required(__('Sorry, you do not have the right to edit this post.')); } $location = get_post_meta($entry['ID'], '_wp_attached_file', true); $filetype = wp_check_filetype($location); if(!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext'])) $this->internal_error(__('Error ocurred while accessing post metadata for file location.')); $fp = fopen("php://input", "rb"); $localfp = fopen($location, "w+"); while(!feof($fp)) { fwrite($localfp,fread($fp, 4096)); } fclose($fp); fclose($localfp); log_app('function',"put_file($postID)"); $this->ok(); } function get_entries_url($page = NULL) { global $use_querystring; $url = get_bloginfo('url') . '/' . $this->script_name; if ($use_querystring) { $url .= '?action=/' . $this->ENTRIES_PATH; if(isset($page) && is_int($page)) { $url .= "&eid=$page"; } } else { $url .= '/' . $this->ENTRIES_PATH; if(isset($page) && is_int($page)) { $url .= "/$page"; } } return $url; } function the_entries_url($page = NULL) { $url = $this->get_entries_url($page); echo $url; } function get_categories_url($page = NULL) { global $use_querystring; $url = get_bloginfo('url') . '/' . $this->script_name; if ($use_querystring) { $url .= '?action=/' . $this->CATEGORIES_PATH; } else { $url .= '/' . $this->CATEGORIES_PATH; } return $url; } function the_categories_url() { $url = $this->get_categories_url(); echo $url; } function get_attachments_url($page = NULL) { global $use_querystring; $url = get_bloginfo('url') . '/' . $this->script_name; if ($use_querystring) { $url .= '?action=/' . $this->MEDIA_PATH; if(isset($page) && is_int($page)) { $url .= "&eid=$page"; } } else { $url .= '/' . $this->MEDIA_PATH; if(isset($page) && is_int($page)) { $url .= "/$page"; } } return $url; } function the_attachments_url($page = NULL) { $url = $this->get_attachments_url($page); echo $url; } function get_entry_url($postID = NULL) { global $use_querystring; if(!isset($postID)) { global $post; $postID = (int) $GLOBALS['post']->ID; } if ($use_querystring) { $url = get_bloginfo('url') . '/' . $this->script_name . '?action=/' . $this->ENTRY_PATH . "&eid=$postID"; } else { $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->ENTRY_PATH . "/$postID"; } log_app('function',"get_entry_url() = $url"); return $url; } function the_entry_url($postID = NULL) { $url = $this->get_entry_url($postID); echo $url; } function get_media_url($postID = NULL) { global $use_querystring; if(!isset($postID)) { global $post; $postID = (int) $GLOBALS['post']->ID; } if ($use_querystring) { $url = get_bloginfo('url') . '/' . $this->script_name . '?action=/' . $this->MEDIA_SINGLE_PATH ."&eid=$postID"; } else { $url = get_bloginfo('url') . '/' . $this->script_name . '/' . $this->MEDIA_SINGLE_PATH ."/$postID"; } log_app('function',"get_media_url() = $url"); return $url; } function the_media_url($postID = NULL) { $url = $this->get_media_url($postID); echo $url; } function set_current_entry($postID) { global $entry; log_app('function',"set_current_entry($postID)"); if(!isset($postID)) { // $this->bad_request(); $this->not_found(); } $entry = wp_get_single_post($postID,ARRAY_A); if(!isset($entry) || !isset($entry['ID'])) $this->not_found(); return; } function get_posts_count() { global $wpdb; log_app('function',"get_posts_count()"); return $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_date_gmt < '" . gmdate("Y-m-d H:i:s",time()) . "'"); } function get_posts($page = 1, $post_type = 'post') { log_app('function',"get_posts($page, '$post_type')"); $feed = $this->get_feed($page, $post_type); $this->output($feed); } function get_attachments($page = 1, $post_type = 'attachment') { log_app('function',"get_attachments($page, '$post_type')"); $feed = $this->get_feed($page, $post_type); $this->output($feed); } function get_feed($page = 1, $post_type = 'post') { global $post, $wp, $wp_query, $posts, $wpdb, $blog_id, $post_cache; log_app('function',"get_feed($page, '$post_type')"); ob_start(); if(!isset($page)) { $page = 1; } $page = (int) $page; $count = get_option('posts_per_rss'); $query = "paged=$page&posts_per_page=$count&order=DESC"; if($post_type == 'attachment') { $query .= "&post_type=$post_type"; } query_posts($query); $post = $GLOBALS['post']; $posts = $GLOBALS['posts']; $wp = $GLOBALS['wp']; $wp_query = $GLOBALS['wp_query']; $wpdb = $GLOBALS['wpdb']; $blog_id = (int) $GLOBALS['blog_id']; $post_cache = $GLOBALS['post_cache']; $total_count = $this->get_posts_count(); $last_page = (int) ceil($total_count / $count); $next_page = (($page + 1) > $last_page) ? NULL : $page + 1; $prev_page = ($page - 1) < 1 ? NULL : $page - 1; $last_page = ((int)$last_page == 1 || (int)$last_page == 0) ? NULL : (int) $last_page; ?> the_entries_url() ?> <?php bloginfo_rss('name') ?> Copyright WordPress.com Atom API ID); ?> <![CDATA[<?php the_title() ?>]]> post_status == 'draft' ? 'yes' : 'no') ?> post_status == 'attachment') { ?> ]]> post_content ) ) : ?> ]]> ID); ?> <![CDATA[<?php the_title_rss() ?>]]> post_status == 'draft' ? 'yes' : 'no') ?> post_type == 'attachment') { ?> ]]> post_content ) ) : ?> ]]> auth_required(__("Access Denied.")); endif; ob_end_clean(); log_app('get_entry returning:',$entry); return $entry; } function ok() { log_app('Status','200: OK'); header('Content-Type: text/plain'); status_header('200'); exit; } function no_content() { log_app('Status','204: No Content'); header('Content-Type: text/plain'); status_header('204'); echo "Deleted."; exit; } function internal_error($msg = 'Internal Server Error') { log_app('Status','500: Server Error'); header('Content-Type: text/plain'); status_header('500'); echo $msg; exit; } function bad_request() { log_app('Status','400: Bad Request'); header('Content-Type: text/plain'); status_header('400'); exit; } function length_required() { log_app('Status','411: Length Required'); header("HTTP/1.1 411 Length Required"); header('Content-Type: text/plain'); status_header('411'); exit; } function invalid_media() { log_app('Status','415: Unsupported Media Type'); header("HTTP/1.1 415 Unsupported Media Type"); header('Content-Type: text/plain'); exit; } function not_found() { log_app('Status','404: Not Found'); header('Content-Type: text/plain'); status_header('404'); exit; } function not_allowed($allow) { log_app('Status','405: Not Allowed'); header('Allow: ' . join(',', $allow)); status_header('405'); exit; } function client_error($msg = 'Client Error') { log_app('Status','400: Client Errir'); header('Content-Type: text/plain'); status_header('400'); exit; } function created($post_ID, $content, $post_type = 'post') { global $use_querystring; log_app('created()::$post_ID',"$post_ID, $post_type"); $edit = $this->get_entry_url($post_ID); switch($post_type) { case 'post': $ctloc = $this->get_entry_url($post_ID); break; case 'attachment': if ($use_querystring) { $edit = get_bloginfo('url') . '/' . $this->script_name . "?action=/attachments&eid=$post_ID"; } else { $edit = get_bloginfo('url') . '/' . $this->script_name . "/attachments/$post_ID"; } break; } header('Content-Type: application/atom+xml'); if(isset($ctloc)) header('Content-Location: ' . $ctloc); header('Location: ' . $edit); status_header('201'); echo $content; exit; } function auth_required($msg) { log_app('Status','401: Auth Required'); nocache_headers(); header('WWW-Authenticate: Basic realm="WordPress Atom Protocol"'); header('WWW-Authenticate: Form action="' . get_option('siteurl') . '/wp-login.php"', false); header("HTTP/1.1 401 $msg"); header('Status: ' . $msg); header('Content-Type: plain/text'); echo $msg; exit; } function output($xml, $ctype = "application/atom+xml") { status_header('200'); $xml = ''."\n".$xml; header('Connection: close'); header('Content-Length: '. strlen($xml)); header('Content-Type: ' . $ctype); header('Content-Disposition: attachment; filename=atom.xml'); header('Date: '. date('r')); if($this->do_output) echo $xml; log_app('function', "output:\n$xml"); exit; } function escape(&$array) { global $wpdb; foreach ($array as $k => $v) { if (is_array($v)) { $this->escape($array[$k]); } else if (is_object($v)) { //skip } else { $array[$k] = $wpdb->escape($v); } } } /* * Access credential through various methods and perform login */ function authenticate() { $login_data = array(); $already_md5 = false; log_app("authenticate()",print_r($_ENV, true)); // if using mod_rewrite/ENV hack // http://www.besthostratings.com/articles/http-auth-php-cgi.html if(isset($_SERVER['HTTP_AUTHORIZATION'])) { list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); } // If Basic Auth is working... if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { $login_data = array('login' => $_SERVER['PHP_AUTH_USER'], 'password' => $_SERVER['PHP_AUTH_PW']); } else { // else, do cookie-based authentication if (function_exists('wp_get_cookie_login')) { $login_data = wp_get_cookie_login(); $already_md5 = true; } } // call wp_login and set current user if (!empty($login_data) && wp_login($login_data['login'], $login_data['password'], $already_md5)) { $current_user = new WP_User(0, $login_data['login']); wp_set_current_user($current_user->ID); log_app("authenticate()",$login_data['login']); } } function get_accepted_content_type($types = NULL) { if(!isset($types)) { $types = $this->media_content_types; } if(!isset($_SERVER['CONTENT_LENGTH']) || !isset($_SERVER['CONTENT_TYPE'])) { $this->length_required(); } $type = $_SERVER['CONTENT_TYPE']; list($type,$subtype) = explode('/',$type); list($subtype) = explode(";",$subtype); // strip MIME parameters log_app("get_accepted_content_type", "type=$type, subtype=$subtype"); foreach($types as $t) { list($acceptedType,$acceptedSubtype) = explode('/',$t); if($acceptedType == '*' || $acceptedType == $type) { if($acceptedSubtype == '*' || $acceptedSubtype == $subtype) return $type; } } $this->invalid_media(); } function process_conditionals() { if(empty($this->params)) return; if($_SERVER['REQUEST_METHOD'] == 'DELETE') return; switch($this->params[0]) { case $this->ENTRY_PATH: global $post; $post = wp_get_single_post($this->params[1]); $wp_last_modified = get_post_modified_time('D, d M Y H:i:s', true); $post = NULL; break; case $this->ENTRIES_PATH: $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; break; default: return; } $wp_etag = md5($wp_last_modified); @header("Last-Modified: $wp_last_modified"); @header("ETag: $wp_etag"); // Support for Conditional GET if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) $client_etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']); else $client_etag = false; $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']); // If string is empty, return 0. If not, attempt to parse into a timestamp $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; // Make a timestamp for our most recent modification... $wp_modified_timestamp = strtotime($wp_last_modified); if ( ($client_last_modified && $client_etag) ? (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { status_header( 304 ); exit; } } } $server = new AtomServer(); $server->handle_request(); ?> wordpress/wp-atom.phpwordpress/wp-blog-header.phpwp-config.php file. I need this before we can get started. Need more help? We got it. You can create a wp-config.php file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file.", "WordPress › Error"); } $wp_did_header = true; require_once( dirname(__FILE__) . '/wp-config.php'); wp(); gzip_compression(); require_once(ABSPATH . WPINC . '/template-loader.php'); endif; ?> wordpress/wp-comments-post.php Yget_row("SELECT post_status, comment_status FROM $wpdb->posts WHERE ID = ". $comment_post_ID); if ( empty($status->comment_status) ) { do_action('comment_id_not_found', $comment_post_ID); exit; } elseif ( 'closed' == $status->comment_status ) { do_action('comment_closed', $comment_post_ID); wp_die( __('Sorry, comments are closed for this item.') ); } elseif ( 'draft' == $status->post_status ) { do_action('comment_on_draft', $comment_post_ID); exit; } $comment_author = trim(strip_tags($_POST['author'])); $comment_author_email = trim($_POST['email']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['comment']); // If the user is logged in $user = wp_get_current_user(); if ( $user->ID ) { $comment_author = $wpdb->escape($user->display_name); $comment_author_email = $wpdb->escape($user->user_email); $comment_author_url = $wpdb->escape($user->user_url); if ( current_user_can('unfiltered_html') ) { if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) { kses_remove_filters(); // start with a clean slate kses_init_filters(); // set up the filters } } } else { if ( get_option('comment_registration') ) wp_die( __('Sorry, you must be logged in to post a comment.') ); } $comment_type = ''; if ( get_option('require_name_email') && !$user->ID ) { if ( 6 > strlen($comment_author_email) || '' == $comment_author ) wp_die( __('Error: please fill the required fields (name, email).') ); elseif ( !is_email($comment_author_email)) wp_die( __('Error: please enter a valid email address.') ); } if ( '' == $comment_content ) wp_die( __('Error: please type a comment.') ); $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID'); $comment_id = wp_new_comment( $commentdata ); $comment = get_comment($comment_id); if ( !$user->ID ) : setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_url_' . COOKIEHASH, clean_url($comment->comment_author_url), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN); endif; $location = ( empty($_POST['redirect_to']) ? get_permalink($comment_post_ID) : $_POST['redirect_to'] ) . '#comment-' . $comment_id; $location = apply_filters('comment_post_redirect', $location, $comment); wp_redirect($location); ?> wordpress/wp-commentsrss2.phpwordpress/wp-config.phpY wordpress/wp-config-sample.php wordpress/wp-content/index.php0wordpress/wp-content/plugins/akismet/akismet.gif GIF89ax2}|ϋތ~рӁԉ܈ۅ؄ׇڐ㎭Ꭼ݀Ҋ|҃ՆهقՃz{Ώ}Ѝ⎬Ꮽ〉ߍ~}ϑ䌪~Њшۄ։܉ۂԆفԐ゠Յ؊܁ӆ؈ڃy̅ׄג䒱{{zz|π싩އyxy咰등xڋՙ⋦Ԙᒮܓz̐ئъҗ蔰ݞ薰獩ִ앰ݗ쉤ҌՖ䏪ؒۖ䐫㋥ԙތ֑ꓯ݌ҍ똲!,x2S H*\ȰÇp9Eŋ3jȱǏ Oq /lZɲ˗0cʜI͛C,+7 J(͜|A2QH-Xj"ׯ^ BhӦM¶m"p>Kx7߿ ѨP$THSuAU[vj3eWy$>V ukLHʔf9͝~hҥN#G@bkƬl7Y߿'2nq㣓^ҧSO]sI॰[Wyǩj}k@}U(Abh†&$) *j 8tw s=a|g}jȡ ㏕|`-؞D(ah_!X*te)J橈J6ǤPFy#Ue[䩧P@#آ` .)cmJy!Vcv޹9^Zriy(P*h*Pb鬛`9`4&5#B EZ-*VK(]Raj2;B9Xn +üBfHJJn2@ 4/+'"/.\m /+;r&^Y&q~lԒl1-lQD҆16,pЂs.,A M`;d/hg{.,?s/|6Jmvg ;^8j<-tkw^뽷} x` .z8N:2 k=9Dp9晗y{n3P?C?^@ a'];ٷy^=@ 0Kz,>;`/w}O>9ЃGj}*k? ~?`{Ab &x]}ۜg? 1 v!v 7p@ To~,Ğ a5$`s?g.zq N0x1hRV!E/ы5cu;jeTWB7!9wXt̸= ѐ`"H,ހ\$HI>bp,)@ZR z' Jэ)Q.J$,/9K[ЌV@r *D a)b&\&3gJդ 9Ӟ!E9ER ,&:[NK6g( Vʂ DbrTAm9RV.8CSzHu)T@YSuiWordPress.com API key to use it. You can review the spam it catches under "Comments." To show off your Akismet stats just put <?php akismet_counter(); ?> in your template. Version: 2.0.2 Author: Matt Mullenweg Author URI: http://photomatt.net/ */ // If you hardcode a WP.com API key here, all key config screens will be hidden $wpcom_api_key = ''; function akismet_init() { global $wpcom_api_key, $akismet_api_host, $akismet_api_port; if ( $wpcom_api_key ) $akismet_api_host = $wpcom_api_key . '.rest.akismet.com'; else $akismet_api_host = get_option('wordpress_api_key') . '.rest.akismet.com'; $akismet_api_port = 80; add_action('admin_menu', 'akismet_config_page'); } add_action('init', 'akismet_init'); if ( !function_exists('wp_nonce_field') ) { function akismet_nonce_field($action = -1) { return; } $akismet_nonce = -1; } else { function akismet_nonce_field($action = -1) { return wp_nonce_field($action); } $akismet_nonce = 'akismet-update-key'; } function akismet_config_page() { if ( function_exists('add_submenu_page') ) add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf'); } function akismet_conf() { global $akismet_nonce, $wpcom_api_key; if ( isset($_POST['submit']) ) { if ( function_exists('current_user_can') && !current_user_can('manage_options') ) die(__('Cheatin’ uh?')); check_admin_referer( $akismet_nonce ); $key = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] ); if ( empty($key) ) { $key_status = 'empty'; $ms[] = 'new_key_empty'; delete_option('wordpress_api_key'); } else { $key_status = akismet_verify_key( $key ); } if ( $key_status == 'valid' ) { update_option('wordpress_api_key', $key); $ms[] = 'new_key_valid'; } else if ( $key_status == 'invalid' ) { $ms[] = 'new_key_invalid'; } else if ( $key_status == 'failed' ) { $ms[] = 'new_key_failed'; } if ( isset( $_POST['akismet_discard_month'] ) ) update_option( 'akismet_discard_month', 'true' ); else update_option( 'akismet_discard_month', 'false' ); } if ( $key_status != 'valid' ) { $key = get_option('wordpress_api_key'); if ( empty( $key ) ) { if ( $key_status != 'failed' ) { if ( akismet_verify_key( '1234567890ab' ) == 'failed' ) $ms[] = 'no_connection'; else $ms[] = 'key_empty'; } $key_status = 'empty'; } else { $key_status = akismet_verify_key( $key ); } if ( $key_status == 'valid' ) { $ms[] = 'key_valid'; } else if ( $key_status == 'invalid' ) { delete_option('wordpress_api_key'); $ms[] = 'key_empty'; } else if ( !empty($key) && $key_status == 'failed' ) { $ms[] = 'key_failed'; } } $messages = array( 'new_key_empty' => array('color' => 'aa0', 'text' => __('Your key has been cleared.')), 'new_key_valid' => array('color' => '2d2', 'text' => __('Your key has been verified. Happy blogging!')), 'new_key_invalid' => array('color' => 'd22', 'text' => __('The key you entered is invalid. Please double-check it.')), 'new_key_failed' => array('color' => 'd22', 'text' => __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.')), 'no_connection' => array('color' => 'd22', 'text' => __('There was a problem connecting to the Akismet server. Please check your server configuration.')), 'key_empty' => array('color' => 'aa0', 'text' => sprintf(__('Please enter an API key. (Get your key.)'), 'http://wordpress.com/profile/')), 'key_valid' => array('color' => '2d2', 'text' => __('This key is valid.')), 'key_failed' => array('color' => 'aa0', 'text' => __('The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration.'))); ?>

    Akismet will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as "spam" on the moderation screen and Akismet will learn from the mistakes. If you don\'t have a WordPress.com account yet, you can get one at WordPress.com.'), 'http://akismet.com/', 'http://wordpress.com/api-keys/'); ?>

    (What is this?'); ?>)

    ".__('Akismet is not active.')." ".sprintf(__('You must enter your WordPress.com API key for it to work.'), "plugins.php?page=akismet-key-config")."

    "; } add_action('admin_footer', 'akismet_warning'); return; } // Returns array with headers in $response[0] and body in $response[1] function akismet_http_post($request, $host, $path, $port = 80) { global $wp_version; $http_request = "POST $path HTTP/1.0\r\n"; $http_request .= "Host: $host\r\n"; $http_request .= "Content-Type: application/x-www-form-urlencoded; charset=" . get_option('blog_charset') . "\r\n"; $http_request .= "Content-Length: " . strlen($request) . "\r\n"; $http_request .= "User-Agent: WordPress/$wp_version | Akismet/2.0\r\n"; $http_request .= "\r\n"; $http_request .= $request; $response = ''; if( false != ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { fwrite($fs, $http_request); while ( !feof($fs) ) $response .= fgets($fs, 1160); // One TCP-IP packet fclose($fs); $response = explode("\r\n\r\n", $response, 2); } return $response; } function akismet_auto_check_comment( $comment ) { global $akismet_api_host, $akismet_api_port; $comment['user_ip'] = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] ); $comment['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $comment['referrer'] = $_SERVER['HTTP_REFERER']; $comment['blog'] = get_option('home'); $ignore = array( 'HTTP_COOKIE' ); foreach ( $_SERVER as $key => $value ) if ( !in_array( $key, $ignore ) ) $comment["$key"] = $value; $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ( 'true' == $response[1] ) { add_filter('pre_comment_approved', create_function('$a', 'return \'spam\';')); update_option( 'akismet_spam_count', get_option('akismet_spam_count') + 1 ); $post = get_post( $comment['comment_post_ID'] ); $last_updated = strtotime( $post->post_modified_gmt ); $diff = time() - $last_updated; $diff = $diff / 86400; if ( $post->post_type == 'post' && $diff > 30 && get_option( 'akismet_discard_month' ) == 'true' ) die; } akismet_delete_old(); return $comment; } function akismet_delete_old() { global $wpdb; $now_gmt = current_time('mysql', 1); $wpdb->query("DELETE FROM $wpdb->comments WHERE dateadd('day', -15, stringdate('$now_gmt')) > comment_date_gmt AND comment_approved = 'spam'"); $n = mt_rand(1, 5000); if ( $n == 11 ) // lucky number $wpdb->query("OPTIMIZE TABLE $wpdb->comments"); } function akismet_submit_nonspam_comment ( $comment_id ) { global $wpdb, $akismet_api_host, $akismet_api_port; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'"); if ( !$comment ) // it was deleted return; $comment->blog = get_option('home'); $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-ham", $akismet_api_port); } function akismet_submit_spam_comment ( $comment_id ) { global $wpdb, $akismet_api_host, $akismet_api_port; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'"); if ( !$comment ) // it was deleted return; if ( 'spam' != $comment->comment_approved ) return; $comment->blog = get_option('home'); $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-spam", $akismet_api_port); } add_action('wp_set_comment_status', 'akismet_submit_spam_comment'); add_action('edit_comment', 'akismet_submit_spam_comment'); add_action('preprocess_comment', 'akismet_auto_check_comment', 1); function akismet_spam_count() { global $wpdb, $comments; $count = wp_cache_get( 'akismet_spam_count', 'widget' ); if ( false == $count ) { $count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'"); wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 ); } return $count; } function akismet_manage_page() { global $wpdb, $submenu; $count = sprintf(__('Akismet Spam (%s)'), akismet_spam_count()); if ( isset( $submenu['edit-comments.php'] ) ) add_submenu_page('edit-comments.php', __('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught' ); elseif ( function_exists('add_management_page') ) add_management_page(__('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught'); } function akismet_caught() { global $wpdb, $comment, $akismet_caught, $akismet_nonce; akismet_recheck_queue(); if (isset($_POST['submit']) && 'recover' == $_POST['action'] && ! empty($_POST['not_spam'])) { check_admin_referer( $akismet_nonce ); if ( function_exists('current_user_can') && !current_user_can('moderate_comments') ) die(__('You do not have sufficient permission to moderate comments.')); $i = 0; foreach ($_POST['not_spam'] as $comment): $comment = (int) $comment; if ( function_exists('wp_set_comment_status') ) wp_set_comment_status($comment, 'approve'); else $wpdb->query("UPDATE $wpdb->comments SET comment_approved = '1' WHERE comment_ID = '$comment'"); akismet_submit_nonspam_comment($comment); ++$i; endforeach; $to = add_query_arg( 'recovered', $i, $_SERVER['HTTP_REFERER'] ); wp_redirect( $to ); exit; } if ('delete' == $_POST['action']) { check_admin_referer( $akismet_nonce ); if ( function_exists('current_user_can') && !current_user_can('moderate_comments') ) die(__('You do not have sufficient permission to moderate comments.')); $delete_time = addslashes( $_POST['display_time'] ); $nuked = $wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND '$delete_time' > comment_date_gmt" ); wp_cache_delete( 'akismet_spam_count', 'widget' ); $to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] ); wp_redirect( $to ); exit; } if ( isset( $_GET['recovered'] ) ) { $i = (int) $_GET['recovered']; echo '

    ' . sprintf(__('%1$s comments recovered.'), $i) . "

    "; } if (isset( $_GET['deleted'] ) ) echo '

    ' . __('All spam deleted.') . '

    '; if ( isset( $GLOBALS['submenu']['edit-comments.php'] ) ) $link = 'edit-comments.php'; else $link = 'edit.php'; ?>

    %1$s spam for you since you first installed it.'), number_format($count) ); ?>

    '.__('You have no spam currently in the queue. Must be your lucky day. :)').'

    '; echo '
    '; } else { echo '

    '.__('You can delete all of the spam from your database with a single click. This operation cannot be undone, so you may wish to check to ensure that no legitimate comments got through first. Spam is automatically deleted after 15 days, so don’t sweat it.').'

    '; ?>
       

    '.__('These are the latest comments identified as spam by Akismet. If you see any mistakes, simply mark the comment as "not spam" and Akismet will learn from the submission. If you wish to recover a comment from spam, simply select the comment, and click Not Spam. After 15 days we clean out the junk for you.').'

    '; ?> escape($_POST['s']); $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE (comment_author LIKE '%$s%' OR comment_author_email LIKE '%$s%' OR comment_author_url LIKE ('%$s%') OR comment_author_IP LIKE ('%$s%') OR comment_content LIKE ('%$s%') ) AND comment_approved = 'spam' ORDER BY comment_date DESC"); } else { if ( isset( $_GET['apage'] ) ) $page = (int) $_GET['apage']; else $page = 1; if ( $page < 2 ) $page = 1; $start = ( $page - 1 ) * 50; $end = $start + 50; $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT $start, $end"); $total = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'" ); } if ($comments) { ?> 50 ) { $total_pages = ceil( $total / 50 ); $r = ''; if ( 1 < $page ) { $args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1; $r .= '' . "\n"; } if ( ( $total_pages = ceil( $total / 50 ) ) > 1 ) { for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) : if ( $page == $page_num ) : $r .= "$page_num\n"; else : $p = false; if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) : $args['apage'] = ( 1 == $page_num ) ? '' : $page_num; $r .= '' . ( $page_num ) . "\n"; $in = true; elseif ( $in == true ) : $r .= "...\n"; $in = false; endif; endif; endfor; } if ( ( $page ) * 50 < $total || -1 == $total ) { $args['apage'] = $page + 1; $r .= '' . "\n"; } echo "

    $r

    "; ?>
    " id="akismetsearch">

      comment_date); $post = get_post($comment->comment_post_ID); $post_title = $post->post_title; if ($i % 2) $class = 'class="alternate"'; else $class = ''; echo "\n\t
    • "; ?>

      comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

      — [ comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title; ?> ]

    50 ) { $total_pages = ceil( $total / 50 ); $r = ''; if ( 1 < $page ) { $args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1; $r .= '' . "\n"; } if ( ( $total_pages = ceil( $total / 50 ) ) > 1 ) { for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) : if ( $page == $page_num ) : $r .= "$page_num\n"; else : $p = false; if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) : $args['apage'] = ( 1 == $page_num ) ? '' : $page_num; $r .= '' . ( $page_num ) . "\n"; $in = true; elseif ( $in == true ) : $r .= "...\n"; $in = false; endif; endif; endfor; } if ( ( $page ) * 50 < $total || -1 == $total ) { $args['apage'] = $page + 1; $r .= '' . "\n"; } echo "

    $r

    "; } ?>

       

    '.__('Spam').''; global $submenu; if ( isset( $submenu['edit-comments.php'] ) ) $link = 'edit-comments.php'; else $link = 'edit.php'; echo '

    '.sprintf(__('Akismet has protected your site from %3$s spam comments.'), 'http://akismet.com/', clean_url("$link?page=akismet-admin"), number_format($count) ).'

    '; } add_action('activity_box_end', 'akismet_stats'); if ( 'moderation.php' == $pagenow ) { function akismet_recheck_button( $page ) { global $submenu; if ( isset( $submenu['edit-comments.php'] ) ) $link = 'edit-comments.php'; else $link = 'edit.php'; $button = "" . __('Recheck Queue for Spam') . ""; $page = str_replace( '
    ', '
    ' . $button, $page ); return $page; } if ( $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'" ) ) ob_start( 'akismet_recheck_button' ); } function akismet_recheck_queue() { global $wpdb, $akismet_api_host, $akismet_api_port; if ( !isset( $_GET['recheckqueue'] ) ) return; $moderation = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0'", ARRAY_A ); foreach ( $moderation as $c ) { $c['user_ip'] = $c['comment_author_IP']; $c['user_agent'] = $c['comment_agent']; $c['referrer'] = ''; $c['blog'] = get_option('home'); $id = $c['comment_ID']; $query_string = ''; foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ( 'true' == $response[1] ) { $wpdb->query( "UPDATE $wpdb->comments SET comment_approved = 'spam' WHERE comment_ID = $id" ); } } wp_redirect( $_SERVER['HTTP_REFERER'] ); exit; } function akismet_check_db_comment( $id ) { global $wpdb, $akismet_api_host, $akismet_api_port; $id = (int) $id; $c = $wpdb->get_row( "SELECT * FROM $wpdb->comments WHERE comment_ID = '$id'", ARRAY_A ); if ( !$c ) return; $c['user_ip'] = $c['comment_author_IP']; $c['user_agent'] = $c['comment_agent']; $c['referrer'] = ''; $c['blog'] = get_option('home'); $id = $c['comment_ID']; $query_string = ''; foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); return $response[1]; } // This option causes tons of FPs, was removed in 2.1 function akismet_kill_proxy_check( $option ) { return 0; } add_filter('option_open_proxy_check', 'akismet_kill_proxy_check'); // Widget stuff function widget_akismet_register() { if ( function_exists('register_sidebar_widget') ) : function widget_akismet($args) { extract($args); $options = get_option('widget_akismet'); $count = number_format(get_option('akismet_spam_count')); $text = __('%d spam comments have been blocked by Akismet.'); ?>

    1wordpress/wp-content/plugins/akismet/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins/akismet svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 akismet.gif file 2008-11-20T16:30:40.000000Z 67a9581cbfcbeae70439582269022c45 2008-10-28T18:17:06.112729Z 97 paul has-props akismet.php file 2008-11-20T16:30:40.000000Z 1b0c59c479ff98c61c4b113fc1e659e8 2008-10-28T18:17:06.112729Z 97 paul 0wordpress/wp-content/plugins/akismet/.svn/format8 Hwordpress/wp-content/plugins/akismet/.svn/prop-base/akismet.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Hwordpress/wp-content/plugins/akismet/.svn/text-base/akismet.gif.svn-base GIF89ax2}|ϋތ~рӁԉ܈ۅ؄ׇڐ㎭Ꭼ݀Ҋ|҃ՆهقՃz{Ώ}Ѝ⎬Ꮽ〉ߍ~}ϑ䌪~Њшۄ։܉ۂԆفԐ゠Յ؊܁ӆ؈ڃy̅ׄג䒱{{zz|π싩އyxy咰등xڋՙ⋦Ԙᒮܓz̐ئъҗ蔰ݞ薰獩ִ앰ݗ쉤ҌՖ䏪ؒۖ䐫㋥ԙތ֑ꓯ݌ҍ똲!,x2S H*\ȰÇp9Eŋ3jȱǏ Oq /lZɲ˗0cʜI͛C,+7 J(͜|A2QH-Xj"ׯ^ BhӦM¶m"p>Kx7߿ ѨP$THSuAU[vj3eWy$>V ukLHʔf9͝~hҥN#G@bkƬl7Y߿'2nq㣓^ҧSO]sI॰[Wyǩj}k@}U(Abh†&$) *j 8tw s=a|g}jȡ ㏕|`-؞D(ah_!X*te)J橈J6ǤPFy#Ue[䩧P@#آ` .)cmJy!Vcv޹9^Zriy(P*h*Pb鬛`9`4&5#B EZ-*VK(]Raj2;B9Xn +üBfHJJn2@ 4/+'"/.\m /+;r&^Y&q~lԒl1-lQD҆16,pЂs.,A M`;d/hg{.,?s/|6Jmvg ;^8j<-tkw^뽷} x` .z8N:2 k=9Dp9晗y{n3P?C?^@ a'];ٷy^=@ 0Kz,>;`/w}O>9ЃGj}*k? ~?`{Ab &x]}ۜg? 1 v!v 7p@ To~,Ğ a5$`s?g.zq N0x1hRV!E/ы5cu;jeTWB7!9wXt̸= ѐ`"H,ހ\$HI>bp,)@ZR z' Jэ)Q.J$,/9K[ЌV@r *D a)b&\&3gJդ 9Ӟ!E9ER ,&:[NK6g( Vʂ DbrTAm9RV.8CSzHu)T@YSuiWordPress.com API key to use it. You can review the spam it catches under "Comments." To show off your Akismet stats just put <?php akismet_counter(); ?> in your template. Version: 2.0.2 Author: Matt Mullenweg Author URI: http://photomatt.net/ */ // If you hardcode a WP.com API key here, all key config screens will be hidden $wpcom_api_key = ''; function akismet_init() { global $wpcom_api_key, $akismet_api_host, $akismet_api_port; if ( $wpcom_api_key ) $akismet_api_host = $wpcom_api_key . '.rest.akismet.com'; else $akismet_api_host = get_option('wordpress_api_key') . '.rest.akismet.com'; $akismet_api_port = 80; add_action('admin_menu', 'akismet_config_page'); } add_action('init', 'akismet_init'); if ( !function_exists('wp_nonce_field') ) { function akismet_nonce_field($action = -1) { return; } $akismet_nonce = -1; } else { function akismet_nonce_field($action = -1) { return wp_nonce_field($action); } $akismet_nonce = 'akismet-update-key'; } function akismet_config_page() { if ( function_exists('add_submenu_page') ) add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf'); } function akismet_conf() { global $akismet_nonce, $wpcom_api_key; if ( isset($_POST['submit']) ) { if ( function_exists('current_user_can') && !current_user_can('manage_options') ) die(__('Cheatin’ uh?')); check_admin_referer( $akismet_nonce ); $key = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] ); if ( empty($key) ) { $key_status = 'empty'; $ms[] = 'new_key_empty'; delete_option('wordpress_api_key'); } else { $key_status = akismet_verify_key( $key ); } if ( $key_status == 'valid' ) { update_option('wordpress_api_key', $key); $ms[] = 'new_key_valid'; } else if ( $key_status == 'invalid' ) { $ms[] = 'new_key_invalid'; } else if ( $key_status == 'failed' ) { $ms[] = 'new_key_failed'; } if ( isset( $_POST['akismet_discard_month'] ) ) update_option( 'akismet_discard_month', 'true' ); else update_option( 'akismet_discard_month', 'false' ); } if ( $key_status != 'valid' ) { $key = get_option('wordpress_api_key'); if ( empty( $key ) ) { if ( $key_status != 'failed' ) { if ( akismet_verify_key( '1234567890ab' ) == 'failed' ) $ms[] = 'no_connection'; else $ms[] = 'key_empty'; } $key_status = 'empty'; } else { $key_status = akismet_verify_key( $key ); } if ( $key_status == 'valid' ) { $ms[] = 'key_valid'; } else if ( $key_status == 'invalid' ) { delete_option('wordpress_api_key'); $ms[] = 'key_empty'; } else if ( !empty($key) && $key_status == 'failed' ) { $ms[] = 'key_failed'; } } $messages = array( 'new_key_empty' => array('color' => 'aa0', 'text' => __('Your key has been cleared.')), 'new_key_valid' => array('color' => '2d2', 'text' => __('Your key has been verified. Happy blogging!')), 'new_key_invalid' => array('color' => 'd22', 'text' => __('The key you entered is invalid. Please double-check it.')), 'new_key_failed' => array('color' => 'd22', 'text' => __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.')), 'no_connection' => array('color' => 'd22', 'text' => __('There was a problem connecting to the Akismet server. Please check your server configuration.')), 'key_empty' => array('color' => 'aa0', 'text' => sprintf(__('Please enter an API key. (Get your key.)'), 'http://wordpress.com/profile/')), 'key_valid' => array('color' => '2d2', 'text' => __('This key is valid.')), 'key_failed' => array('color' => 'aa0', 'text' => __('The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration.'))); ?>

    Akismet will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as "spam" on the moderation screen and Akismet will learn from the mistakes. If you don\'t have a WordPress.com account yet, you can get one at WordPress.com.'), 'http://akismet.com/', 'http://wordpress.com/api-keys/'); ?>

    (What is this?'); ?>)

    ".__('Akismet is not active.')." ".sprintf(__('You must enter your WordPress.com API key for it to work.'), "plugins.php?page=akismet-key-config")."

    "; } add_action('admin_footer', 'akismet_warning'); return; } // Returns array with headers in $response[0] and body in $response[1] function akismet_http_post($request, $host, $path, $port = 80) { global $wp_version; $http_request = "POST $path HTTP/1.0\r\n"; $http_request .= "Host: $host\r\n"; $http_request .= "Content-Type: application/x-www-form-urlencoded; charset=" . get_option('blog_charset') . "\r\n"; $http_request .= "Content-Length: " . strlen($request) . "\r\n"; $http_request .= "User-Agent: WordPress/$wp_version | Akismet/2.0\r\n"; $http_request .= "\r\n"; $http_request .= $request; $response = ''; if( false != ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { fwrite($fs, $http_request); while ( !feof($fs) ) $response .= fgets($fs, 1160); // One TCP-IP packet fclose($fs); $response = explode("\r\n\r\n", $response, 2); } return $response; } function akismet_auto_check_comment( $comment ) { global $akismet_api_host, $akismet_api_port; $comment['user_ip'] = preg_replace( '/[^0-9., ]/', '', $_SERVER['REMOTE_ADDR'] ); $comment['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $comment['referrer'] = $_SERVER['HTTP_REFERER']; $comment['blog'] = get_option('home'); $ignore = array( 'HTTP_COOKIE' ); foreach ( $_SERVER as $key => $value ) if ( !in_array( $key, $ignore ) ) $comment["$key"] = $value; $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ( 'true' == $response[1] ) { add_filter('pre_comment_approved', create_function('$a', 'return \'spam\';')); update_option( 'akismet_spam_count', get_option('akismet_spam_count') + 1 ); $post = get_post( $comment['comment_post_ID'] ); $last_updated = strtotime( $post->post_modified_gmt ); $diff = time() - $last_updated; $diff = $diff / 86400; if ( $post->post_type == 'post' && $diff > 30 && get_option( 'akismet_discard_month' ) == 'true' ) die; } akismet_delete_old(); return $comment; } function akismet_delete_old() { global $wpdb; $now_gmt = current_time('mysql', 1); $wpdb->query("DELETE FROM $wpdb->comments WHERE dateadd('day', -15, stringdate('$now_gmt')) > comment_date_gmt AND comment_approved = 'spam'"); $n = mt_rand(1, 5000); if ( $n == 11 ) // lucky number $wpdb->query("OPTIMIZE TABLE $wpdb->comments"); } function akismet_submit_nonspam_comment ( $comment_id ) { global $wpdb, $akismet_api_host, $akismet_api_port; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'"); if ( !$comment ) // it was deleted return; $comment->blog = get_option('home'); $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-ham", $akismet_api_port); } function akismet_submit_spam_comment ( $comment_id ) { global $wpdb, $akismet_api_host, $akismet_api_port; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_id'"); if ( !$comment ) // it was deleted return; if ( 'spam' != $comment->comment_approved ) return; $comment->blog = get_option('home'); $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, "/1.1/submit-spam", $akismet_api_port); } add_action('wp_set_comment_status', 'akismet_submit_spam_comment'); add_action('edit_comment', 'akismet_submit_spam_comment'); add_action('preprocess_comment', 'akismet_auto_check_comment', 1); function akismet_spam_count() { global $wpdb, $comments; $count = wp_cache_get( 'akismet_spam_count', 'widget' ); if ( false == $count ) { $count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'"); wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 ); } return $count; } function akismet_manage_page() { global $wpdb, $submenu; $count = sprintf(__('Akismet Spam (%s)'), akismet_spam_count()); if ( isset( $submenu['edit-comments.php'] ) ) add_submenu_page('edit-comments.php', __('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught' ); elseif ( function_exists('add_management_page') ) add_management_page(__('Akismet Spam'), $count, 'moderate_comments', 'akismet-admin', 'akismet_caught'); } function akismet_caught() { global $wpdb, $comment, $akismet_caught, $akismet_nonce; akismet_recheck_queue(); if (isset($_POST['submit']) && 'recover' == $_POST['action'] && ! empty($_POST['not_spam'])) { check_admin_referer( $akismet_nonce ); if ( function_exists('current_user_can') && !current_user_can('moderate_comments') ) die(__('You do not have sufficient permission to moderate comments.')); $i = 0; foreach ($_POST['not_spam'] as $comment): $comment = (int) $comment; if ( function_exists('wp_set_comment_status') ) wp_set_comment_status($comment, 'approve'); else $wpdb->query("UPDATE $wpdb->comments SET comment_approved = '1' WHERE comment_ID = '$comment'"); akismet_submit_nonspam_comment($comment); ++$i; endforeach; $to = add_query_arg( 'recovered', $i, $_SERVER['HTTP_REFERER'] ); wp_redirect( $to ); exit; } if ('delete' == $_POST['action']) { check_admin_referer( $akismet_nonce ); if ( function_exists('current_user_can') && !current_user_can('moderate_comments') ) die(__('You do not have sufficient permission to moderate comments.')); $delete_time = addslashes( $_POST['display_time'] ); $nuked = $wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND '$delete_time' > comment_date_gmt" ); wp_cache_delete( 'akismet_spam_count', 'widget' ); $to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] ); wp_redirect( $to ); exit; } if ( isset( $_GET['recovered'] ) ) { $i = (int) $_GET['recovered']; echo '

    ' . sprintf(__('%1$s comments recovered.'), $i) . "

    "; } if (isset( $_GET['deleted'] ) ) echo '

    ' . __('All spam deleted.') . '

    '; if ( isset( $GLOBALS['submenu']['edit-comments.php'] ) ) $link = 'edit-comments.php'; else $link = 'edit.php'; ?>

    %1$s spam for you since you first installed it.'), number_format($count) ); ?>

    '.__('You have no spam currently in the queue. Must be your lucky day. :)').'

    '; echo '
    '; } else { echo '

    '.__('You can delete all of the spam from your database with a single click. This operation cannot be undone, so you may wish to check to ensure that no legitimate comments got through first. Spam is automatically deleted after 15 days, so don’t sweat it.').'

    '; ?>
       

    '.__('These are the latest comments identified as spam by Akismet. If you see any mistakes, simply mark the comment as "not spam" and Akismet will learn from the submission. If you wish to recover a comment from spam, simply select the comment, and click Not Spam. After 15 days we clean out the junk for you.').'

    '; ?> escape($_POST['s']); $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE (comment_author LIKE '%$s%' OR comment_author_email LIKE '%$s%' OR comment_author_url LIKE ('%$s%') OR comment_author_IP LIKE ('%$s%') OR comment_content LIKE ('%$s%') ) AND comment_approved = 'spam' ORDER BY comment_date DESC"); } else { if ( isset( $_GET['apage'] ) ) $page = (int) $_GET['apage']; else $page = 1; if ( $page < 2 ) $page = 1; $start = ( $page - 1 ) * 50; $end = $start + 50; $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT $start, $end"); $total = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'" ); } if ($comments) { ?> 50 ) { $total_pages = ceil( $total / 50 ); $r = ''; if ( 1 < $page ) { $args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1; $r .= '' . "\n"; } if ( ( $total_pages = ceil( $total / 50 ) ) > 1 ) { for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) : if ( $page == $page_num ) : $r .= "$page_num\n"; else : $p = false; if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) : $args['apage'] = ( 1 == $page_num ) ? '' : $page_num; $r .= '' . ( $page_num ) . "\n"; $in = true; elseif ( $in == true ) : $r .= "...\n"; $in = false; endif; endif; endfor; } if ( ( $page ) * 50 < $total || -1 == $total ) { $args['apage'] = $page + 1; $r .= '' . "\n"; } echo "

    $r

    "; ?>
    " id="akismetsearch">

      comment_date); $post = get_post($comment->comment_post_ID); $post_title = $post->post_title; if ($i % 2) $class = 'class="alternate"'; else $class = ''; echo "\n\t
    • "; ?>

      comment_author_email) { ?>| comment_author_url && 'http://' != $comment->comment_author_url) { ?> | |

      — [ comment_post_ID); $post_title = wp_specialchars( $post->post_title, 'double' ); $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title; ?> ]

    50 ) { $total_pages = ceil( $total / 50 ); $r = ''; if ( 1 < $page ) { $args['apage'] = ( 1 == $page - 1 ) ? '' : $page - 1; $r .= '' . "\n"; } if ( ( $total_pages = ceil( $total / 50 ) ) > 1 ) { for ( $page_num = 1; $page_num <= $total_pages; $page_num++ ) : if ( $page == $page_num ) : $r .= "$page_num\n"; else : $p = false; if ( $page_num < 3 || ( $page_num >= $page - 3 && $page_num <= $page + 3 ) || $page_num > $total_pages - 3 ) : $args['apage'] = ( 1 == $page_num ) ? '' : $page_num; $r .= '' . ( $page_num ) . "\n"; $in = true; elseif ( $in == true ) : $r .= "...\n"; $in = false; endif; endif; endfor; } if ( ( $page ) * 50 < $total || -1 == $total ) { $args['apage'] = $page + 1; $r .= '' . "\n"; } echo "

    $r

    "; } ?>

       

    '.__('Spam').''; global $submenu; if ( isset( $submenu['edit-comments.php'] ) ) $link = 'edit-comments.php'; else $link = 'edit.php'; echo '

    '.sprintf(__('Akismet has protected your site from %3$s spam comments.'), 'http://akismet.com/', clean_url("$link?page=akismet-admin"), number_format($count) ).'

    '; } add_action('activity_box_end', 'akismet_stats'); if ( 'moderation.php' == $pagenow ) { function akismet_recheck_button( $page ) { global $submenu; if ( isset( $submenu['edit-comments.php'] ) ) $link = 'edit-comments.php'; else $link = 'edit.php'; $button = "" . __('Recheck Queue for Spam') . ""; $page = str_replace( '
    ', '
    ' . $button, $page ); return $page; } if ( $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = '0'" ) ) ob_start( 'akismet_recheck_button' ); } function akismet_recheck_queue() { global $wpdb, $akismet_api_host, $akismet_api_port; if ( !isset( $_GET['recheckqueue'] ) ) return; $moderation = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0'", ARRAY_A ); foreach ( $moderation as $c ) { $c['user_ip'] = $c['comment_author_IP']; $c['user_agent'] = $c['comment_agent']; $c['referrer'] = ''; $c['blog'] = get_option('home'); $id = $c['comment_ID']; $query_string = ''; foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ( 'true' == $response[1] ) { $wpdb->query( "UPDATE $wpdb->comments SET comment_approved = 'spam' WHERE comment_ID = $id" ); } } wp_redirect( $_SERVER['HTTP_REFERER'] ); exit; } function akismet_check_db_comment( $id ) { global $wpdb, $akismet_api_host, $akismet_api_port; $id = (int) $id; $c = $wpdb->get_row( "SELECT * FROM $wpdb->comments WHERE comment_ID = '$id'", ARRAY_A ); if ( !$c ) return; $c['user_ip'] = $c['comment_author_IP']; $c['user_agent'] = $c['comment_agent']; $c['referrer'] = ''; $c['blog'] = get_option('home'); $id = $c['comment_ID']; $query_string = ''; foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); return $response[1]; } // This option causes tons of FPs, was removed in 2.1 function akismet_kill_proxy_check( $option ) { return 0; } add_filter('option_open_proxy_check', 'akismet_kill_proxy_check'); // Widget stuff function widget_akismet_register() { if ( function_exists('register_sidebar_widget') ) : function widget_akismet($args) { extract($args); $options = get_option('widget_akismet'); $count = number_format(get_option('akismet_spam_count')); $text = __('%d spam comments have been blocked by Akismet.'); ?>

    &wordpress/wp-content/plugins/hello.phpHello, Dolly in the upper right of your admin screen on every page. Author: Matt Mullenweg Version: 1.5 Author URI: http://photomatt.net/ */ // These are the lyrics to Hello Dolly $lyrics = "Hello, Dolly Well, hello, Dolly It's so nice to have you back where you belong You're lookin' swell, Dolly I can tell, Dolly You're still glowin', you're still crowin' You're still goin' strong We feel the room swayin' While the band's playin' One of your old favourite songs from way back when So, take her wrap, fellas Find her an empty lap, fellas Dolly'll never go away again Hello, Dolly Well, hello, Dolly It's so nice to have you back where you belong You're lookin' swell, Dolly I can tell, Dolly You're still glowin', you're still crowin' You're still goin' strong We feel the room swayin' While the band's playin' One of your old favourite songs from way back when Golly, gee, fellas Find her a vacant knee, fellas Dolly'll never go away Dolly'll never go away Dolly'll never go away again"; // Here we split it into lines $lyrics = explode("\n", $lyrics); // And then randomly choose a line $chosen = wptexturize( $lyrics[ mt_rand(0, count($lyrics) - 1) ] ); // This just echoes the chosen line, we'll position it later function hello_dolly() { global $chosen; echo "

    $chosen

    "; } // Now we set that function up to execute when the admin_footer action is called add_action('admin_footer', 'hello_dolly'); // We need some CSS to position the paragraph function dolly_css() { echo " "; } add_action('admin_head', 'dolly_css'); ?>)wordpress/wp-content/plugins/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 hello.php file 2008-11-20T16:30:40.000000Z a471dbc0e9b9de25384f36ea5b0c180c 2008-10-28T18:17:06.112729Z 97 paul zlinks dir akismet dir (wordpress/wp-content/plugins/.svn/format8 >wordpress/wp-content/plugins/.svn/text-base/hello.php.svn-baseHello, Dolly in the upper right of your admin screen on every page. Author: Matt Mullenweg Version: 1.5 Author URI: http://photomatt.net/ */ // These are the lyrics to Hello Dolly $lyrics = "Hello, Dolly Well, hello, Dolly It's so nice to have you back where you belong You're lookin' swell, Dolly I can tell, Dolly You're still glowin', you're still crowin' You're still goin' strong We feel the room swayin' While the band's playin' One of your old favourite songs from way back when So, take her wrap, fellas Find her an empty lap, fellas Dolly'll never go away again Hello, Dolly Well, hello, Dolly It's so nice to have you back where you belong You're lookin' swell, Dolly I can tell, Dolly You're still glowin', you're still crowin' You're still goin' strong We feel the room swayin' While the band's playin' One of your old favourite songs from way back when Golly, gee, fellas Find her a vacant knee, fellas Dolly'll never go away Dolly'll never go away Dolly'll never go away again"; // Here we split it into lines $lyrics = explode("\n", $lyrics); // And then randomly choose a line $chosen = wptexturize( $lyrics[ mt_rand(0, count($lyrics) - 1) ] ); // This just echoes the chosen line, we'll position it later function hello_dolly() { global $chosen; echo "

    $chosen

    "; } // Now we set that function up to execute when the admin_footer action is called add_action('admin_footer', 'hello_dolly'); // We need some CSS to position the paragraph function dolly_css() { echo " "; } add_action('admin_head', 'dolly_css'); ?>6wordpress/wp-content/plugins/zlinks/add_annotation.phpj", $body); $body = hyperlink_urls($body, 30, '', '...', false); } $date = date('Y-m-d'); $time = date('H:i:s'); global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; // Filtering out bad HTML. Prevent HTML code injection $filter_annotation = new lib_filter(); $body = $filter_annotation->go($body); $insert = "INSERT INTO " . $table_name . " (partial_uri, author_id, body, annotated_resource, created) " . "VALUES ('".quote_smart($partial_uri)."','".quote_smart($author)."', '".quote_smart($body)."', '".quote_smart($annotated_resource)."', '$date $time')"; $results = $wpdb->query( $insert ); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; echo "\n"; // If user shares annotations, then we have to ping http://pingthesemanticweb.com if(get_option("zlinks_option_private_".$author) == "false" || get_option("zlinks_option_private_".$author) == "") { $query = "SELECT * FROM " . $table_name . " WHERE created = '$date $time'"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { pingPTSW($partial_uri.$annotation->id); } } function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not a number or a numeric string if (!is_numeric($value)) { $value = mysql_escape_string($value); } return $value; } // From: http://www.coffee2code.com // mode: 0=full url; 1=host-only ;11+=number of characters to truncate after function hyperlink_urls ($text, $mode='0', $trunc_before='', $trunc_after='...', $open_in_new_window=true) { $text = ' ' . $text . ' '; $new_win_txt = ($open_in_new_window) ? ' target="_blank"' : ''; // Hyperlink Class B domains *.(com|org|net|gov|edu|us|info|biz|ws|name|tv)(/*) $text = preg_replace("#([\s{}\(\)\[\]])([A-Za-z0-9\-\.]+)\.(com|org|net|gov|edu|us|info|biz|ws|name|tv)((?:/[^\s{}\(\)\[\]]*[^\.,\s{}\(\)\[\]]?)?)#ie", "'$1' . truncate_link(\"$2.$3$4\", \"$mode\", \"$trunc_before\", \"$trunc_after\") . ''", $text); // Hyperlink anything with an explicit protocol $text = preg_replace("#([\s{}\(\)\[\]])(([a-z]+?)://([A-Za-z_0-9\-]+\.([^\s{}\(\)\[\]]+[^\s,\.\;{}\(\)\[\]])))#ie", "'$1' . truncate_link(\"$4\", \"$mode\", \"$trunc_before\", \"$trunc_after\") . ''", $text); // Hyperlink e-mail addresses $text = preg_replace("#([\s{}\(\)\[\]])([A-Za-z0-9\-_\.]+?)@([^\s,{}\(\)\[\]]+\.[^\s.,{}\(\)\[\]]+)#ie", "'$1' . truncate_link(\"$2@$3\", \"$mode\", \"$trunc_before\", \"$trunc_after\") . ''", $text); return substr($text,1,strlen($text)-2); } function truncate_link($url, $mode='0', $trunc_before='', $trunc_after='...') { if (1 == $mode) { $url = preg_replace("/(([a-z]+?):\\/\\/[A-Za-z0-9\-\.]+).*/i", "$1", $url); $url = $trunc_before . preg_replace("/([A-Za-z0-9\-\.]+\.(com|org|net|gov|edu|us|info|biz|ws|name|tv)).*/i", "$1", $url) . $trunc_after; } elseif (($mode > 10) && (strlen($url) > $mode)) { $url = $trunc_before . substr($url, 0, $mode) . $trunc_after; } return $url; } ?> Awordpress/wp-content/plugins/zlinks/annotations/annotation.n3.php prefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE id = '$id'"; $annotations = $wpdb->get_results($query); echo "@prefix annotea: .\n"; echo "@prefix dcterms: .\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "<".escape_space(htmlspecialchars($annotation->partial_uri.$annotation->id))."> a annotea:Annotation ;\n"; echo " annotea:annotates <".escape_space(htmlspecialchars($annotation->annotated_resource))."> ;\n"; echo " annotea:body \"\"\"".triple_quote($annotation->body)."\"\"\" ;\n"; echo " dcterms:creator <".escape_space(htmlspecialchars($author_uri))."> ;\n"; echo " dcterms:date \"".triple_quote($annotation->created)."\" .\n\n"; } } ?> >wordpress/wp-content/plugins/zlinks/annotations/annotation.phpV Bwordpress/wp-content/plugins/zlinks/annotations/annotation.rdf.phpprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE id = '$id'"; $annotations = $wpdb->get_results($query); echo "\n"; echo "\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "partial_uri.$annotation->id."\">\n"; echo " annotated_resource))."\" />\n"; echo " ".htmlspecialchars($annotation->body)."\n"; echo " \n"; echo " ".htmlspecialchars($annotation->created)."\n"; echo "\n"; } } echo "\n"; ?> Bwordpress/wp-content/plugins/zlinks/annotations/annotations.n3.phpprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " ORDER BY created"; $annotations = $wpdb->get_results($query); echo "@prefix annotea: .\n"; echo "@prefix dcterms: .\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "<".$annotation->partial_uri.$annotation->id."> a annotea:Annotation ;\n"; echo " annotea:annotates <".escape_space(htmlspecialchars($annotation->annotated_resource))."> ;\n"; echo " annotea:body \"\"\"".triple_quote($annotation->body)."\"\"\" ;\n"; echo " dcterms:creator <".escape_space(htmlspecialchars($author_uri))."> ;\n"; echo " dcterms:date \"".triple_quote($annotation->created)."\" .\n\n"; } } ?> Cwordpress/wp-content/plugins/zlinks/annotations/annotations.rdf.phpprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " ORDER BY created"; $annotations = $wpdb->get_results($query); echo "\n"; echo "\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "partial_uri.$annotation->id."\">\n"; echo " annotated_resource))."\" />\n"; echo " ".htmlspecialchars($annotation->body)."\n"; echo " \n"; echo " ".htmlspecialchars($annotation->created)."\n"; echo "\n"; } } echo "\n"; ?> 9wordpress/wp-content/plugins/zlinks/annotations/index.phpR 3wordpress/wp-content/plugins/zlinks/annotations.phpprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE annotated_resource = '$uri' ORDER BY created"; $annotations = $wpdb->get_results($query); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; foreach ($annotations as $annotation) { echo "\n"; echo " ".$annotation->id."\n"; echo " ".$annotation->partial_uri."\n"; echo " ".$annotation->author."\n"; echo " ".htmlspecialchars($annotation->body)."\n"; echo " ".$annotation->created."\n"; echo "\n"; } echo "\n" ?> prefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE id = '$id'"; $annotations = $wpdb->get_results($query); echo "@prefix annotea: .\n"; echo "@prefix dcterms: .\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "<".escape_space(htmlspecialchars($annotation->partial_uri.$annotation->id))."> a annotea:Annotation ;\n"; echo " annotea:annotates <".escape_space(htmlspecialchars($annotation->annotated_resource))."> ;\n"; echo " annotea:body \"\"\"".triple_quote($annotation->body)."\"\"\" ;\n"; echo " dcterms:creator <".escape_space(htmlspecialchars($author_uri))."> ;\n"; echo " dcterms:date \"".triple_quote($annotation->created)."\" .\n\n"; } } ?> Vwordpress/wp-content/plugins/zlinks/annotations/.svn/text-base/annotation.php.svn-baseV Zwordpress/wp-content/plugins/zlinks/annotations/.svn/text-base/annotation.rdf.php.svn-baseprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE id = '$id'"; $annotations = $wpdb->get_results($query); echo "\n"; echo "\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "partial_uri.$annotation->id."\">\n"; echo " annotated_resource))."\" />\n"; echo " ".htmlspecialchars($annotation->body)."\n"; echo " \n"; echo " ".htmlspecialchars($annotation->created)."\n"; echo "\n"; } } echo "\n"; ?> Zwordpress/wp-content/plugins/zlinks/annotations/.svn/text-base/annotations.n3.php.svn-baseprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " ORDER BY created"; $annotations = $wpdb->get_results($query); echo "@prefix annotea: .\n"; echo "@prefix dcterms: .\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "<".$annotation->partial_uri.$annotation->id."> a annotea:Annotation ;\n"; echo " annotea:annotates <".escape_space(htmlspecialchars($annotation->annotated_resource))."> ;\n"; echo " annotea:body \"\"\"".triple_quote($annotation->body)."\"\"\" ;\n"; echo " dcterms:creator <".escape_space(htmlspecialchars($author_uri))."> ;\n"; echo " dcterms:date \"".triple_quote($annotation->created)."\" .\n\n"; } } ?> [wordpress/wp-content/plugins/zlinks/annotations/.svn/text-base/annotations.rdf.php.svn-baseprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " ORDER BY created"; $annotations = $wpdb->get_results($query); echo "\n"; echo "\n"; // http://foo.com/wp-content/plugins/zlinks/annotations/?id=$id foreach ($annotations as $annotation) { if(get_option("zlinks_option_private_".$annotation->author_id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$annotation->author_id; if(get_option("zlinks_option_uri_".$annotation->author_id) == "existing" && get_option("zlinks_option_uri_existing_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$annotation->author_id); } else if(get_option("zlinks_option_uri_".$annotation->author_id) == "same_as" && get_option("zlinks_option_uri_sameas_".$annotation->author_id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$annotation->author_id); } echo "partial_uri.$annotation->id."\">\n"; echo " annotated_resource))."\" />\n"; echo " ".htmlspecialchars($annotation->body)."\n"; echo " \n"; echo " ".htmlspecialchars($annotation->created)."\n"; echo "\n"; } } echo "\n"; ?> Qwordpress/wp-content/plugins/zlinks/annotations/.svn/text-base/index.php.svn-baseR 9wordpress/wp-content/plugins/zlinks/authors/author.n3.php &prefix . "zlinks_annotations"; $table_authors = $wpdb->prefix . "zlinks_authors"; $id = ""; if (isset($_GET['id'])) { $id = $_GET['id']; } $user_info = get_userdata($id); $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; $output = ""; $output .= "@prefix foaf: .\n"; $output .= "@prefix dcterms: .\n"; $output .= "@prefix owl: .\n"; if(get_option("zlinks_option_private_".$id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$id; if(get_option("zlinks_option_uri_".$id) == "existing" && get_option("zlinks_option_uri_existing_".$id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$id); } else if(get_option("zlinks_option_uri_".$id) == "same_as" && get_option("zlinks_option_uri_sameas_".$id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$id); } $output .= "<$author_uri> a foaf:Person ;\n"; if($user_info->first_name != "") { $output .= " foaf:firstName \"".triple_quote($user_info->first_name)."\" ;\n"; } if($user_info->last_name != "") { $output .= " foaf:family_name \"".triple_quote($user_info->last_name)."\" ;\n"; } if($user_info->nickname != "") { $output .= " foaf:nick \"".triple_quote($user_info->nickname)."\" ;\n"; } if($user_info->user_url != "") { $output .= " foaf:homepage <".escape_space(htmlspecialchars($user_info->user_url))."> ;\n"; } if($user_info->user_email != "") { $output .= " foaf:mbox_sha1sum \"".sha1($user_info->user_email)."\" ;\n"; } // Link each created annotation with its author $query = "SELECT * FROM " . $table_annotations . " WHERE author_id = '$id'"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { $output .= " foaf:made <".escape_space(htmlspecialchars($annotation->partial_uri.$annotation->id))."> ;\n"; } // Check if there is an URI defined for that author. If so, make the link between the two author resources. $author_uri = ""; if(get_option("zlinks_option_uri_".$id) == "same_as") { $output .= " owl:sameAs <".escape_space(htmlspecialchars(get_option("zlinks_option_uri_sameas_".$id)))."> ;\n"; } $output = substr($output, 0, strlen($output) - 2).".\n"; } echo $output; ?> :wordpress/wp-content/plugins/zlinks/authors/author.rdf.php oprefix . "zlinks_annotations"; $table_authors = $wpdb->prefix . "zlinks_authors"; $id = ""; if (isset($_GET['id'])) { $id = $_GET['id']; } $user_info = get_userdata($id); $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; $output = ""; $output .= "\n"; $output .= "\n"; if(get_option("zlinks_option_private_".$id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$id; if(get_option("zlinks_option_uri_".$id) == "existing" && get_option("zlinks_option_uri_existing_".$id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$id); } else if(get_option("zlinks_option_uri_".$id) == "same_as" && get_option("zlinks_option_uri_sameas_".$id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$id); } $output .= " \n"; if($user_info->first_name != "") { $output .= " ".htmlspecialchars($user_info->first_name)."\n"; } if($user_info->last_name != "") { $output .= " ".htmlspecialchars($user_info->last_name)."\n"; } if($user_info->nickname != "") { $output .= " ".htmlspecialchars($user_info->nickname)."\n"; } if($user_info->user_url != "") { $output .= " user_url))."\" />\n"; } if($user_info->user_email != "") { $output .= " ".sha1($user_info->user_email)."\n"; } // Link each created annotation with its author $query = "SELECT * FROM " . $table_annotations . " WHERE author_id = '$id'"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { $output .= " partial_uri.$annotation->id))."\" />\n"; } // Check if there is an URI defined for that author. If so, make the link between the two author resources. $author_uri = ""; if(get_option("zlinks_option_uri_".$id) == "same_as") { $output .= " ;\n"; } $output .= " \n"; } $output .= "\n"; echo $output; ?> 5wordpress/wp-content/plugins/zlinks/authors/index.php7 8wordpress/wp-content/plugins/zlinks/authors/.svn/entriesn8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins/zlinks/authors svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 author.rdf.php file 2008-11-20T16:30:38.000000Z d13f1ccc038b3608507853b0239a3914 2008-10-28T18:17:06.112729Z 97 paul author.n3.php file 2008-11-20T16:30:38.000000Z eae35f3adfb9086ac52d301f352df7b6 2008-10-28T18:17:06.112729Z 97 paul index.php file 2008-11-20T16:30:38.000000Z cbe274f33541cb25ad3805a585339173 2008-10-28T18:17:06.112729Z 97 paul 7wordpress/wp-content/plugins/zlinks/authors/.svn/format8 Qwordpress/wp-content/plugins/zlinks/authors/.svn/text-base/author.n3.php.svn-base &prefix . "zlinks_annotations"; $table_authors = $wpdb->prefix . "zlinks_authors"; $id = ""; if (isset($_GET['id'])) { $id = $_GET['id']; } $user_info = get_userdata($id); $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; $output = ""; $output .= "@prefix foaf: .\n"; $output .= "@prefix dcterms: .\n"; $output .= "@prefix owl: .\n"; if(get_option("zlinks_option_private_".$id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$id; if(get_option("zlinks_option_uri_".$id) == "existing" && get_option("zlinks_option_uri_existing_".$id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$id); } else if(get_option("zlinks_option_uri_".$id) == "same_as" && get_option("zlinks_option_uri_sameas_".$id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$id); } $output .= "<$author_uri> a foaf:Person ;\n"; if($user_info->first_name != "") { $output .= " foaf:firstName \"".triple_quote($user_info->first_name)."\" ;\n"; } if($user_info->last_name != "") { $output .= " foaf:family_name \"".triple_quote($user_info->last_name)."\" ;\n"; } if($user_info->nickname != "") { $output .= " foaf:nick \"".triple_quote($user_info->nickname)."\" ;\n"; } if($user_info->user_url != "") { $output .= " foaf:homepage <".escape_space(htmlspecialchars($user_info->user_url))."> ;\n"; } if($user_info->user_email != "") { $output .= " foaf:mbox_sha1sum \"".sha1($user_info->user_email)."\" ;\n"; } // Link each created annotation with its author $query = "SELECT * FROM " . $table_annotations . " WHERE author_id = '$id'"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { $output .= " foaf:made <".escape_space(htmlspecialchars($annotation->partial_uri.$annotation->id))."> ;\n"; } // Check if there is an URI defined for that author. If so, make the link between the two author resources. $author_uri = ""; if(get_option("zlinks_option_uri_".$id) == "same_as") { $output .= " owl:sameAs <".escape_space(htmlspecialchars(get_option("zlinks_option_uri_sameas_".$id)))."> ;\n"; } $output = substr($output, 0, strlen($output) - 2).".\n"; } echo $output; ?> Rwordpress/wp-content/plugins/zlinks/authors/.svn/text-base/author.rdf.php.svn-base oprefix . "zlinks_annotations"; $table_authors = $wpdb->prefix . "zlinks_authors"; $id = ""; if (isset($_GET['id'])) { $id = $_GET['id']; } $user_info = get_userdata($id); $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; $output = ""; $output .= "\n"; $output .= "\n"; if(get_option("zlinks_option_private_".$id) == "false" || get_option("zlinks_option_private_".$annotation->author_id) == "") { // Finding the author's URI. $author_uri = get_option('siteurl')."/wp-content/plugins/zlinks/authors/?id=".$id; if(get_option("zlinks_option_uri_".$id) == "existing" && get_option("zlinks_option_uri_existing_".$id) != "") { $author_uri = get_option("zlinks_option_uri_existing_".$id); } else if(get_option("zlinks_option_uri_".$id) == "same_as" && get_option("zlinks_option_uri_sameas_".$id) != "") { $author_uri = get_option("zlinks_option_uri_sameas_".$id); } $output .= " \n"; if($user_info->first_name != "") { $output .= " ".htmlspecialchars($user_info->first_name)."\n"; } if($user_info->last_name != "") { $output .= " ".htmlspecialchars($user_info->last_name)."\n"; } if($user_info->nickname != "") { $output .= " ".htmlspecialchars($user_info->nickname)."\n"; } if($user_info->user_url != "") { $output .= " user_url))."\" />\n"; } if($user_info->user_email != "") { $output .= " ".sha1($user_info->user_email)."\n"; } // Link each created annotation with its author $query = "SELECT * FROM " . $table_annotations . " WHERE author_id = '$id'"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { $output .= " partial_uri.$annotation->id))."\" />\n"; } // Check if there is an URI defined for that author. If so, make the link between the two author resources. $author_uri = ""; if(get_option("zlinks_option_uri_".$id) == "same_as") { $output .= " ;\n"; } $output .= " \n"; } $output .= "\n"; echo $output; ?> Mwordpress/wp-content/plugins/zlinks/authors/.svn/text-base/index.php.svn-base7 2wordpress/wp-content/plugins/zlinks/css/scroll.css-.scrolldiv_parentContainer{ width:380px; height:100%; overflow:hidden; border:1px solid #D2D2D2; float:left; position:relative; } .scrolldiv_content{ padding: 5px; position:relative; } .scrolldiv_slider{ width:15px; margin-left:2px; /* height:400px;*/ float:right; padding-right:4px; } .scrolldiv_scrollbar{ width:15px; /* height:360px;*/ border:1px solid #D2D2D2; position:relative; } .scrolldiv_theScroll{ margin:1px; width:13px; height:13px; background-color: #A4A4A4; position:absolute; top:0px; left:0px; cursor:pointer; } .scrolldiv_scrollUp, .scrolldiv_scrollDown{ width:15px; height:15px; border:1px solid #D2D2D2; color: #BC8FBD; text-align:center; font-size:16px; line-height:16px; cursor:pointer; } .scrolldiv_scrollUp{ margin-bottom:2px; background: url(../imgs/arrow_up.gif) center; } .scrolldiv_scrollDown{ margin-top:2px; background: url(../imgs/arrow_down.gif) center; } .scrolldiv_scrollDown span, .scrolldiv_scrollUp span{ font-family: Symbol; } .content_container { width:405px; /* height:400px;*/ } 1wordpress/wp-content/plugins/zlinks/css/style.css.zitgist_popup, .zitgist_popup_ie { position: absolute; background:#E6E6E6 url(../imgs/menu_grad.jpg) repeat-x scroll center top; border:1px solid #BCBEB0; z-index:1000; } .zitgist_popup_ie { padding-bottom:3px; } .zitgist_popup a { text-decoration:none; color:#2277DD; font-family:'Lucida Grande',Verdana,Arial,Sans-Serif; font-size-adjust:none; font-style:normal; font-variant:normal; font-weight:normal; line-height:normal; } .header_container { padding: 2px; height:16px; padding-bottom:8px; float:left; width:400px; font-size:11px; } .header_container a { font-size:11px; } .header_container_annotations { padding: 2px; height:16px; padding-bottom:8px; width:400px; } .header_container a:hover{ text-decoration:underline; } .zitgist_menu { padding:2px; text-align:left; } .zitgist_menu div:hover{ background-color: #C5C5C5; } .zitgist_menu_item { padding:1px 5px 1px 5px; } .zitgist_menu_img { position:relative; padding: 0px; padding-right: 5px; top:3px; } .zitgist_menu_separator { border-bottom: 1px solid #999999; margin-top: 3px; margin-bottom: 3px; } .zitgist_logo_img { position:relative; } .annotations_container{ width: 400px; /* padding-top: 40px;*/ } .editor_annotation_container { padding:3px; } .annotation_button { cursor:pointer; } .btn_annotation_container{ padding:10px; text-align:center; } .annotation_editor { width: 380px; height:100px; } .annotation_item_container { } .annotation_item_header { width: 400px; } .annotation_item_body { text-align:left; padding:3px; } .zitgist_popup_annotations_menu_header { padding:5px; background-color:#C5C5C5; } .seemore_dimmer_content { position: absolute; background:#E6E6E6 url(../imgs/menu_grad.jpg) repeat-x scroll center top; width: 640px; height: 480px; border: 2px solid #333333; padding: 1em; font-size:150%; } .close_dimmer_btn { cursor:pointer; float:right; position:relative; } .waiting_container { width:100%; text-align:center; }4wordpress/wp-content/plugins/zlinks/css/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins/zlinks/css svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 scroll.css file 2008-11-20T16:30:38.000000Z b0b088dde2935fad02596c712df6c1df 2008-10-28T18:17:06.112729Z 97 paul style.css file 2008-11-20T16:30:38.000000Z 1953d2a39f69953730a57cc22de682c8 2008-10-28T18:17:06.112729Z 97 paul 3wordpress/wp-content/plugins/zlinks/css/.svn/format8 Jwordpress/wp-content/plugins/zlinks/css/.svn/text-base/scroll.css.svn-base-.scrolldiv_parentContainer{ width:380px; height:100%; overflow:hidden; border:1px solid #D2D2D2; float:left; position:relative; } .scrolldiv_content{ padding: 5px; position:relative; } .scrolldiv_slider{ width:15px; margin-left:2px; /* height:400px;*/ float:right; padding-right:4px; } .scrolldiv_scrollbar{ width:15px; /* height:360px;*/ border:1px solid #D2D2D2; position:relative; } .scrolldiv_theScroll{ margin:1px; width:13px; height:13px; background-color: #A4A4A4; position:absolute; top:0px; left:0px; cursor:pointer; } .scrolldiv_scrollUp, .scrolldiv_scrollDown{ width:15px; height:15px; border:1px solid #D2D2D2; color: #BC8FBD; text-align:center; font-size:16px; line-height:16px; cursor:pointer; } .scrolldiv_scrollUp{ margin-bottom:2px; background: url(../imgs/arrow_up.gif) center; } .scrolldiv_scrollDown{ margin-top:2px; background: url(../imgs/arrow_down.gif) center; } .scrolldiv_scrollDown span, .scrolldiv_scrollUp span{ font-family: Symbol; } .content_container { width:405px; /* height:400px;*/ } Iwordpress/wp-content/plugins/zlinks/css/.svn/text-base/style.css.svn-base.zitgist_popup, .zitgist_popup_ie { position: absolute; background:#E6E6E6 url(../imgs/menu_grad.jpg) repeat-x scroll center top; border:1px solid #BCBEB0; z-index:1000; } .zitgist_popup_ie { padding-bottom:3px; } .zitgist_popup a { text-decoration:none; color:#2277DD; font-family:'Lucida Grande',Verdana,Arial,Sans-Serif; font-size-adjust:none; font-style:normal; font-variant:normal; font-weight:normal; line-height:normal; } .header_container { padding: 2px; height:16px; padding-bottom:8px; float:left; width:400px; font-size:11px; } .header_container a { font-size:11px; } .header_container_annotations { padding: 2px; height:16px; padding-bottom:8px; width:400px; } .header_container a:hover{ text-decoration:underline; } .zitgist_menu { padding:2px; text-align:left; } .zitgist_menu div:hover{ background-color: #C5C5C5; } .zitgist_menu_item { padding:1px 5px 1px 5px; } .zitgist_menu_img { position:relative; padding: 0px; padding-right: 5px; top:3px; } .zitgist_menu_separator { border-bottom: 1px solid #999999; margin-top: 3px; margin-bottom: 3px; } .zitgist_logo_img { position:relative; } .annotations_container{ width: 400px; /* padding-top: 40px;*/ } .editor_annotation_container { padding:3px; } .annotation_button { cursor:pointer; } .btn_annotation_container{ padding:10px; text-align:center; } .annotation_editor { width: 380px; height:100px; } .annotation_item_container { } .annotation_item_header { width: 400px; } .annotation_item_body { text-align:left; padding:3px; } .zitgist_popup_annotations_menu_header { padding:5px; background-color:#C5C5C5; } .seemore_dimmer_content { position: absolute; background:#E6E6E6 url(../imgs/menu_grad.jpg) repeat-x scroll center top; width: 640px; height: 480px; border: 2px solid #333333; padding: 1em; font-size:150%; } .close_dimmer_btn { cursor:pointer; float:right; position:relative; } .waiting_container { width:100%; text-align:center; }9wordpress/wp-content/plugins/zlinks/delete_annotation.php?prefix . "zlinks_annotations"; $delete = "DELETE FROM " . $table_name . " WHERE id = '$id'"; $results = $wpdb->query( $delete ); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; echo "\n"; ?> 7wordpress/wp-content/plugins/zlinks/edit_annotation.php}", $body); } if (isset($_POST['author'])) { $author = stripslashes(urldecode($_POST['author'])); } $date = date('Y-m-d'); $time = date('H:i:s'); global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; // Filtering out bad HTML. Prevent HTML code injection $filter_annotation = new lib_filter(); $body = $filter_annotation->go($body); $update = "UPDATE " . $table_name . " SET body = '".quote_smart($body)."' WHERE id = $id"; $results = $wpdb->query( $update ); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; echo "\n"; // If user shares annotations, then we have to ping http://pingthesemanticweb.com if(get_option("zlinks_option_private_".$author) == "false" || get_option("zlinks_option_private_".$author) == "") { $query = "SELECT * FROM " . $table_name . " WHERE id = $id"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { pingPTSW($annotation->partial_uri.$annotation->id); } } function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not a number or a numeric string if (!is_numeric($value)) { $value = mysql_escape_string($value); } return $value; } ?> 3wordpress/wp-content/plugins/zlinks/imgs/amazon.giffGIF89a<<ڙ;Β;Ë::u9vttn9g8ihh}`8][[qY7fR7PNNZJ6NC6DBBC<5755! ,磩tȤ28 4)@|B O3@k/ά[ZY, D  i Z I  C H bA;9wordpress/wp-content/plugins/zlinks/imgs/annotate_btn.gifGIF89afۚبҕޭˍ܏ݞ͖݅׍ϖʝĀzӃ̔trӌypϑpÉaq{g[siX]UxSbjpI{j@[bp[aiTd}ZS|^zdw~_t{Rs^mrTnwYjpOktTgmIhrPdlR_cF_gN\bFW^COS?MR5GM=EH1EL7BE-CJ.=B%8>,47*36#/3 .2,1$)+#(*%(#&!%   !,f H*\ȰC0Hŋ3jȱPǓ(SA߆[ 07CkZ0 a' 7G }%B Gdw ,$s\ZU,0,4l-p@ @-DmH'N BaXg\w`͂/T@ lp-q'P@;9wordpress/wp-content/plugins/zlinks/imgs/annotation10.gifTGIF89a ccc1, 9 @ "LP@@q<"F1#+Jq%E;7wordpress/wp-content/plugins/zlinks/imgs/annotation.gifGIF89a)1B1BRBJZJRkRc{Rkc{kkks{Ό甌sR֜ޭƭ1ƭ9ƽ{΄εBεJεRsֵZcks{ƔckބZcΌ{s֜޵Bޔ!!,C ڨ`"L@@ E2 ĉ , P+̠b49ZA@J2 xa 0d@4D@JAÅ | xC?j:Ž!8NC@L5,xA޽.@0E8b&7l:Ž 𱣴.lo  v=" ;7wordpress/wp-content/plugins/zlinks/imgs/arrow_down.gifFGIF89a A???==!,  Pi+l;5wordpress/wp-content/plugins/zlinks/imgs/arrow_up.gif=GIF89a ?==!, mu/ҁ=;4wordpress/wp-content/plugins/zlinks/imgs/article.gifGIF89a!,II+`XFaY`߸ špHnZ1Ct]RC w'.v&";5wordpress/wp-content/plugins/zlinks/imgs/backlink.gifMGIF89aid`!,4@ŠsE8x)'M ;;2wordpress/wp-content/plugins/zlinks/imgs/blank.gif7GIF89a!,ڋ>;4wordpress/wp-content/plugins/zlinks/imgs/channel.gifGIF89aZkss!{{c)9Bc1BJZ19JZBJRZcJZcksRcs{Zckcks{ƌsΜΥֵ֭֔ޜޭ޵!,H(TXňV AcǎqhQcE $rЀ %Jd?x5JlꂁAWS X !͡/z!A )`>M81@`|0! ::`JCGa 4BB 2kv@B_0 \ `ka`v;2wordpress/wp-content/plugins/zlinks/imgs/close.gifGIF89aZZ99cBBk99{!!{BB))ZZkkRR99RRZZcckkkkssZZcckk{{! ,H` "@P4hȀ%hㅋlȱ#CG$dZ)P8e:898XJtL*ZT j4\  „*u8:Kn@;4wordpress/wp-content/plugins/zlinks/imgs/comment.gifGIF89a!,E!@r $Ix%RB,3L1E뻠PyrT$=BX h F;>wordpress/wp-content/plugins/zlinks/imgs/delete_annotation.gifGIF89a)1BBJZJZkRks{ƌ֌Ό99RR!,#H "l`@@! ,h` *p :!bxc /GrhA@Ṛ@F8pϞ &Xѣ,P2׫GZ(Wc$HV a[7€ 7 XqJ J;5wordpress/wp-content/plugins/zlinks/imgs/document.gifGIF89a119BR1k{Ό֌֜sބ!,H\  t@Á h40P" Bb@G 6T,@倗b ,Xf $M81@`|0! ::`JCGa 4BB 2kv@B_0 \ `ka`v;2wordpress/wp-content/plugins/zlinks/imgs/group.gifGIF89aDmA$ӹZmȦIp!,d`$$!D"K8x^V EGP8o9/j@c[<]xt*j:CpP,`x" (ss!;1wordpress/wp-content/plugins/zlinks/imgs/info.gifGIF89a9Z!Rs)Z9JcBRcBc{RRZsZZcckkkkss!,3H`6hP@4h@#hࠣ lX HG0@%cM0ty2AO@1dPѣ!/|jT&hj+DJkb!(XY@Xx ;6wordpress/wp-content/plugins/zlinks/imgs/menu_grad.jpgEJFIFddDucky<Adobed       KP ?zt@?ٶ?wordpress/wp-content/plugins/zlinks/imgs/mini_rdf_annotated.gif]GIF89a 19BBRs{{c!, :)P80`!WwAb0.f)C(& %v% #W #j' &&'%&i_#& R#'uE`%%­j_RHIA;9wordpress/wp-content/plugins/zlinks/imgs/mini_rdf_old.gifrGIF89a BJJR)Z)c9kBkBsR{Zcckk{΄Ό֌֜֜ޥޥޭ޽!, O5! B8 AB  @  $D ,!FB@0@Xx!€xF0! ;8wordpress/wp-content/plugins/zlinks/imgs/musicartist.gifvGIF89afff̙!,;xܾ 0!z(CQ`\bJ6l;EpA :`}2,3}$;7wordpress/wp-content/plugins/zlinks/imgs/musicgroup.gifvGIF89afff̙!,;xܾ 0!z(CQ`\bJ6l;EpA :`}2,3}$;1wordpress/wp-content/plugins/zlinks/imgs/note.gifGIF89a!,II+`XFaY`߸ špHnZ1Ct]RC w'.v&";:wordpress/wp-content/plugins/zlinks/imgs/onlineaccount.gifGIF89a9s9RRc{քތc1ޔΜ֥sJsBƔkΜsΥ!,!HXpaA"Jhࡃ1"(  cR\)PA &@P8s‚J:xKU ZkWZr ֠ Ҟͪڳm ;9wordpress/wp-content/plugins/zlinks/imgs/organization.gifGIF89asR!ƌsBΜR֥Ƶsֽk{Ɣ!,xHA48 64`aĉ+Bd cFtq H8 K ,8@ 8XgOr:I HSS:pРk׬1Z,؈ ;Dwordpress/wp-content/plugins/zlinks/imgs/personalprofiledocument.gifGIF89a119BR1k{Ό֌֜sބ!,H\  t@Á h40P" Bb@G 6T,@倗b ,Xf $8H 2|EL1#hxd4PาC:f` *褉M 5]I%$DZjւ J;6փ%ہ;2wordpress/wp-content/plugins/zlinks/imgs/point.gifGIF89aZk!BRJsRkޥ! ,|H  @ 8p 4h` . ` 9R<P@  q9Q0Pɳ *5`4JEp!֬"8U+Ɔf] ;1wordpress/wp-content/plugins/zlinks/imgs/post.gifGIF89a!,E!@r $Ix%RB,3L1E뻠PyrT$=BX h F;4wordpress/wp-content/plugins/zlinks/imgs/project.gifGIF89a9s9RkRc{csތƌޔƔΜΜ֭֭޵!,/HXpaA"J!12(@C9fx#6he Bx` 3T AJprC=3>hy  d2H@AK H@@,|@(B( A4K`*bA! 8!Έƣe7GŐ w"{ ~ z l  ;< T&"!;9wordpress/wp-content/plugins/zlinks/imgs/semanticpage.gifGIF89aZks!)BRJZsRskޥΔ޽9!1s!,HA~p#D4pÉl1bC  A !6X`0(\PK"L@?! 0 g0T``jӁ&(@0@(UAX0l]` ~@^;,47*36#/3 .2,1$)+#(*%(#&!%   !,f H*\ȰC0Hŋ3jȱPǓ(SA߆[ 07CkZ0 a' 7G }%B Gdw ,$s\ZU,0,4l-p@ @-DmH'N BaXg\w`͂/T@ lp-q'P@;Qwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/annotation10.gif.svn-baseTGIF89a ccc1, 9 @ "LP@@q<"F1#+Jq%E;Owordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/annotation.gif.svn-baseGIF89a)1B1BRBJZJRkRc{Rkc{kkks{Ό甌sR֜ޭƭ1ƭ9ƽ{΄εBεJεRsֵZcks{ƔckބZcΌ{s֜޵Bޔ!!,C ڨ`"L@@ E2 ĉ , P+̠b49ZA@J2 xa 0d@4D@JAÅ | xC?j:Ž!8NC@L5,xA޽.@0E8b&7l:Ž 𱣴.lo  v=" ;Owordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/arrow_down.gif.svn-baseFGIF89a A???==!,  Pi+l;Mwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/arrow_up.gif.svn-base=GIF89a ?==!, mu/ҁ=;Lwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/article.gif.svn-baseGIF89a!,II+`XFaY`߸ špHnZ1Ct]RC w'.v&";Mwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/backlink.gif.svn-baseMGIF89aid`!,4@ŠsE8x)'M ;;Jwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/blank.gif.svn-base7GIF89a!,ڋ>;Lwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/channel.gif.svn-baseGIF89aZkss!{{c)9Bc1BJZ19JZBJRZcJZcksRcs{Zckcks{ƌsΜΥֵ֭֔ޜޭ޵!,H(TXňV AcǎqhQcE $rЀ %Jd?x5JlꂁAWS X !͡/z!A )`>M81@`|0! ::`JCGa 4BB 2kv@B_0 \ `ka`v;Jwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/close.gif.svn-baseGIF89aZZ99cBBk99{!!{BB))ZZkkRR99RRZZcckkkkssZZcckk{{! ,H` "@P4hȀ%hㅋlȱ#CG$dZ)P8e:898XJtL*ZT j4\  „*u8:Kn@;Lwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/comment.gif.svn-baseGIF89a!,E!@r $Ix%RB,3L1E뻠PyrT$=BX h F;Vwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/delete_annotation.gif.svn-baseGIF89a)1BBJZJZkRks{ƌ֌Ό99RR!,#H "l`@@! ,h` *p :!bxc /GrhA@Ṛ@F8pϞ &Xѣ,P2׫GZ(Wc$HV a[7€ 7 XqJ J;Mwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/document.gif.svn-baseGIF89a119BR1k{Ό֌֜sބ!,H\  t@Á h40P" Bb@G 6T,@倗b ,Xf $M81@`|0! ::`JCGa 4BB 2kv@B_0 \ `ka`v;Jwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/group.gif.svn-baseGIF89aDmA$ӹZmȦIp!,d`$$!D"K8x^V EGP8o9/j@c[<]xt*j:CpP,`x" (ss!;Iwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/info.gif.svn-baseGIF89a9Z!Rs)Z9JcBRcBc{RRZsZZcckkkkss!,3H`6hP@4h@#hࠣ lX HG0@%cM0ty2AO@1dPѣ!/|jT&hj+DJkb!(XY@Xx ;Nwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/menu_grad.jpg.svn-baseEJFIFddDucky<Adobed       KP ?zt@?ٶWwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/mini_rdf_annotated.gif.svn-base]GIF89a 19BBRs{{c!, :)P80`!WwAb0.f)C(& %v% #W #j' &&'%&i_#& R#'uE`%%­j_RHIA;Qwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/mini_rdf_old.gif.svn-baserGIF89a BJJR)Z)c9kBkBsR{Zcckk{΄Ό֌֜֜ޥޥޭ޽!, O5! B8 AB  @  $D ,!FB@0@Xx!€xF0! ;Pwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/musicartist.gif.svn-basevGIF89afff̙!,;xܾ 0!z(CQ`\bJ6l;EpA :`}2,3}$;Owordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/musicgroup.gif.svn-basevGIF89afff̙!,;xܾ 0!z(CQ`\bJ6l;EpA :`}2,3}$;Iwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/note.gif.svn-baseGIF89a!,II+`XFaY`߸ špHnZ1Ct]RC w'.v&";Rwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/onlineaccount.gif.svn-baseGIF89a9s9RRc{քތc1ޔΜ֥sJsBƔkΜsΥ!,!HXpaA"Jhࡃ1"(  cR\)PA &@P8s‚J:xKU ZkWZr ֠ Ҟͪڳm ;Qwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/organization.gif.svn-baseGIF89asR!ƌsBΜR֥Ƶsֽk{Ɣ!,xHA48 64`aĉ+Bd cFtq H8 K ,8@ 8XgOr:I HSS:pРk׬1Z,؈ ;\wordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/personalprofiledocument.gif.svn-baseGIF89a119BR1k{Ό֌֜sބ!,H\  t@Á h40P" Bb@G 6T,@倗b ,Xf $8H 2|EL1#hxd4PาC:f` *褉M 5]I%$DZjւ J;6փ%ہ;Jwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/point.gif.svn-baseGIF89aZk!BRJsRkޥ! ,|H  @ 8p 4h` . ` 9R<P@  q9Q0Pɳ *5`4JEp!֬"8U+Ɔf] ;Iwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/post.gif.svn-baseGIF89a!,E!@r $Ix%RB,3L1E뻠PyrT$=BX h F;Lwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/project.gif.svn-baseGIF89a9s9RkRc{csތƌޔƔΜΜ֭֭޵!,/HXpaA"J!12(@C9fx#6he Bx` 3T AJprC=3>hy  d2H@AK H@@,|@(B( A4K`*bA! 8!Έƣe7GŐ w"{ ~ z l  ;< T&"!;Qwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/semanticpage.gif.svn-baseGIF89aZks!)BRJZsRskޥΔ޽9!1s!,HA~p#D4pÉl1bC  A !6X`0(\PK"L@?! 0 g0T``jӁ&(@0@(UAX0l]` ~@^;Twordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/solomusicartist.gif.svn-basevGIF89afff̙!,;xܾ 0!z(CQ`\bJ6l;EpA :`}2,3}$;Jwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/track.gif.svn-baseGIF89a>CK\>EUIUk։ޮ㖖)1Cqrrvz}|xxz}ؘpqqеۡ|qqqܞRa{Wpvppp!>,pH=X,.C>,;[V2hdZ :Y@3S9 :y< $",8=<-1*/8#< )!%55;<&0+52;B7.<8'22=76 2:<6=4:\6433yEEA;Nwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/undefined.gif.svn-baseGIF89a)1B9BRBJZJRkRc{RssΌ֜ޭ!,-H 4P taŋ`C'@@V9 2B/cd90-HOiZ0ѧ 6HUdS 4lZէS $+WM8\ L ;Iwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/user.gif.svn-baseGIF89aÔhׁٌfٗ>wJTΥɛu~ձvE=wƪa2U!,s`%hbNiUd߷nVprX)}Eьb:zHA~x+퐈I@H r% C(23"&(%;!;Nwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/usergroup.gif.svn-baseGIF89aDmA$ӹZmȦIp!,d`$$!D"K8x^V EGP8o9/j@c[<]xt*j:CpP,`x" (ss!;Qwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/waiting_ajax.gif.svn-baseGIF89a6-&nUK>6-&fZJviV}q]! NETSCAPE2.0!Created with ajaxload.info! ,30Ikc:Nf E1º.`q-[9ݦ9 JkH! ,4N!  DqBQT`1 `LE[|ua C%$*! ,62#+AȐ̔V/cNIBap ̳ƨ+Y2d! ,3b%+2V_ ! 1DaFbR]=08,Ȥr9L! ,2r'+JdL &v`\bThYB)@<&,ȤR! ,3 9tڞ0!.BW1  sa50 m)J! ,2 ٜU]qp`a4AF0` @1Α! ,20IeBԜ) q10ʰPaVڥ ub[;Lwordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/webpage.gif.svn-baseGIF89aZk!BRJsRkޥ! ,|H  @ 8p 4h` . ` 9R<P@  q9Q0Pɳ *5`4JEp!֬"8U+Ɔf] ;Swordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/zitgistlogosml.png.svn-baser@PNG  IHDR(d=sBIT|d pHYs  ~tEXtCreation Time03/30/07tEXtSoftwareMacromedia Fireworks 8hx=prVWxQ0aa ۉO紣f( f1'a}Mo/NS&bK&I2%-l4LG[8 2 "CAap".x7UT|4}Sﻅ{ojMV^kvC Q܀6;Xo1\je^,@gZ/ޕMM{9٭ [!aˡ<~qo6>\mxm y,3W=H HmkBF)3!mkTSx]]s8n&=ڽUUݧK(Ylk%yKD;fU/nwHHڒ<ډ! n4 Uz?l^7=]kuU K^#oY3u Ofڃ;x{yv˹@+Vi)r?8:*犧\);Jrϔ?h#ws8SofsoSH㷆]lDkOZ=dߢӥX2G׺~kԢK XrC#귏5PX۴ JpRDg_}8LnZبiBs3(Sers~4?7H-І1G5 qmsX=XK&:-G91 L347FPEIg $d2Lc!OpḿC1`<cj(zNVn 6!C m0TqrZ"FD] (cb8jː4&QͰ6Ò!XbSK08f:j*tǸ :xׂ /3a7p`OnHqtM2,; pD =} 43/T]u58Įt:W .().G4Qʏ\9SCf5Քҙ~2B僐K"a.C' :eMoBVl䨓}z }J N]P+:Κ\a>r*mUV(߁fxU 30hܔqTEl؍E@$&!u•'ŐrDhgRkn܄E1 1BdPqM2M5tk 9LCc1p,Me\;E٠I֜1ߤM`\@r$ʍfmNJF 0Gbˆ 'UNzi24tC8C@ @k*4ucjqP-3M=pHz``)?@ )Pg`0lI`c2gx.Il[:ZsQWsn.@m^ {G3^f %JRG~Vi0 mdV^wjɫ2pyTHNn]kq k a@: ȼ0m0~]q"fIcʠQ4*FeШ7Ҡ|ԛtw4*E:JϤ(i5g A6eU[I WqJ׻41j7Ҥ3IFIMzqe#ġbVҜ~[J+aV + S!u_p+CjjYa\5zQ#΢xjQ*C U.栅Uk/:|!I`:M1FƼҡxpՋA 8| @8"47Jd& m*57n݅3}:{;p&~A3Kf:n(ɢ[ c|}ő5r# 93K(`:δ7oaP25@ƅ0#Q "ZS"] Ar%N!g201&}up7ul0FA)q#A 0`a0I2x7&Ɠ s-P#Z.`=Hg 0^1ݴr m{\>T@ G#ɒZ -P$rb;+rb\e29 B4gC5a'nk[f1=CɼpUl%w4` Ub,O#rm2m&hE?'30ԖcB><|Kk͗!=G*ic2Pɠ]534VƌSΏh͓S+]C`gwZYXRjDe /]vt5XЪ3hi,gX;IԔƱ Uf2Tx35W%UJ+e-#6qJ JwZ<WK-w!%ō!n|Ä# )olF@ъd@!9|L\[N h A|Fn+el4d4(yPͯjı)GA A> 33a@n]~,`TǑ5vf=O`}YQ◌&M-1N8DKy!.K W!I]ӔIc9n\?)9iY3_qK( 4GL$;n!jHȣp,O=.O"VY^1V_L7?ˠ Lc8El&%|j7݅X>atKq89)pfv{Y}ݖ`"S44L|A_C cH{BFxAstZuI,5-щC}nsb(beRAa|܎n[B::ny'Hwu٨e-v?6]2<%$zwt0 "җr-W 跻hwړ.{J?~$K KO0 7VAD$$&+g\xiTJ5'9)'QIT*.!!23J#PSNd*G *EsNRsUIgU+%*DC^Qgj(G/Jќ~[>2.== e$$5$0:DѹC{[\=`?I9_NZ5&Z%2ӸF^,pp$|9iՙꕴHKLB<,Ο/'-IˮUDZ:ߢs\>+N^QN &F%"e٢Up _q:l99LNn%"r I+l8XsEN9M&ʌji41-Ο/')ִVimcm:d䕓$*(T2V$lj#,/WI;0mkDm=vdĎ{.ObZj"KTQ-v6jQ$n/rS皵EZYEE5FbUe)؊(v 50eiMKs5BOlϴ\է%mԛIR¦񌋣C1:zGK{ Q]5xݢJumZ[U4%OXkoJ)RDvBE&[ڪg $- R$`KC=8ÿpiEV-{> el 1hBdk22j U=df{- 0i=7kcc`JRâO+Y;oJ j?.G3\dbC/䩳aB}TG~GzCuj!Vj*>)^gh-/Zg} M-7d%6M`I͍ k~pU#.3_.*1w? ;Kf| o۾wu)~@ahkzM`_\{$Q~ ʫ_C,ih̾"GJ %ipB\ÿD0|F II^ރڢ2-!iUj|lW^jXr+,)kʿ@$)Y\m!A'ϩ_(Gl&3h޲@{w6НW\={xt銧+.eSLgoW+Wo'Z+zlmVl]uօ;%S؃¾bWz{W]/2d}WW\j*Rk?銧W"kT<]tk:iW*}WM߫x.tWtl'~U^W1~bU^[c*~bU^{|={W*ZW]*~銧e<݆+'D$+4 ގiò5~f $z}J=C7|a@ 1`PL[g{,:]=سqP礪)׷ū]ƮZJҾLsY{µ/: vE[C-S'۵KvTvieK5oWvi:C?|Vˏ;T-qEV+!Q;v^{W?IsǾxCdfͽ[/cť6p bg~Ր^ t&hVK`'Foe4_>k4!dϨ,R`w*}o~ȧb:Yn%@}+KMhry`_/ddK@_J#cȆ( \ч1D?}˝=-GOf-S vr~:SjT֧?)O[RZN :>OC@,) ˞TD=|8#2Vגk'⸨a~%hd?Oڎ!!>C[ոQ O ܮW& J2l(fc5+-fma>bl ȄFy6 [-s$SE%(p\yJmJ[#_.Y$ӥC>ʆ`91?&huq*hԽTlvzrPGD|s[t1ʏdNKAEX,Aֽ& N`9N`-GZxvY֥Hiox K9Vcg񃟸'~mb$> Ƶ[OmlтLzA}9}J,k -=|F^##( g=o;J͟u5A?kXsMArq'ߊ/JC;]y,*E屨<X.ÝӐ9x}pOQql4/ZW Ik Q~ѺOhwBg4f 6#mj+[' o=:RI&! bMN%i,l> aCOtLw>UIOz-⸌ 4p%%Ot#op!9WmXƥzѼm;A9{#&uѵ뙻iQu/lGlri^ב4=g6lÙn'j[cci]uqm%u87& [*޻&GE|B&S[h ZZ9pgC i=XX>uJuc_YG[0{G|b#=f7p{<}y %}~v';Vp|Xn{{JD: obĢU<\<<~st=ofsϫYج]~dïw!_?5|ORs\ Nlh6M ,o%=@ʦugМW}V}?Tpg71=ZvoF~=Rw{L=:7 VOYpX2F7tlS2L6Û5L%},=!^@a#ݏGXa'YvX;QoHGChDM *ܯRPڥ*RGݤwOth^lnx,X ]ԧSd9tXQ<<Gmz{5߀ö |2Kd, j]0p> (v{9:xWN'NǑ%d͔LJf:vFMh,t^w헖e鏎ph4 SU~+Qu[Ak#HYz̗*pH ]F&KTMH~sԡ^?z5g1@%/pyP!XYFH?O!h ^Q 1uژkS~2:KK`zG4F|<\[\MAގmB_vgYcwnz]:uc`4NcF#5  5$C82,H߰N~Dצ_a8G o:Ro;bO[tmkBSx]NA0ܣ AU%706!blﶂLfv6#b# ѣn 4\inF{gAtӲlT‘8 'kIߘ [c,=&xnpϣT}1HqQlHاYtl(SA1_ W mkBTWx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 %mkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jwymkBT6x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)P<P 1nZU%/iz9EV%4r[c7^{\?ZYviʿ폨smʿ:ur;sÅ7?zJvtu7m?xOM^4Z?pmzI1[omkBT\xk{pCBn$rs%Gə…VZ~$%?}ZaVGv 4v,_w1?eA ߷?=ߥǻ}kRio3N_;Cmh9yq\ӿ|:WkO<6z;/.hײk\*=NSK?ac\g${Z=]~+?$ɼhoBdyw}]uFXхޢ[^]nΪˏ[dC\g${&=)mmC۷džߕo{uKY_-g''r,V͟<񓡦6lڴR{Gړ>猌:KgUUU vE35Sh.I$cHI¦ 9ɎF:͛Y[{`Y<_z0@F'aժաbhu?\gƖ/I\ $*mkBTx}+(H,"H$"#X$,QԈZs>U{ ..T}6ڳ-F`p]k߅~b  О$wݓٱ|sCoA+q3lOx@(0a+? T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ)/tihf ѸX>E)<,6s45zb?J\<OM%O#(76:= ӋYAƒH Ls6MXBcX&ǘJte. 3.je(??Lj=%wZizFTx$kP8Em jAOހ>~؆B9 ֤8UKCvjbL Cy ;mj P. DkwUE€3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ 1 +KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe; <a>,⢞jk0B[p($Ǡp4 nq`XƓ vϵ.xHnorJ5Hu뇗 f a[Z:>36[g RL؍?( &w.7C#~B{] UW 71jk~ecGrD.=K@WDZM0倐0\xvqNZ ># BE )&yA}t?B Ym(WIpɱ |2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'N adĢG3%#)?$s _5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~ ˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽ #kXfyEAB9uM4P=_lgW؇N#_nGpp ,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz! uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ ,NsjF=B` 큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*u f:@ʫRH.66jcGOpO- 6HKJU:Jǃv,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£ _' Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1Lk=rr 4/gEr~PnB[\g[{gYvRW' {Fem1{ wL;7&$xc0 n&u@5sCCձm8Heft x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ4)%b6B8\pe;u)ko)#WSncRx{[sXv195_0Kՙ7>Tp5ٴl3S"؝LX睫[5m Q="u}pϘ*xbՉ#iM+@Z! Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3; ΑO1A/r R*5i&j#Y2:$Z(ad@>'z L뇶6Z8|`6"X1_z' F-я?X^ A:?1;h/KVB' vOnFS ƤQ{=kh7MwXQp\v͓O/. N3HKRlK"q^Wh1wt h@3e6N|I;y?8t[[! $,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[# BHǽ{vekOTlq(UH͵h ݔ8,@tՂL{p/*L"d_y k,4 G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE _-- ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$պZ-hkh ?C$ ^tď9d(8P݅]ڶw[wl;dn׆oKd Hބ(DInI M_(5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:' 1H"z'7QqɌ#KR./CVgQȬ\ `?d1yuM6Ƶ8ZX]8^pwQE &1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+C RMzƏ7)nҀ lEGyl:̑IoBS%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r PRg_LbR Şl?␔)![Fo wi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣOP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/NW:݊&׾:x" ꭥу;R펔 c䛅љElmG§a= h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8 yA*W I9/ub)Zl: s 85J>~iI3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3v Dgh>>?3hYDkgC(ʹƒԕSԜ| 2Q94(?OGQ34 fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26U M6f,'C4i?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^w DMXf_8<%|8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y ,b'N=o0, ~M YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0 TU򄽻w"/4֏CQ`[{Ocn]+{{ N!33+5]qpj' r9FDȬ)~: 9Gmx2-?sraG"yvUpa;Ră A\& ?#n 0eed~oq嶭!!DzP^H)>oȑ.ļԶ=Hy7S-M ?8ycߧq|#5"2Б lm#UeΤVbM͘jAc7Z ]> 4gb s 2WRsKg6 's8qzTT[R[w)I95xWj #!nN+zPڔ KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[ Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f "Yi=D =4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta| i>T.Wo>>xϯY{緷m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWNJD)21ѵVagWPqȒ s?¶@g")s\T{f3go^w:^"{d#!φt},nyWFKv„X4|VB~,˘_&fjp/WԍwaO H 3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)IDATHTMHTQ3VM&c4 6F*h E%bl1]JRn'ET4.&gFۢ9[s{=9g@񫡯'l9(+:>u˙M/rPm`}*}iB[l@Q~ws~d/<@w&$#%9-Sw̬.-G#O+256[]+6u>{(dJ%TS* o8;`hq|m:t{(6WVqDXԉR Xa=cm7SSI-!xjjvNJe,(vv0ƂR*XU0/vj*=qhVṔgNMFV-.ta ;Ҹ4\IU_NB8PU\.Ris-NƂ^ aϹ`ErVs(@ `=n6b.\(*ţ# J$py2EG=R d,(Nl\8祝%Gq_~}k#,jTVEm|Bģpan 0!q0 u0 ?~z#++SjHn, ;4wQ\R)*dpUsayfR fSwB̠nKzQ*+.=IENDB`Swordpress/wp-content/plugins/zlinks/imgs/.svn/text-base/zlinks_logo_45.png.svn-basemPNG  IHDR+ 0sBIT|d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time09/28/07UL"prVWxM0asІ ASw/ȻwhU7Qϗs?>1%\_sNuR.oϔ6r9伤R ?OlrZ凧S%kn_t"vv7~jIqTؽCUFy:iO_Mf}\e,y~Y{Te=qk^zkvS7M>/=L;HmkBF)3NmkTSx][sƒı%ߓSه}Q>w(J)!Xʋ FstaowxQbX@bp wI3hAIJj:i{ǟۼ?hzD3OjzuO؃+/wF~l' JCke C _} - (6x#;#'h43h'#n/ht!4}h; {GǶեvAze79dcmJ vyemZS6nؼ|VnaP)" \|>ڣfi\sO1*Akh$:X=XM1B6>>L&1$B{ژB&CdIuà;0\v)ǰ/з[hg.Sl :R @9pi`|``]XpyʹSO9L[-漴l T$"{-Wwrci8:І6ڐA rjK]>3JdZ /!RF,CE[D1M'R%5[5.@/3L/VTgqރ/STL:2<5v|Nۘ!^@c9Avo"E/MH6(R 8f;%P<$Hvo͋BHf釞㉜@FƁd8"|n $Ȳ$- drQ^s Rxd'#u{wW}4bN#2u+3@m< -A0̇6M~: _ȗ͒%ky YwxBIIN ]вZ63eF >_Q)ͩ8 :CB}Q4LŤ0ZQRyu$WCDrpf$A2hTʠQsBBB|6$^]KY !!d݋){>xlb0Y &1S !Vs)^=a'הo,6U P˩G5_Ja(/Ӭjhs璒䥫Y_ N,2)Cp7 u Nr,M ,t;/tGJ[RCLxa@oַ`-.4t{ƒ1:, 6ONc@:3:=||O͈OM 7º(W)Ƃ<2kZRd4g>hZE{s*&8ߤp8gdV~9!3"Nb0I}=r'ݼoH AdzhM\!eG؟O_ T|\Zf C;WB[ҠMjB-LՐm|*$NW $E]b7OG0iKxkgk 1tԯr$+z4\FhL$סɮ35a([ 8 Ӂ#OX꼺V:6QZΑ7iJ8g.TAf= (*(, ‚PJ5kLCCHIAYjXlй %fB&-.i2\)cNy$G}Kx? JZh4F2I")E+鎤|t68AGaوILGBȴ:7:m$#Cm="sZ$e{6윃0U 0퇡l<בϽ>N3gz<6IPTbEO,U0FL^>7T" _0wT!^:kT+\ά4JXw]k9A3QLX[i(sL9-ӎ9׋i-o$p/b8[T(! <hOK` QbP,HE>#Ntx0CdR9'~~d`oM 8G*M-DSTjBkD/Ö':\8b&I+6U$g0Zݤ_+c*ke h /Ep…bC]VIt 56ًzz2\nb, 2 @ L70hc=ڡjҿ ֤M'vmD؄br{d0ZLy? {HvIcIc*fdXE7IX7l;h+'9Iά$Wnu]x (?$1bWMDZDOH]Bd{P$qr"SD6xې$>:rRK:^)Q9%hAC')IbҲ*iVe{ϫUcҪU*#!22&-Vi=->q2r3Y+Yc.M^GS~FĽ4`rTr*"B:3m)'!ٰYkftIr1i*it\QE񶓌rDǞEj4RJDqNp|{6bɜrxJۦCߌ73W =*`Wjzҳ gbdHVWվ֚0k글n._ Ǡ Avډ{^>4'♙0/F[#ЪYmy m1>8ݙul5ikϵNe=Eb#ڢ7)Mfښ`Fd3NjfK2pVº}.-vm|}_Jk&?371UϪi,s {EQ\gZĜmϫHde,'L=~a/[=mG}Qܧs5cJ?DQh*>`~}Cz׋jТҏEG--Huc:F|A8r3v{z6F9~=JYEλ0g<-^+/a&}G+DBF0v!|zsA)yH+{o qv؏xt tq!Bvfv{{ds>. X1aI%ͻIՌөȫT܈Z<ߠ-ˆ1tg+g8=4Ƹ[1%.%b芡FCW 7gZ+8zmV]qtj]z+v^>;[;W\sGPU ]1ڮb芡s0]v/v<-Q؟p8es^qvgc]1tKghk+kfh&+ﴊ;W+*vT;_ʻCW+*:C+*~]8"5c]w;W\!0tb芡0tʻ+.U=+*~ ]b)C7(< 2DLļuc+ f ?6M XC.xuń!\YɶAтݲ^\+R泩]u~lW]Vi,k%xdh0vi{'5~˜uy|Euqo θclVy{]]RyNPWCŖad=yqrx~^ғ =LX2!oUUUJ* [E|3[ W%15i![Ųv?Heygٚ2|V $Pif:æ$07_xʹ2AO>Ϯ+іwR_ٍivr+bbq5ō'G^:fyo6Èצk [X -CDl*>M@*hujϡ#'>@ưiO\ӜNUYW^cؽJ̼I]њR7l²܂=0[űQ{Wx>UXNVXՓ?}K%=ZueY087sx|5=:2Ƶ1gWh-mDʦRZ|E(bg'Ƙl56p|Az-ߊ+lW=C^G3}eƧLY\b[YwvrgЏ~E!c“d_2zZ!D|z{J}H1ub:Iݦ\zzBOǮ&3.|O/|/\GO{a6ž?,;TohܡL<iŠ fMҧUFָWEdA[A6 ijԳ}h2y)z46c챯BV?gr.r?S͢Nd:d@*5C֨mEGhW7[$ }yDekW6uYhgbOx>UX"\Sk|*6r.4O}x<,xXԻ+뱰WF .pM;-웵žj}4NOhQ'-q^cmDoD Z&}9M;mM؍XJw yw7y߁c5۞+\O0As:܋v)CI>sH* 9 ?6 ,7ۚSSU+w|H:u+hW x'*_72q{=43L1A x?32LDž4U$مV׌z_V^l 6x2>K]`K{קQL##탷 vaX.!>葶Tw#T;ܼk]mbsIew@wlׂ8="o].ʵur-(,z|ScfFgvi8L/`L-D~9EpH+ ֔^hZljQmMPQ`fذ=c[M&aI7kc4÷}t_F.KJ?RmkBSx]N0Æ WM- 2*5X|DZ=fLc(F? hҶ BLrGpodgd/e>f 9]WA\\Lf[xilϣTs1H QlHاEt(SAZ_Y X mkBTWx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 %mkBT(xm0PF`F2ת#0G{_ RG\+EOy8"o@⻶0 +X`}x{oM[>5k\-y yMiAia=hhV_i!&Cd8O\Scq}Wfs }6d>)1so6"k}ާs|)'.=sr[9A~fvq}o7Ts߻/zź~[A~/OL j"Z?&c|e긑mkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jwymkBT6x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)PU{ ..T}6ڳ-F`p]k߅~b  О$wݓٱ|sCoA+q3lOx@(0a+? T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ)/tihf ѸX>E)<,6s45zb?J\<OM%O#(76:= ӋYAƒH Ls6MXBcX&ǘJte. 3.je(??Lj=%wZizFTx$kP8Em jAOހ>~؆B9 ֤8UKCvjbL Cy ;mj P. DkwUE€3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ 1 +KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe; <a>,⢞jk0B[p($Ǡp4 nq`XƓ vϵ.xHnorJ5Hu뇗 f a[Z:>36[g RL؍?( &w.7C#~B{] UW 71jk~ecGrD.=K@WDZM0倐0\xvqNZ ># BE )&yA}t?B Ym(WIpɱ |2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'N adĢG3%#)?$s _5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~ ˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽ #kXfyEAB9uM4P=_lgW؇N#_nGpp ,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz! uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ ,NsjF=B` 큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*u f:@ʫRH.66jcGOpO- 6HKJU:Jǃv,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£ _' Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1Lk=rr 4/gEr~PnB[\g[{gYvRW' {Fem1{ wL;7&$xc0 n&u@5sCCձm8Heft x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ4)%b6B8\pe;u)ko)#WSncRx{[sXv195_0Kՙ7>Tp5ٴl3S"؝LX睫[5m Q="u}pϘ*xbՉ#iM+@Z! Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3; ΑO1A/r R*5i&j#Y2:$Z(ad@>'z L뇶6Z8|`6"X1_z' F-я?X^ A:?1;h/KVB' vOnFS ƤQ{=kh7MwXQp\v͓O/. N3HKRlK"q^Wh1wt h@3e6N|I;y?8t[[! $,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[# BHǽ{vekOTlq(UH͵h ݔ8,@tՂL{p/*L"d_y k,4 G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE _-- ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$պZ-hkh ?C$ ^tď9d(8P݅]ڶw[wl;dn׆oKd Hބ(DInI M_(5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:' 1H"z'7QqɌ#KR./CVgQȬ\ `?d1yuM6Ƶ8ZX]8^pwQE &1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+C RMzƏ7)nҀ lEGyl:̑IoBS%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r PRg_LbR Şl?␔)![Fo wi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣOP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/NW:݊&׾:x" ꭥу;R펔 c䛅љElmG§a= h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8 yA*W I9/ub)Zl: s 85J>~iI3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3v Dgh>>?3hYDkgC(ʹƒԕSԜ| 2Q94(?OGQ34 fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26U M6f,'C4i?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^w DMXf_8<%|8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y ,b'N=o0, ~M YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0 TU򄽻w"/4֏CQ`[{Ocn]+{{ N!33+5]qpj' r9FDȬ)~: 9Gmx2-?sraG"yvUpa;Ră A\& ?#n 0eed~oq嶭!!DzP^H)>oȑ.ļԶ=Hy7S-M ?8ycߧq|#5"2Б lm#UeΤVbM͘jAc7Z ]> 4gb s 2WRsKg6 's8qzTT[R[w)I95xWj #!nN+zPڔ KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[ Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f "Yi=D =4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta| i>T.Wo>>xϯY{緷m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWNJD)21ѵVagWPqȒ s?¶@g")s\T{f3go^w:^"{d#!φt},nyWFKv„X4|VB~,˘_&fjp/WԍwaO H 3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)IDATHՕMN0Tݓ|]dO9l-Y.'9DM8}% rhhP#Yf8pWd~ ˋXѪYѪ4ˋXdlx1p |#o߰RV5p uHA[*K~4Y^xQo֢[o45Zu3IRVC@OBJ(Vt Nf.ZF֥~ \4 *ybH#ho ]H_'N+ezb+CkO~蘼g] V*o|;Kϳ[ ] t.s3"Ѫdyaܕ< =O/dCK\>EUIUk։ޮ㖖)1Cqrrvz}|xxz}ؘpqqеۡ|qqqܞRa{Wpvppp!>,pH=X,.C>,;[V2hdZ :Y@3S9 :y< $",8=<-1*/8#< )!%55;<&0+52;B7.<8'22=76 2:<6=4:\6433yEEA;6wordpress/wp-content/plugins/zlinks/imgs/undefined.gifGIF89a)1B9BRBJZJRkRc{RssΌ֜ޭ!,-H 4P taŋ`C'@@V9 2B/cd90-HOiZ0ѧ 6HUdS 4lZէS $+WM8\ L ;1wordpress/wp-content/plugins/zlinks/imgs/user.gifGIF89aÔhׁٌfٗ>wJTΥɛu~ձvE=wƪa2U!,s`%hbNiUd߷nVprX)}Eьb:zHA~x+퐈I@H r% C(23"&(%;!;6wordpress/wp-content/plugins/zlinks/imgs/usergroup.gifGIF89aDmA$ӹZmȦIp!,d`$$!D"K8x^V EGP8o9/j@c[<]xt*j:CpP,`x" (ss!;9wordpress/wp-content/plugins/zlinks/imgs/waiting_ajax.gifGIF89a6-&nUK>6-&fZJviV}q]! NETSCAPE2.0!Created with ajaxload.info! ,30Ikc:Nf E1º.`q-[9ݦ9 JkH! ,4N!  DqBQT`1 `LE[|ua C%$*! ,62#+AȐ̔V/cNIBap ̳ƨ+Y2d! ,3b%+2V_ ! 1DaFbR]=08,Ȥr9L! ,2r'+JdL &v`\bThYB)@<&,ȤR! ,3 9tڞ0!.BW1  sa50 m)J! ,2 ٜU]qp`a4AF0` @1Α! ,20IeBԜ) q10ʰPaVڥ ub[;4wordpress/wp-content/plugins/zlinks/imgs/webpage.gifGIF89aZk!BRJsRkޥ! ,|H  @ 8p 4h` . ` 9R<P@  q9Q0Pɳ *5`4JEp!֬"8U+Ɔf] ;;wordpress/wp-content/plugins/zlinks/imgs/zitgistlogosml.pngr@PNG  IHDR(d=sBIT|d pHYs  ~tEXtCreation Time03/30/07tEXtSoftwareMacromedia Fireworks 8hx=prVWxQ0aa ۉO紣f( f1'a}Mo/NS&bK&I2%-l4LG[8 2 "CAap".x7UT|4}Sﻅ{ojMV^kvC Q܀6;Xo1\je^,@gZ/ޕMM{9٭ [!aˡ<~qo6>\mxm y,3W=H HmkBF)3!mkTSx]]s8n&=ڽUUݧK(Ylk%yKD;fU/nwHHڒ<ډ! n4 Uz?l^7=]kuU K^#oY3u Ofڃ;x{yv˹@+Vi)r?8:*犧\);Jrϔ?h#ws8SofsoSH㷆]lDkOZ=dߢӥX2G׺~kԢK XrC#귏5PX۴ JpRDg_}8LnZبiBs3(Sers~4?7H-І1G5 qmsX=XK&:-G91 L347FPEIg $d2Lc!OpḿC1`<cj(zNVn 6!C m0TqrZ"FD] (cb8jː4&QͰ6Ò!XbSK08f:j*tǸ :xׂ /3a7p`OnHqtM2,; pD =} 43/T]u58Įt:W .().G4Qʏ\9SCf5Քҙ~2B僐K"a.C' :eMoBVl䨓}z }J N]P+:Κ\a>r*mUV(߁fxU 30hܔqTEl؍E@$&!u•'ŐrDhgRkn܄E1 1BdPqM2M5tk 9LCc1p,Me\;E٠I֜1ߤM`\@r$ʍfmNJF 0Gbˆ 'UNzi24tC8C@ @k*4ucjqP-3M=pHz``)?@ )Pg`0lI`c2gx.Il[:ZsQWsn.@m^ {G3^f %JRG~Vi0 mdV^wjɫ2pyTHNn]kq k a@: ȼ0m0~]q"fIcʠQ4*FeШ7Ҡ|ԛtw4*E:JϤ(i5g A6eU[I WqJ׻41j7Ҥ3IFIMzqe#ġbVҜ~[J+aV + S!u_p+CjjYa\5zQ#΢xjQ*C U.栅Uk/:|!I`:M1FƼҡxpՋA 8| @8"47Jd& m*57n݅3}:{;p&~A3Kf:n(ɢ[ c|}ő5r# 93K(`:δ7oaP25@ƅ0#Q "ZS"] Ar%N!g201&}up7ul0FA)q#A 0`a0I2x7&Ɠ s-P#Z.`=Hg 0^1ݴr m{\>T@ G#ɒZ -P$rb;+rb\e29 B4gC5a'nk[f1=CɼpUl%w4` Ub,O#rm2m&hE?'30ԖcB><|Kk͗!=G*ic2Pɠ]534VƌSΏh͓S+]C`gwZYXRjDe /]vt5XЪ3hi,gX;IԔƱ Uf2Tx35W%UJ+e-#6qJ JwZ<WK-w!%ō!n|Ä# )olF@ъd@!9|L\[N h A|Fn+el4d4(yPͯjı)GA A> 33a@n]~,`TǑ5vf=O`}YQ◌&M-1N8DKy!.K W!I]ӔIc9n\?)9iY3_qK( 4GL$;n!jHȣp,O=.O"VY^1V_L7?ˠ Lc8El&%|j7݅X>atKq89)pfv{Y}ݖ`"S44L|A_C cH{BFxAstZuI,5-щC}nsb(beRAa|܎n[B::ny'Hwu٨e-v?6]2<%$zwt0 "җr-W 跻hwړ.{J?~$K KO0 7VAD$$&+g\xiTJ5'9)'QIT*.!!23J#PSNd*G *EsNRsUIgU+%*DC^Qgj(G/Jќ~[>2.== e$$5$0:DѹC{[\=`?I9_NZ5&Z%2ӸF^,pp$|9iՙꕴHKLB<,Ο/'-IˮUDZ:ߢs\>+N^QN &F%"e٢Up _q:l99LNn%"r I+l8XsEN9M&ʌji41-Ο/')ִVimcm:d䕓$*(T2V$lj#,/WI;0mkDm=vdĎ{.ObZj"KTQ-v6jQ$n/rS皵EZYEE5FbUe)؊(v 50eiMKs5BOlϴ\է%mԛIR¦񌋣C1:zGK{ Q]5xݢJumZ[U4%OXkoJ)RDvBE&[ڪg $- R$`KC=8ÿpiEV-{> el 1hBdk22j U=df{- 0i=7kcc`JRâO+Y;oJ j?.G3\dbC/䩳aB}TG~GzCuj!Vj*>)^gh-/Zg} M-7d%6M`I͍ k~pU#.3_.*1w? ;Kf| o۾wu)~@ahkzM`_\{$Q~ ʫ_C,ih̾"GJ %ipB\ÿD0|F II^ރڢ2-!iUj|lW^jXr+,)kʿ@$)Y\m!A'ϩ_(Gl&3h޲@{w6НW\={xt銧+.eSLgoW+Wo'Z+zlmVl]uօ;%S؃¾bWz{W]/2d}WW\j*Rk?銧W"kT<]tk:iW*}WM߫x.tWtl'~U^W1~bU^[c*~bU^{|={W*ZW]*~銧e<݆+'D$+4 ގiò5~f $z}J=C7|a@ 1`PL[g{,:]=سqP礪)׷ū]ƮZJҾLsY{µ/: vE[C-S'۵KvTvieK5oWvi:C?|Vˏ;T-qEV+!Q;v^{W?IsǾxCdfͽ[/cť6p bg~Ր^ t&hVK`'Foe4_>k4!dϨ,R`w*}o~ȧb:Yn%@}+KMhry`_/ddK@_J#cȆ( \ч1D?}˝=-GOf-S vr~:SjT֧?)O[RZN :>OC@,) ˞TD=|8#2Vגk'⸨a~%hd?Oڎ!!>C[ոQ O ܮW& J2l(fc5+-fma>bl ȄFy6 [-s$SE%(p\yJmJ[#_.Y$ӥC>ʆ`91?&huq*hԽTlvzrPGD|s[t1ʏdNKAEX,Aֽ& N`9N`-GZxvY֥Hiox K9Vcg񃟸'~mb$> Ƶ[OmlтLzA}9}J,k -=|F^##( g=o;J͟u5A?kXsMArq'ߊ/JC;]y,*E屨<X.ÝӐ9x}pOQql4/ZW Ik Q~ѺOhwBg4f 6#mj+[' o=:RI&! bMN%i,l> aCOtLw>UIOz-⸌ 4p%%Ot#op!9WmXƥzѼm;A9{#&uѵ뙻iQu/lGlri^ב4=g6lÙn'j[cci]uqm%u87& [*޻&GE|B&S[h ZZ9pgC i=XX>uJuc_YG[0{G|b#=f7p{<}y %}~v';Vp|Xn{{JD: obĢU<\<<~st=ofsϫYج]~dïw!_?5|ORs\ Nlh6M ,o%=@ʦugМW}V}?Tpg71=ZvoF~=Rw{L=:7 VOYpX2F7tlS2L6Û5L%},=!^@a#ݏGXa'YvX;QoHGChDM *ܯRPڥ*RGݤwOth^lnx,X ]ԧSd9tXQ<<Gmz{5߀ö |2Kd, j]0p> (v{9:xWN'NǑ%d͔LJf:vFMh,t^w헖e鏎ph4 SU~+Qu[Ak#HYz̗*pH ]F&KTMH~sԡ^?z5g1@%/pyP!XYFH?O!h ^Q 1uژkS~2:KK`zG4F|<\[\MAގmB_vgYcwnz]:uc`4NcF#5  5$C82,H߰N~Dצ_a8G o:Ro;bO[tmkBSx]NA0ܣ AU%706!blﶂLfv6#b# ѣn 4\inF{gAtӲlT‘8 'kIߘ [c,=&xnpϣT}1HqQlHاYtl(SA1_ W mkBTWx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 %mkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jwymkBT6x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)P<P 1nZU%/iz9EV%4r[c7^{\?ZYviʿ폨smʿ:ur;sÅ7?zJvtu7m?xOM^4Z?pmzI1[omkBT\xk{pCBn$rs%Gə…VZ~$%?}ZaVGv 4v,_w1?eA ߷?=ߥǻ}kRio3N_;Cmh9yq\ӿ|:WkO<6z;/.hײk\*=NSK?ac\g${Z=]~+?$ɼhoBdyw}]uFXхޢ[^]nΪˏ[dC\g${&=)mmC۷džߕo{uKY_-g''r,V͟<񓡦6lڴR{Gړ>猌:KgUUU vE35Sh.I$cHI¦ 9ɎF:͛Y[{`Y<_z0@F'aժաbhu?\gƖ/I\ $*mkBTx}+(H,"H$"#X$,QԈZs>U{ ..T}6ڳ-F`p]k߅~b  О$wݓٱ|sCoA+q3lOx@(0a+? T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ)/tihf ѸX>E)<,6s45zb?J\<OM%O#(76:= ӋYAƒH Ls6MXBcX&ǘJte. 3.je(??Lj=%wZizFTx$kP8Em jAOހ>~؆B9 ֤8UKCvjbL Cy ;mj P. DkwUE€3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ 1 +KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe; <a>,⢞jk0B[p($Ǡp4 nq`XƓ vϵ.xHnorJ5Hu뇗 f a[Z:>36[g RL؍?( &w.7C#~B{] UW 71jk~ecGrD.=K@WDZM0倐0\xvqNZ ># BE )&yA}t?B Ym(WIpɱ |2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'N adĢG3%#)?$s _5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~ ˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽ #kXfyEAB9uM4P=_lgW؇N#_nGpp ,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz! uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ ,NsjF=B` 큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*u f:@ʫRH.66jcGOpO- 6HKJU:Jǃv,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£ _' Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1Lk=rr 4/gEr~PnB[\g[{gYvRW' {Fem1{ wL;7&$xc0 n&u@5sCCձm8Heft x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ4)%b6B8\pe;u)ko)#WSncRx{[sXv195_0Kՙ7>Tp5ٴl3S"؝LX睫[5m Q="u}pϘ*xbՉ#iM+@Z! Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3; ΑO1A/r R*5i&j#Y2:$Z(ad@>'z L뇶6Z8|`6"X1_z' F-я?X^ A:?1;h/KVB' vOnFS ƤQ{=kh7MwXQp\v͓O/. N3HKRlK"q^Wh1wt h@3e6N|I;y?8t[[! $,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[# BHǽ{vekOTlq(UH͵h ݔ8,@tՂL{p/*L"d_y k,4 G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE _-- ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$պZ-hkh ?C$ ^tď9d(8P݅]ڶw[wl;dn׆oKd Hބ(DInI M_(5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:' 1H"z'7QqɌ#KR./CVgQȬ\ `?d1yuM6Ƶ8ZX]8^pwQE &1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+C RMzƏ7)nҀ lEGyl:̑IoBS%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r PRg_LbR Şl?␔)![Fo wi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣOP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/NW:݊&׾:x" ꭥу;R펔 c䛅љElmG§a= h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8 yA*W I9/ub)Zl: s 85J>~iI3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3v Dgh>>?3hYDkgC(ʹƒԕSԜ| 2Q94(?OGQ34 fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26U M6f,'C4i?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^w DMXf_8<%|8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y ,b'N=o0, ~M YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0 TU򄽻w"/4֏CQ`[{Ocn]+{{ N!33+5]qpj' r9FDȬ)~: 9Gmx2-?sraG"yvUpa;Ră A\& ?#n 0eed~oq嶭!!DzP^H)>oȑ.ļԶ=Hy7S-M ?8ycߧq|#5"2Б lm#UeΤVbM͘jAc7Z ]> 4gb s 2WRsKg6 's8qzTT[R[w)I95xWj #!nN+zPڔ KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[ Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f "Yi=D =4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta| i>T.Wo>>xϯY{緷m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWNJD)21ѵVagWPqȒ s?¶@g")s\T{f3go^w:^"{d#!φt},nyWFKv„X4|VB~,˘_&fjp/WԍwaO H 3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)IDATHTMHTQ3VM&c4 6F*h E%bl1]JRn'ET4.&gFۢ9[s{=9g@񫡯'l9(+:>u˙M/rPm`}*}iB[l@Q~ws~d/<@w&$#%9-Sw̬.-G#O+256[]+6u>{(dJ%TS* o8;`hq|m:t{(6WVqDXԉR Xa=cm7SSI-!xjjvNJe,(vv0ƂR*XU0/vj*=qhVṔgNMFV-.ta ;Ҹ4\IU_NB8PU\.Ris-NƂ^ aϹ`ErVs(@ `=n6b.\(*ţ# J$py2EG=R d,(Nl\8祝%Gq_~}k#,jTVEm|Bģpan 0!q0 u0 ?~z#++SjHn, ;4wQ\R)*dpUsayfR fSwB̠nKzQ*+.=IENDB`;wordpress/wp-content/plugins/zlinks/imgs/zlinks_logo_45.pngmPNG  IHDR+ 0sBIT|d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time09/28/07UL"prVWxM0asІ ASw/ȻwhU7Qϗs?>1%\_sNuR.oϔ6r9伤R ?OlrZ凧S%kn_t"vv7~jIqTؽCUFy:iO_Mf}\e,y~Y{Te=qk^zkvS7M>/=L;HmkBF)3NmkTSx][sƒı%ߓSه}Q>w(J)!Xʋ FstaowxQbX@bp wI3hAIJj:i{ǟۼ?hzD3OjzuO؃+/wF~l' JCke C _} - (6x#;#'h43h'#n/ht!4}h; {GǶեvAze79dcmJ vyemZS6nؼ|VnaP)" \|>ڣfi\sO1*Akh$:X=XM1B6>>L&1$B{ژB&CdIuà;0\v)ǰ/з[hg.Sl :R @9pi`|``]XpyʹSO9L[-漴l T$"{-Wwrci8:І6ڐA rjK]>3JdZ /!RF,CE[D1M'R%5[5.@/3L/VTgqރ/STL:2<5v|Nۘ!^@c9Avo"E/MH6(R 8f;%P<$Hvo͋BHf釞㉜@FƁd8"|n $Ȳ$- drQ^s Rxd'#u{wW}4bN#2u+3@m< -A0̇6M~: _ȗ͒%ky YwxBIIN ]вZ63eF >_Q)ͩ8 :CB}Q4LŤ0ZQRyu$WCDrpf$A2hTʠQsBBB|6$^]KY !!d݋){>xlb0Y &1S !Vs)^=a'הo,6U P˩G5_Ja(/Ӭjhs璒䥫Y_ N,2)Cp7 u Nr,M ,t;/tGJ[RCLxa@oַ`-.4t{ƒ1:, 6ONc@:3:=||O͈OM 7º(W)Ƃ<2kZRd4g>hZE{s*&8ߤp8gdV~9!3"Nb0I}=r'ݼoH AdzhM\!eG؟O_ T|\Zf C;WB[ҠMjB-LՐm|*$NW $E]b7OG0iKxkgk 1tԯr$+z4\FhL$סɮ35a([ 8 Ӂ#OX꼺V:6QZΑ7iJ8g.TAf= (*(, ‚PJ5kLCCHIAYjXlй %fB&-.i2\)cNy$G}Kx? JZh4F2I")E+鎤|t68AGaوILGBȴ:7:m$#Cm="sZ$e{6윃0U 0퇡l<בϽ>N3gz<6IPTbEO,U0FL^>7T" _0wT!^:kT+\ά4JXw]k9A3QLX[i(sL9-ӎ9׋i-o$p/b8[T(! <hOK` QbP,HE>#Ntx0CdR9'~~d`oM 8G*M-DSTjBkD/Ö':\8b&I+6U$g0Zݤ_+c*ke h /Ep…bC]VIt 56ًzz2\nb, 2 @ L70hc=ڡjҿ ֤M'vmD؄br{d0ZLy? {HvIcIc*fdXE7IX7l;h+'9Iά$Wnu]x (?$1bWMDZDOH]Bd{P$qr"SD6xې$>:rRK:^)Q9%hAC')IbҲ*iVe{ϫUcҪU*#!22&-Vi=->q2r3Y+Yc.M^GS~FĽ4`rTr*"B:3m)'!ٰYkftIr1i*it\QE񶓌rDǞEj4RJDqNp|{6bɜrxJۦCߌ73W =*`Wjzҳ gbdHVWվ֚0k글n._ Ǡ Avډ{^>4'♙0/F[#ЪYmy m1>8ݙul5ikϵNe=Eb#ڢ7)Mfښ`Fd3NjfK2pVº}.-vm|}_Jk&?371UϪi,s {EQ\gZĜmϫHde,'L=~a/[=mG}Qܧs5cJ?DQh*>`~}Cz׋jТҏEG--Huc:F|A8r3v{z6F9~=JYEλ0g<-^+/a&}G+DBF0v!|zsA)yH+{o qv؏xt tq!Bvfv{{ds>. X1aI%ͻIՌөȫT܈Z<ߠ-ˆ1tg+g8=4Ƹ[1%.%b芡FCW 7gZ+8zmV]qtj]z+v^>;[;W\sGPU ]1ڮb芡s0]v/v<-Q؟p8es^qvgc]1tKghk+kfh&+ﴊ;W+*vT;_ʻCW+*:C+*~]8"5c]w;W\!0tb芡0tʻ+.U=+*~ ]b)C7(< 2DLļuc+ f ?6M XC.xuń!\YɶAтݲ^\+R泩]u~lW]Vi,k%xdh0vi{'5~˜uy|Euqo θclVy{]]RyNPWCŖad=yqrx~^ғ =LX2!oUUUJ* [E|3[ W%15i![Ųv?Heygٚ2|V $Pif:æ$07_xʹ2AO>Ϯ+іwR_ٍivr+bbq5ō'G^:fyo6Èצk [X -CDl*>M@*hujϡ#'>@ưiO\ӜNUYW^cؽJ̼I]њR7l²܂=0[űQ{Wx>UXNVXՓ?}K%=ZueY087sx|5=:2Ƶ1gWh-mDʦRZ|E(bg'Ƙl56p|Az-ߊ+lW=C^G3}eƧLY\b[YwvrgЏ~E!c“d_2zZ!D|z{J}H1ub:Iݦ\zzBOǮ&3.|O/|/\GO{a6ž?,;TohܡL<iŠ fMҧUFָWEdA[A6 ijԳ}h2y)z46c챯BV?gr.r?S͢Nd:d@*5C֨mEGhW7[$ }yDekW6uYhgbOx>UX"\Sk|*6r.4O}x<,xXԻ+뱰WF .pM;-웵žj}4NOhQ'-q^cmDoD Z&}9M;mM؍XJw yw7y߁c5۞+\O0As:܋v)CI>sH* 9 ?6 ,7ۚSSU+w|H:u+hW x'*_72q{=43L1A x?32LDž4U$مV׌z_V^l 6x2>K]`K{קQL##탷 vaX.!>葶Tw#T;ܼk]mbsIew@wlׂ8="o].ʵur-(,z|ScfFgvi8L/`L-D~9EpH+ ֔^hZljQmMPQ`fذ=c[M&aI7kc4÷}t_F.KJ?RmkBSx]N0Æ WM- 2*5X|DZ=fLc(F? hҶ BLrGpodgd/e>f 9]WA\\Lf[xilϣTs1H QlHاEt(SAZ_Y X mkBTWx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 %mkBT(xm0PF`F2ת#0G{_ RG\+EOy8"o@⻶0 +X`}x{oM[>5k\-y yMiAia=hhV_i!&Cd8O\Scq}Wfs }6d>)1so6"k}ާs|)'.=sr[9A~fvq}o7Ts߻/zź~[A~/OL j"Z?&c|e긑mkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jwymkBT6x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)PU{ ..T}6ڳ-F`p]k߅~b  О$wݓٱ|sCoA+q3lOx@(0a+? T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ)/tihf ѸX>E)<,6s45zb?J\<OM%O#(76:= ӋYAƒH Ls6MXBcX&ǘJte. 3.je(??Lj=%wZizFTx$kP8Em jAOހ>~؆B9 ֤8UKCvjbL Cy ;mj P. DkwUE€3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ 1 +KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe; <a>,⢞jk0B[p($Ǡp4 nq`XƓ vϵ.xHnorJ5Hu뇗 f a[Z:>36[g RL؍?( &w.7C#~B{] UW 71jk~ecGrD.=K@WDZM0倐0\xvqNZ ># BE )&yA}t?B Ym(WIpɱ |2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'N adĢG3%#)?$s _5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~ ˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽ #kXfyEAB9uM4P=_lgW؇N#_nGpp ,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz! uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ ,NsjF=B` 큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*u f:@ʫRH.66jcGOpO- 6HKJU:Jǃv,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£ _' Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1Lk=rr 4/gEr~PnB[\g[{gYvRW' {Fem1{ wL;7&$xc0 n&u@5sCCձm8Heft x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ4)%b6B8\pe;u)ko)#WSncRx{[sXv195_0Kՙ7>Tp5ٴl3S"؝LX睫[5m Q="u}pϘ*xbՉ#iM+@Z! Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3; ΑO1A/r R*5i&j#Y2:$Z(ad@>'z L뇶6Z8|`6"X1_z' F-я?X^ A:?1;h/KVB' vOnFS ƤQ{=kh7MwXQp\v͓O/. N3HKRlK"q^Wh1wt h@3e6N|I;y?8t[[! $,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[# BHǽ{vekOTlq(UH͵h ݔ8,@tՂL{p/*L"d_y k,4 G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE _-- ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$պZ-hkh ?C$ ^tď9d(8P݅]ڶw[wl;dn׆oKd Hބ(DInI M_(5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:' 1H"z'7QqɌ#KR./CVgQȬ\ `?d1yuM6Ƶ8ZX]8^pwQE &1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+C RMzƏ7)nҀ lEGyl:̑IoBS%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r PRg_LbR Şl?␔)![Fo wi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣOP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/NW:݊&׾:x" ꭥу;R펔 c䛅љElmG§a= h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8 yA*W I9/ub)Zl: s 85J>~iI3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3v Dgh>>?3hYDkgC(ʹƒԕSԜ| 2Q94(?OGQ34 fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26U M6f,'C4i?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^w DMXf_8<%|8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y ,b'N=o0, ~M YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0 TU򄽻w"/4֏CQ`[{Ocn]+{{ N!33+5]qpj' r9FDȬ)~: 9Gmx2-?sraG"yvUpa;Ră A\& ?#n 0eed~oq嶭!!DzP^H)>oȑ.ļԶ=Hy7S-M ?8ycߧq|#5"2Б lm#UeΤVbM͘jAc7Z ]> 4gb s 2WRsKg6 's8qzTT[R[w)I95xWj #!nN+zPڔ KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[ Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f "Yi=D =4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta| i>T.Wo>>xϯY{緷m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWNJD)21ѵVagWPqȒ s?¶@g")s\T{f3go^w:^"{d#!φt},nyWFKv„X4|VB~,˘_&fjp/WԍwaO H 3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)IDATHՕMN0Tݓ|]dO9l-Y.'9DM8}% rhhP#Yf8pWd~ ˋXѪYѪ4ˋXdlx1p |#o߰RV5p uHA[*K~4Y^xQo֢[o45Zu3IRVC@OBJ(Vt Nf.ZF֥~ \4 *ybH#ho ]H_'N+ezb+CkO~蘼g] V*o|;Kϳ[ ] t.s3"Ѫdyaܕ< =O/d\"zLinksFAQ  News"; var annotations_container = OAT.Dom.create("div",{},"annotations_container"); zitgist_popup.appendChild(annotations_container); show_annotations(uri, annotations_container, local_path); var add_annotation_container = OAT.Dom.create("div",{},"editor_annotation_container"); zitgist_popup.appendChild(add_annotation_container); var annotation_button_container = OAT.Dom.create("div",{},"btn_annotation_container"); zitgist_popup.appendChild(annotation_button_container); var annotation_editor = OAT.Dom.create("textarea",{},"annotation_editor"); add_annotation_container.appendChild(annotation_editor); var annotation_button = OAT.Dom.create("img",{},"annotation_button"); annotation_button.src = local_path + 'imgs/annotate_btn.gif'; annotation_button_container.appendChild(annotation_button); OAT.Event.attach(annotation_button,"click",function(event) { // Check if we save an edition or a new annotaiton if(save_type == "edit") { var id = current_edited_annotation_id; var annotation_body_text = document.getElementById("annotation_editor_" + id).value; OAT.Event.source(event).src = local_path+"imgs/waiting_ajax.gif"; var params = "id="+id+"&author="+ author_id +"&body="+escape(annotation_body_text); OAT.Event.source(event).src = local_path+"imgs/waiting_ajax.gif"; OAT.Event.source(event).width = "16"; OAT.Event.source(event).height = "16"; if (window.XMLHttpRequest) { req_anno_4 = new XMLHttpRequest(); req_anno_4.uri = uri; req_anno_4.container = annotations_container; req_anno_4.local_path = local_path; req_anno_4.annotation_btn = OAT.Event.source(event); req_anno_4.onreadystatechange = process_edit_annotation; req_anno_4.open("POST", local_path + "edit_annotation.php", true); req_anno_4.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno_4.setRequestHeader("Content-length", params.length); req_anno_4.setRequestHeader("Connection", "close"); req_anno_4.send(params); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req_anno_4 = new ActiveXObject("Microsoft.XMLHTTP"); if (req_anno_4) { req_anno_4.uri = uri; req_anno_4.container = annotations_container; req_anno_4.local_path = local_path; req_anno_4.annotation_btn = OAT.Event.source(event); req_anno_4.onreadystatechange = process_edit_annotation; req_anno_4.open("POST", local_path + "edit_annotation.php", true); req_anno_4.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno_4.setRequestHeader("Content-length", params.length); req_anno_4.setRequestHeader("Connection", "close"); req_anno_4.send(params); } } save_type = "new"; } else if(save_type == "new") { if(annotation_editor.value == "") { alert("Please add a body to your annotation"); } else { var params = "partial_uri="+escape(local_path)+escape("annotations/?id=")+"&author="+author_id+"&annotated_resource="+escape(uri)+"&body="+escape(annotation_editor.value); OAT.Event.source(event).src = local_path+"imgs/waiting_ajax.gif"; OAT.Event.source(event).width = "16"; OAT.Event.source(event).height = "16"; // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req_anno = new XMLHttpRequest(); req_anno.annotation_editor = annotation_editor; req_anno.annotations_container = annotations_container; req_anno.annotation_btn = OAT.Event.source(event); req_anno.local_path = local_path; req_anno.uri = uri; req_anno.onreadystatechange = update_annotations; req_anno.open("POST", local_path + "add_annotation.php", true); req_anno.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno.setRequestHeader("Content-length", params.length); req_anno.setRequestHeader("Connection", "close"); req_anno.send(params); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req_anno = new ActiveXObject("Microsoft.XMLHTTP"); if (req_anno) { req_anno.annotation_editor = annotation_editor; req_anno.annotations_container = annotations_container; req_anno.annotation_btn = OAT.Event.source(event); req_anno.uri = uri; req_anno.local_path = local_path; req_anno.onreadystatechange = update_annotations; req_anno.open("POST", local_path + "add_annotation.php", true); req_anno.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno.setRequestHeader("Content-length", params.length); req_anno.setRequestHeader("Connection", "close"); req_anno.send(params); } } } } }); var a1 = new OAT.AnimationOpacity(zitgist_popup,{opacity:1}); var a2 = new OAT.AnimationOpacity(zitgist_popup,{opacity:0}); // First mouseover behavior var position = OAT.Dom.position(element); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+10)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); OAT.MSG.attach(a2.animation,OAT.MSG.ANIMATION_STOP,function(){ /* hide after opacity gets to 0 */ OAT.Dom.hide(zitgist_popup); }); // Re-asign the mouse over event. OAT.Event.attach(element,"click",function(event) { /* start displaying on mouseover */ a2.stop(); var position = OAT.Event.position(event); zitgist_popup.style.left = (position[0]+5)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); }); var element_over = true; OAT.Event.attach(window.document,"click",function(event) { if(!element_over) { a1.stop(); a2.start(); } else { element_over = false; } }); OAT.Event.attach(zitgist_popup,"click",function(event) { element_over = true; }); OAT.Event.attach(element,"click",function(event) { element_over = true; }); } } function update_annotations() { if (req_anno.readyState == 4) { window.status = ''; if (req_anno.status == 200) { req_anno.annotation_btn.src = req_anno.local_path + 'imgs/annotate_btn.gif'; req_anno.annotation_btn.width = "102"; req_anno.annotation_btn.height = "25"; req_anno.annotation_editor.value = ""; show_annotations(req_anno.uri, req_anno.annotations_container, req_anno.local_path) } } } function show_annotations(uri, container, local_path) { container.innerHTML = ""; if (window.XMLHttpRequest) { req_anno_2 = null; req_anno_2 = new XMLHttpRequest(); req_anno_2.container = container; req_anno_2.uri = uri; req_anno_2.local_path = local_path; req_anno_2.onreadystatechange = process_show_annotations; req_anno_2.open("GET", local_path + "annotations.php?uri="+escape(uri), true); req_anno_2.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req_anno_2 = null; req_anno_2 = new ActiveXObject("Microsoft.XMLHTTP"); if (req_anno_2) { req_anno_2.container = container; req_anno_2.uri = uri; req_anno_2.local_path = local_path; req_anno_2.onreadystatechange = process_show_annotations; req_anno_2.open("GET", local_path + "annotations.php?uri="+escape(uri)+"&refresh="+ generateId(), true); req_anno_2.send(null); } } } function process_show_annotations() { if (req_anno_2.readyState == 4) { window.status = ''; if (req_anno_2.status == 200) { req_anno_2.container.innerHTML = ""; if(req_anno_2.responseXML) { var response = req_anno_2.responseXML.documentElement; for(var i = 0; i < response.getElementsByTagName('annotation').length; i++) { if(response.getElementsByTagName('annotation')[i]) { var annotation_item = response.getElementsByTagName('annotation')[i]; var annotation_item_container = OAT.Dom.create("div",{},"annotation_item_container"); req_anno_2.container.appendChild(annotation_item_container); var annotation_item_header = OAT.Dom.create("div",{},"annotation_item_header"); annotation_item_container.appendChild(annotation_item_header); annotation_item_header.innerHTML = "
    \"Annotation\"\"Edit\"Remove
    "; // Onclick Edit Annotation OAT.Event.attach(annotation_item_header.getElementsByTagName('img')[1],"click",function(event) { if(save_type == "new") // No more than one edition at time { var id = OAT.Event.source(event).id.substr(10,OAT.Event.source(event).id.length-10); var annotation_body_text = document.getElementById("annotation_item_body_id_" + id).innerHTML; // Replace
    by /n annotation_body_text = annotation_body_text.replace(/
    /g, "\n"); document.getElementById("annotation_item_body_id_" + id).innerHTML = ""; var annotation_editor = OAT.Dom.create("textarea",{},"annotation_editor"); annotation_editor.id = "annotation_editor_" + id; document.getElementById("annotation_item_body_id_" + id).appendChild(annotation_editor); annotation_editor.value = annotation_body_text; OAT.Dom.hide(OAT.Event.source(event)); OAT.Dom.hide(document.getElementById("annotation_item_body_id_" + id).parentNode.parentNode.parentNode.lastChild.previousSibling.firstChild); save_type = "edit"; current_edited_annotation_id = id; } else { alert("Edit one item at the same time"); } }); // Onclick Delete Annotation OAT.Event.attach(annotation_item_header.getElementsByTagName('img')[2],"click",function(event) { if(save_type == "new") // No deletation when editing { if (confirm("Are you sure you want to delete this annotation?")) { var id = OAT.Event.source(event).id.substr(9,OAT.Event.source(event).id.length-9); OAT.Event.source(event).src = req_anno_2.local_path+"imgs/waiting_ajax.gif"; if (window.XMLHttpRequest) { rewq_anno_3 = new XMLHttpRequest(); rewq_anno_3.uri = req_anno_2.uri; rewq_anno_3.container = req_anno_2.container; rewq_anno_3.local_path = req_anno_2.local_path; rewq_anno_3.onreadystatechange = process_delete_annotation; rewq_anno_3.open("GET", req_anno_2.local_path + "delete_annotation.php?id="+id, true); rewq_anno_3.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { rewq_anno_3 = new ActiveXObject("Microsoft.XMLHTTP"); if (rewq_anno_3) { rewq_anno_3.container = req_anno_2.container; rewq_anno_3.uri = req_anno_2.uri; rewq_anno_3.local_path = req_anno_2.local_path; rewq_anno_3.onreadystatechange = process_delete_annotation; rewq_anno_3.open("GET", req_anno_2.local_path + "delete_annotation.php?id="+id+"&refresh="+ generateId(), true); rewq_anno_3.send(null); } } } } else { alert("Save your edition before deleting an annotation"); } }); var annotation_item_body = OAT.Dom.create("div",{},"annotation_item_body"); annotation_item_body.id = "annotation_item_body_id_" + annotation_item.getElementsByTagName('id')[0].firstChild.data; annotation_item_container.appendChild(annotation_item_body); annotation_item_body.innerHTML = annotation_item.getElementsByTagName('body')[0].firstChild.data; var item_separator = OAT.Dom.create("div",{},"zitgist_menu_separator"); annotation_item_container.appendChild(item_separator); OAT.Dom.show(document.getElementById("annotation_item_body_id_" + annotation_item.getElementsByTagName('id')[0].firstChild.data).parentNode.parentNode.parentNode.lastChild.previousSibling.firstChild); } } reposition_popup(req_anno_2.container.parentNode) } } } } function process_delete_annotation(container, id) { if (rewq_anno_3.readyState == 4) { window.status = ''; if (rewq_anno_3.status == 200) { show_annotations(rewq_anno_3.uri, rewq_anno_3.container, rewq_anno_3.local_path); } } } function process_edit_annotation(container, id) { if (req_anno_4.readyState == 4) { window.status = ''; if (req_anno_4.status == 200) { req_anno_4.annotation_btn.src = req_anno_4.local_path + 'imgs/annotate_btn.gif'; req_anno_4.annotation_btn.width = "102"; req_anno_4.annotation_btn.height = "25"; show_annotations(req_anno_4.uri, req_anno_4.container, req_anno_4.local_path); } } }7wordpress/wp-content/plugins/zlinks/js/oat/animation.js/* * $Id: animation.js,v 1.6 2007/07/31 09:14:17 source Exp $ * * This file is part of the OpenLink Software Ajax Toolkit (OAT) project. * * Copyright (C) 2005-2007 OpenLink Software * * See LICENSE file for details. */ /* a = new OAT.Animation(element,optObj) a = new OAT.AnimationSize(element,optObj) a = new OAT.AnimationPosition(element,optObj) a = new OAT.AnimationOpacity(element,optObj) a = new OAT.AnimationCSS(element,optObj) a.start() a.stop() */ OAT.Animation = function(element, optionsObject) { /* periodic executer */ var self = this; this.elm = $(element); this.options = { delay:50, startFunction:function() {}, conditionFunction:function() {}, stepFunction:function() {}, stopFunction:function() {} } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } this.step = function() { var callback = function() { if (!self.running) return; if (self.options.conditionFunction(self)) { self.running = 0; self.options.stopFunction(self); OAT.MSG.send(self,OAT.MSG.ANIMATION_STOP,self); } else { self.options.stepFunction(self); self.step(self); } } /* callback */ setTimeout(callback,self.options.delay); } this.start = function() { self.running = 1; self.options.startFunction(self); self.step(); } this.stop = function() { self.running = 0; } } OAT.AnimationSize = function(element, optionsObject) { var self = this; this.options = { width:-1, height:-1, delay:50, speed:1 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a.stepX = 0; a.stepY = 0; var dims = OAT.Dom.getWH(a.elm); a.width = dims[0]; a.height = dims[1]; a.diffX = (self.options.width == -1 ? 0 : self.options.width - dims[0]); a.diffY = (self.options.height == -1 ? 0 : self.options.height - dims[1]); a.signX = (a.diffX >= 0 ? 1 : -1); a.signY = (a.diffY >= 0 ? 1 : -1); var dx = a.diffX * a.diffX; var dy = a.diffY * a.diffY; a.stepX = a.signX * Math.sqrt( self.options.speed * self.options.speed * dx / (dx + dy) ); a.stepY = a.signY * Math.sqrt( self.options.speed * self.options.speed * dy / (dx + dy) ); } o.stopFunction = function(a) { if (self.options.width != -1) { a.elm.style.width = self.options.width + "px"; } if (self.options.height != -1) { a.elm.style.height = self.options.height + "px"; } } o.conditionFunction = function(a) { var ok_w = (a.signX > 0 ? a.width >= self.options.width : a.width <= self.options.width); var ok_h = (a.signY > 0 ? a.height >= self.options.height : a.height <= self.options.height); if (self.options.width == -1) { ok_w = 1; } if (self.options.height == -1) { ok_h = 1; } return (ok_w && ok_h); } o.stepFunction = function(a) { a.width += a.stepX; a.height += a.stepY; var w = parseInt(a.width); var h = parseInt(a.height); if (self.options.width != -1) { a.elm.style.width = (w >= 0 ? w : 0) + "px"; ; } if (self.options.height != -1) { a.elm.style.height = (h >= 0 ? h : 0) + "px"; ; } } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.AnimationPosition = function(element, optionsObject) { var self = this; this.options = { left:-1, top:-1, delay:50, speed:1 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a.stepX = 0; a.stepY = 0; var pos = OAT.Dom.getLT(a.elm); a.left = pos[0]; a.top = pos[1]; a.diffX = (self.options.left == -1 ? 0 : self.options.left - pos[0]); a.diffY = (self.options.top == -1 ? 0 : self.options.top - pos[1]); a.signX = (a.diffX >= 0 ? 1 : -1); a.signY = (a.diffY >= 0 ? 1 : -1); var dx = a.diffX * a.diffX; var dy = a.diffY * a.diffY; a.stepX = a.signX * Math.sqrt( self.options.speed * self.options.speed * dx / (dx + dy) ); a.stepY = a.signY * Math.sqrt( self.options.speed * self.options.speed * dy / (dx + dy) ); } o.stopFunction = function(a) { if (self.options.left != -1) { a.elm.style.left = self.options.left + "px"; } if (self.options.top != -1) { a.elm.style.top = self.options.top + "px"; } } o.conditionFunction = function(a) { var ok_l = (a.signX > 0 ? a.left >= self.options.left : a.left <= self.options.left); var ok_t = (a.signY > 0 ? a.top >= self.options.top : a.top <= self.options.top); if (self.options.left == -1) { ok_l = 1; } if (self.options.top == -1) { ok_t = 1; } return (ok_l && ok_t); } o.stepFunction = function(a) { a.left += a.stepX; a.top += a.stepY; var l = parseInt(a.left); var t = parseInt(a.top); if (self.options.left != -1) { a.elm.style.left = l + "px"; ; } if (self.options.top != -1) { a.elm.style.top = t + "px"; ; } } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.AnimationOpacity = function(element, optionsObject) { var self = this; this.options = { opacity:1, delay:50, speed:0.1 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a.opacity = 1; if (OAT.Browser.isGecko) { a.opacity = parseFloat(OAT.Dom.style(a.elm,"opacity")); } if (OAT.Browser.isIE) { var filter = OAT.Dom.style(a.elm,"filter"); var num = filter.match(/alpha\(opacity=([^\)]+)\)/); if (num) { a.opacity = parseFloat(num[1])/100; } } a.step_ = 1; a.diff = self.options.opacity - a.opacity; a.sign = (a.diff >= 0 ? 1 : -1); a.step_ = a.sign * self.options.speed; } o.stopFunction = function(a) { OAT.Style.opacity(a.elm,self.options.opacity); } o.conditionFunction = function(a) { var ok = (a.sign > 0 ? a.opacity+0.0001 >= self.options.opacity : a.opacity-0.0001 <= self.options.opacity); return ok; } o.stepFunction = function(a) { a.opacity += a.step_; OAT.Style.opacity(a.elm,a.opacity); } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.AnimationCSS = function(element, optionsObject) { var self = this; this.options = { delay:50, property:false, start:0, step:1, stop:10 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a[self.options.property] = self.options.start; a.elm.style[self.options.property] = self.options.start; } o.stopFunction = function(a) { a.elm.style[self.options.property] = self.options.stop; } o.conditionFunction = function(a) { var ok = (a[self.options.property] == self.options.stop); return ok; } o.stepFunction = function(a) { a[self.options.property] += self.options.step; a.elm.style[self.options.property] = a[self.options.property]; } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.Loader.featureLoaded("animation"); 7wordpress/wp-content/plugins/zlinks/js/oat/bootstrap.js-/* * $Id: bootstrap.js,v 1.5 2007/07/31 09:28:04 source Exp $ * * This file is part of the OpenLink Software Ajax Toolkit (OAT) project. * * Copyright (C) 2005-2007 OpenLink Software * * See LICENSE file for details. */ /* handles dynamic library loading */ OAT.Loader.Dependencies = { /* dependency tree */ ajax:"crypto", ajax2:"xml", soap:"ajax2", xmla:["soap","xml","connection"], roundwin:["drag","resize","simplefx"], rectwin:["drag","resize"], mswin:["drag","resize"], macwin:["drag","resize","simplefx"], ghostdrag:"animation", quickedit:"instant", grid:"instant", combolist:"instant", formobject:["drag","resize","datasource","tab"], tab:"layers", color:"drag", combobutton:"instant", pivot:["ghostdrag","statistics","instant","barchart"], combobox:"instant", menu:"animation", panelbar:"animation", dock:["animation","ghostdrag","resize"], calendar:"drag", graph:"canvas", dav:["grid","tree","toolbar","ajax2","xml","window"], dialog:["window","dimmer"], datasource:["jsobj","json","xml","connection","dstransport","ajax2"], gmaps:["gapi","map"], ymaps:"map", simplefx:"animation", msapi:["map","layers"], ws:["xml","soap","ajax2","schema","connection"], schema:["xml"], timeline:["slider","tlscale","resize"], piechart:"svg", graphsvg:["svg","graphsidebar","rdf","dereference"], rdf:"xml", anchor:["window","rectwin"], map:["window","rectwin"], openlayers:["map","layers","roundwin"], svgsparql:["svg","ghostdrag","geometry"], linechart:"svg", sparkline:"linechart", webclip:"webclipbinding", declarative:"json", tree:"ghostdrag", rdfbrowser:["rdfstore","tree","anchor","rdftabs","tab","dav"], rdfmini:["rdfstore","rdftabs"], rdfstore:["rdf","dereference","n3"], dereference:"ajax2", graphsidebar:"tree", form:["ajax2","dialog","datasource","formobject","crypto"], rssreader:"xml", notify:"animation", slidebar:"animation", fresnel:"xml" } OAT.Loader.Files = { /* only those whose names differ */ gmaps:"customGoogleLoader.js", ymaps:"customYahooLoader.js", openlayers:"OpenLayers.js", gapi:"gmapapi.js" } OAT.LoaderTMP = { /* second part of loader */ loadedLibs:[], /* libraries ready to be used */ loadingLibs:[], /* libraries marked for inclusion */ loadCallbacks:[], /* features & callbacks to be executed */ loadFeatures:function(features,callback) { /* load all these features and execute callback */ var allNames = OAT.Loader.makeDep(features); /* dependencies */ /* distinct values */ var distinct = {}; for (var i=0;i execute and mark for removal */ var ok = false; /* check for windows - special delivery */ if (OAT.Loader.loadedLibs.find("window") != -1) { /* include default window */ var obj = { 1:"mswin", 2:"macwin", 3:"roundwin", 4:"rectwin" } var name = obj[OAT.WindowType()]; if (OAT.Loader.loadedLibs.find(name) == -1) { /* not yet loaded! */ var deps = OAT.Loader.makeDep(name); for (var j=0;j=0;i--) { var index = done[i]; OAT.Loader.loadCallbacks.splice(index,1); } for (var i=0;i= 1024 && i+1 < post.length) { result = result / 1024; } else { return Math.round(result) + " " + post[i]; } } return this; } Date.prototype.format = function(formatStr) { var result = formatStr; result = result.replace(/d/,this.getDate().toString().leadingZero(2)); result = result.replace(/g/,parseInt(this.getHours()) % 12); result = result.replace(/G/,this.getHours()); result = result.replace(/h/,(parseInt(this.getHours()) % 12).toString().leadingZero(2)); result = result.replace(/H/,this.getHours().toString().leadingZero(2)); result = result.replace(/i/,this.getMinutes().toString().leadingZero(2)); result = result.replace(/j/,this.getDate()); result = result.replace(/m/,(this.getMonth()+1).toString().leadingZero(2)); result = result.replace(/n/,this.getMonth()+1); result = result.replace(/s/,this.getSeconds().toString().leadingZero(2)); result = result.replace(/U/,this.getTime()); result = result.replace(/w/,this.getDay()); result = result.replace(/Y/,this.getFullYear()); result = result.replace(/x/,this.getMilliseconds().toString().leadingZero(3)); return result; } Date.prototype.toHumanString = function() { return this.format("j.n.Y H:i:s"); } OAT.Dom = { /* DOM common object */ create:function(tagName,styleObj,className) { var elm = document.createElement(tagName); if (styleObj) { for (prop in styleObj) { elm.style[prop] = styleObj[prop]; } } if (className) { elm.className = className; } return elm; }, createNS:function(ns,tagName) { if (document.createElementNS) { var elm = document.createElementNS(ns,tagName); } else { var elm = document.createElement(tagName); elm.setAttribute("xmlns",ns); } return elm; }, text:function(text) { var elm = document.createTextNode(text); return elm; }, button:function(label) { var b = OAT.Dom.create("input"); b.type = "button"; b.value = label; return b; }, radio:function(name) { if (OAT.Browser.isIE) { var elm = document.createElement(''); return elm; } else { var elm = OAT.Dom.create("input"); elm.name = name; elm.type = "radio"; return elm; } }, image:function(src,srcBlank,w,h) { var elm = OAT.Dom.create("img",{width:w+"px",height:h+"px"}); OAT.Dom.imageSrc(elm,src,srcBlank); return elm; }, imageSrc:function(element,src,srcBlank) { var elm = $(element); var png = !!src.toLowerCase().match(/png$/); if (png && OAT.Browser.isIE) { elm.src = srcBlank; elm.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')"; } else { elm.src = src; } }, option:function(name,value,parent) { var opt = OAT.Dom.create("option"); opt.innerHTML = name; opt.value = value; if (parent) { $(parent).appendChild(opt); } return opt; }, append:function() { for (var i=0;i 1) { for (var i=0;i 1) { for (var i=0;i elements */ var x = c[0]; var y = c[1]; if (!OAT.Browser.isOpera || elm.scrollTop != elm.offsetTop || elm.scrollLeft != elm.offsetLeft) { x -= elm.scrollLeft; y -= elm.scrollTop; } if (OAT.Browser.isWebKit && parent == document.body && OAT.Dom.style(elm,"position") == "absolute") { return [x,y]; } x += parent_coords[0]; y += parent_coords[1]; return [x,y]; }, getLT:function(something) { var elm = $(something); var curr_x,curr_y; if (elm.style.left && elm.style.position != "relative") { curr_x = parseInt(elm.style.left); } else { curr_x = elm.offsetLeft; } if (elm.style.top && elm.style.position != "relative") { curr_y = parseInt(elm.style.top); } else { curr_y = elm.offsetTop; } return [curr_x,curr_y]; }, getWH:function(something) { /* This is tricky: we need to measure current element's width & height. If this property was already set (thus available directly through elm.style), everything is ok. If nothing was set yet: * IE stores this information in offsetWidth and offsetHeight * Gecko doesn't count borders into offsetWidth and offsetHeight Thus, we need another means for counting real dimensions. */ var curr_w, curr_h; var elm = $(something); if (elm.style.width && !elm.style.width.match(/%/) && elm.style.width != "auto") { curr_w = parseInt(elm.style.width); } else if (OAT.Style.get(elm,"width") && !OAT.Browser.isIE) { curr_w = Math.round(parseFloat(OAT.Style.get(elm,"width"))); } else { curr_w = elm.offsetWidth; if (elm.tagName.toLowerCase() == "input") { curr_w += 5; } } if (elm.style.height && !elm.style.height.match(/%/) && elm.style.height != "auto") { curr_h = parseInt(elm.style.height); } else if (OAT.Style.get(elm,"height") && !OAT.Browser.isIE) { curr_h = Math.round(parseFloat(OAT.Style.get(elm,"height"))); } else { curr_h = elm.offsetHeight; if (elm.tagName.toLowerCase() == "input") { curr_h += 5; } } /* one more bonus - if we are getting height of document.body, take window size */ if (elm == document.body) { curr_h = (OAT.Browser.isIE ? document.body.clientHeight : window.innerHeight); } return [curr_w,curr_h]; }, moveBy:function(element,dx,dy) { var curr_x,curr_y; var elm = $(element); /* If the element is not anchored to left top corner, strange things will happen during resizing; therefore, we need to make sure it is anchored properly. */ if (OAT.Dom.style(elm,"position") == "absolute") { if (!elm.style.left) { elm.style.left = elm.offsetLeft + "px"; elm.style.right = ""; } if (!elm.style.top) { elm.style.top = elm.offsetTop + "px"; elm.style.bottom = ""; } } var tmp = OAT.Dom.getLT(elm); curr_x = tmp[0]; curr_y = tmp[1]; var x = curr_x + dx; var y = curr_y + dy; elm.style.left = x + "px"; elm.style.top = y + "px"; }, resizeBy:function(element,dx,dy) { var curr_w, curr_h; var elm = $(element); /* If the element is not anchored to left top corner, strange things will happen during resizing; therefore, we need to make sure it is anchored properly. */ if (OAT.Dom.style(elm,"position") == "absolute" && dx) { if (!elm.style.left) { elm.style.left = elm.offsetLeft + "px"; elm.style.right = ""; } if (!elm.style.top && dy) { elm.style.top = elm.offsetTop + "px"; elm.style.bottom = ""; } } var tmp = OAT.Dom.getWH(elm); curr_w = tmp[0]; curr_h = tmp[1]; var w = curr_w + dx; var h = curr_h + dy; if (dx) { elm.style.width = w + "px"; } if (dy) { elm.style.height = h + "px"; } }, decodeImage:function(data) { var decoded = OAT.Crypto.base64d(data); var mime = "image/"; switch (decoded.charAt(1)) { case "I": mime += "gif"; break; case "P": mime += "png"; break; case "M": mime += "bmp"; break; default: mime += "jpeg"; break; } var src="data:"+mime+";base64,"+data; return src; }, removeSelection:function() { var selObj = false; if (document.getSelection && !OAT.Browser.isGecko) { selObj = document.getSelection(); } if (window.getSelection) { selObj = window.getSelection(); } if (document.selection) { selObj = document.selection; } if (selObj) { if (selObj.empty) { selObj.empty(); } if (selObj.removeAllRanges) { selObj.removeAllRanges(); } } }, getScroll:function() { if (OAT.Browser.isWebKit || (OAT.Browser.isIE && document.compatMode == "BackCompat")) { var l = document.body.scrollLeft; var t = document.body.scrollTop; } else { var l = Math.max(document.documentElement.scrollLeft,document.body.scrollLeft); var t = Math.max(document.documentElement.scrollTop,document.body.scrollTop); } return [l,t]; }, getFreeSpace:function(x,y) { var scroll = OAT.Dom.getScroll(); var port = OAT.Dom.getViewport(); var spaceLeft = x - scroll[0]; var spaceRight = port[0] - x + scroll[0]; var spaceTop = y - scroll[1]; var spaceBottom = port[1] - y + scroll[1]; var left = (spaceLeft > spaceRight); var top = (spaceTop > spaceBottom); return [left,top]; }, toSafeXML:function(str) { if (typeof(str) != "string") { return str; } return str.replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<"); }, uriParams:function() { var result = {}; var s = location.search; if (s.length > 1) { s = s.substring(1); } if (!s) { return result; } var parts = s.split("&"); for (var i=0; i < parts.length; i++) { var part = parts[i]; if (!part) { continue; } var index = part.indexOf("="); if (index == -1) { result[decodeURIComponent(part)] = ""; continue; } /* not a pair */ var key = part.substring(0,index); var val = part.substring(index+1); key = decodeURIComponent(key); val = decodeURIComponent(val); var r = false; if ((r = key.match(/(.*)\[\]$/))) { key = r[1]; if (key in result) { result[key].push(val); } else { result[key] = [val]; } } else { result[key] = val; } } return result; }, changeHref:function(elm,newHref) { /* opera cannot do this with elements not being part of the page :/ */ var ok = false; var e = $(elm); var node = e; while (node.parentNode) { node = node.parentNode; if (node == document.body) { ok = true; } } if (ok) { e.href = newHref; } else if (e.parentNode) { var oldParent = e.parentNode; var next = e.nextSibling; document.body.appendChild(e); e.href = newHref; OAT.Dom.unlink(e); oldParent.insertBefore(e,next); } else { document.body.appendChild(e); e.href = newHref; OAT.Dom.unlink(e); } }, makePosition:function(elm) { var e = $(elm); if (OAT.Dom.style(e,"position") != "absolute") { e.style.position = "relative"; } } } OAT.Style = { /* Style helper */ get:function(elm,property) { var element = $(elm); if (document.defaultView && document.defaultView.getComputedStyle) { var cs = document.defaultView.getComputedStyle(element,''); if (!cs) { return true; } return cs[property]; } else { return element.currentStyle[property]; } }, background:function(element,src) { var elm = $(element); var png = !!src.toLowerCase().match(/png$/); if (png && OAT.Browser.isIE) { elm.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')"; } else { elm.style.backgroundImage="url("+src+")"; } }, apply:function(something,obj) { var elm = $(something); if (!elm) {return;} for (var p in obj) { elm.style[p] = obj[p]; } }, opacity:function(element,opacity) { var o = Math.max(opacity,0); var elm = $(element); if (OAT.Browser.isIE) { elm.style.filter = "alpha(opacity="+Math.round(o*100)+")"; } else { elm.style.opacity = o; } } } OAT.Dom.style = OAT.Style.get; /* backward compatibility */ OAT.Dom.applyStyle = OAT.Style.apply; /* backward compatibility */ OAT.Browser = { /* Browser helper */ isIE:OAT.Dom.isIE(), isIE6:OAT.Dom.isIE6(), isIE7:OAT.Dom.isIE7(), isGecko:OAT.Dom.isGecko(), isOpera:OAT.Dom.isOpera(), isKonqueror:OAT.Dom.isKonqueror(), isWebKit:OAT.Dom.isWebKit(), isMac:OAT.Dom.isMac() } OAT.Event = { /* Event helper */ attach:function(elm,event,callback) { var element = $(elm); if (element.addEventListener) { /* gecko */ element.addEventListener(event,callback,false); } else if (element.attachEvent) { /* ie */ element.attachEvent("on"+event,callback); } else { /* ??? */ element["on"+event] = callback; } }, detach:function(elm,event,callback) { var element = $(elm); if (element.removeEventListener) { /* gecko */ element.removeEventListener(event,callback,false); } else if (element.detachEvent) { /* ie */ element.detachEvent("on"+event,callback); } else { /* ??? */ element["on"+event] = false; } }, source:function(event) { return (event.target ? event.target : event.srcElement); }, cancel:function(event) { event.cancelBubble = true; if (event.stopPropagation) { event.stopPropagation(); } }, position:function(event) { var scroll = OAT.Dom.getScroll(); return [event.clientX+scroll[0],event.clientY+scroll[1]]; }, prevent:function(event) { if (event.preventDefault) { event.preventDefault(); } event.returnValue = false; } } OAT.Dom.attach = OAT.Event.attach; OAT.Dom.detach = OAT.Event.detach; OAT.Dom.source = OAT.Event.source; OAT.Dom.eventPos = OAT.Event.position; OAT.Dom.prevent = OAT.Event.prevent; OAT.Loader = { /* first part of loader object */ toolkitPath:false, loadOccurred:0, /* was window.onload fired? */ openAjax:false, /* OpenAjax.js included? */ include:function(file) { var path = OAT.Loader.toolkitPath || ""; var value = (typeof(file) == "object" ? file : [file]); for (var i=0;i= 0 ? 1 : -1); a.signY = (a.diffY >= 0 ? 1 : -1); var dx = a.diffX * a.diffX; var dy = a.diffY * a.diffY; a.stepX = a.signX * Math.sqrt( self.options.speed * self.options.speed * dx / (dx + dy) ); a.stepY = a.signY * Math.sqrt( self.options.speed * self.options.speed * dy / (dx + dy) ); } o.stopFunction = function(a) { if (self.options.width != -1) { a.elm.style.width = self.options.width + "px"; } if (self.options.height != -1) { a.elm.style.height = self.options.height + "px"; } } o.conditionFunction = function(a) { var ok_w = (a.signX > 0 ? a.width >= self.options.width : a.width <= self.options.width); var ok_h = (a.signY > 0 ? a.height >= self.options.height : a.height <= self.options.height); if (self.options.width == -1) { ok_w = 1; } if (self.options.height == -1) { ok_h = 1; } return (ok_w && ok_h); } o.stepFunction = function(a) { a.width += a.stepX; a.height += a.stepY; var w = parseInt(a.width); var h = parseInt(a.height); if (self.options.width != -1) { a.elm.style.width = (w >= 0 ? w : 0) + "px"; ; } if (self.options.height != -1) { a.elm.style.height = (h >= 0 ? h : 0) + "px"; ; } } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.AnimationPosition = function(element, optionsObject) { var self = this; this.options = { left:-1, top:-1, delay:50, speed:1 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a.stepX = 0; a.stepY = 0; var pos = OAT.Dom.getLT(a.elm); a.left = pos[0]; a.top = pos[1]; a.diffX = (self.options.left == -1 ? 0 : self.options.left - pos[0]); a.diffY = (self.options.top == -1 ? 0 : self.options.top - pos[1]); a.signX = (a.diffX >= 0 ? 1 : -1); a.signY = (a.diffY >= 0 ? 1 : -1); var dx = a.diffX * a.diffX; var dy = a.diffY * a.diffY; a.stepX = a.signX * Math.sqrt( self.options.speed * self.options.speed * dx / (dx + dy) ); a.stepY = a.signY * Math.sqrt( self.options.speed * self.options.speed * dy / (dx + dy) ); } o.stopFunction = function(a) { if (self.options.left != -1) { a.elm.style.left = self.options.left + "px"; } if (self.options.top != -1) { a.elm.style.top = self.options.top + "px"; } } o.conditionFunction = function(a) { var ok_l = (a.signX > 0 ? a.left >= self.options.left : a.left <= self.options.left); var ok_t = (a.signY > 0 ? a.top >= self.options.top : a.top <= self.options.top); if (self.options.left == -1) { ok_l = 1; } if (self.options.top == -1) { ok_t = 1; } return (ok_l && ok_t); } o.stepFunction = function(a) { a.left += a.stepX; a.top += a.stepY; var l = parseInt(a.left); var t = parseInt(a.top); if (self.options.left != -1) { a.elm.style.left = l + "px"; ; } if (self.options.top != -1) { a.elm.style.top = t + "px"; ; } } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.AnimationOpacity = function(element, optionsObject) { var self = this; this.options = { opacity:1, delay:50, speed:0.1 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a.opacity = 1; if (OAT.Browser.isGecko) { a.opacity = parseFloat(OAT.Dom.style(a.elm,"opacity")); } if (OAT.Browser.isIE) { var filter = OAT.Dom.style(a.elm,"filter"); var num = filter.match(/alpha\(opacity=([^\)]+)\)/); if (num) { a.opacity = parseFloat(num[1])/100; } } a.step_ = 1; a.diff = self.options.opacity - a.opacity; a.sign = (a.diff >= 0 ? 1 : -1); a.step_ = a.sign * self.options.speed; } o.stopFunction = function(a) { OAT.Style.opacity(a.elm,self.options.opacity); } o.conditionFunction = function(a) { var ok = (a.sign > 0 ? a.opacity+0.0001 >= self.options.opacity : a.opacity-0.0001 <= self.options.opacity); return ok; } o.stepFunction = function(a) { a.opacity += a.step_; OAT.Style.opacity(a.elm,a.opacity); } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.AnimationCSS = function(element, optionsObject) { var self = this; this.options = { delay:50, property:false, start:0, step:1, stop:10 } for (var p in optionsObject) { self.options[p] = optionsObject[p]; } var o = {delay:self.options.delay}; o.startFunction = function(a) { /* prepare step */ a[self.options.property] = self.options.start; a.elm.style[self.options.property] = self.options.start; } o.stopFunction = function(a) { a.elm.style[self.options.property] = self.options.stop; } o.conditionFunction = function(a) { var ok = (a[self.options.property] == self.options.stop); return ok; } o.stepFunction = function(a) { a[self.options.property] += self.options.step; a.elm.style[self.options.property] = a[self.options.property]; } this.animation = new OAT.Animation(element,o); this.start = self.animation.start; this.stop = self.animation.stop; } OAT.Loader.featureLoaded("animation"); Owordpress/wp-content/plugins/zlinks/js/oat/.svn/text-base/bootstrap.js.svn-base-/* * $Id: bootstrap.js,v 1.5 2007/07/31 09:28:04 source Exp $ * * This file is part of the OpenLink Software Ajax Toolkit (OAT) project. * * Copyright (C) 2005-2007 OpenLink Software * * See LICENSE file for details. */ /* handles dynamic library loading */ OAT.Loader.Dependencies = { /* dependency tree */ ajax:"crypto", ajax2:"xml", soap:"ajax2", xmla:["soap","xml","connection"], roundwin:["drag","resize","simplefx"], rectwin:["drag","resize"], mswin:["drag","resize"], macwin:["drag","resize","simplefx"], ghostdrag:"animation", quickedit:"instant", grid:"instant", combolist:"instant", formobject:["drag","resize","datasource","tab"], tab:"layers", color:"drag", combobutton:"instant", pivot:["ghostdrag","statistics","instant","barchart"], combobox:"instant", menu:"animation", panelbar:"animation", dock:["animation","ghostdrag","resize"], calendar:"drag", graph:"canvas", dav:["grid","tree","toolbar","ajax2","xml","window"], dialog:["window","dimmer"], datasource:["jsobj","json","xml","connection","dstransport","ajax2"], gmaps:["gapi","map"], ymaps:"map", simplefx:"animation", msapi:["map","layers"], ws:["xml","soap","ajax2","schema","connection"], schema:["xml"], timeline:["slider","tlscale","resize"], piechart:"svg", graphsvg:["svg","graphsidebar","rdf","dereference"], rdf:"xml", anchor:["window","rectwin"], map:["window","rectwin"], openlayers:["map","layers","roundwin"], svgsparql:["svg","ghostdrag","geometry"], linechart:"svg", sparkline:"linechart", webclip:"webclipbinding", declarative:"json", tree:"ghostdrag", rdfbrowser:["rdfstore","tree","anchor","rdftabs","tab","dav"], rdfmini:["rdfstore","rdftabs"], rdfstore:["rdf","dereference","n3"], dereference:"ajax2", graphsidebar:"tree", form:["ajax2","dialog","datasource","formobject","crypto"], rssreader:"xml", notify:"animation", slidebar:"animation", fresnel:"xml" } OAT.Loader.Files = { /* only those whose names differ */ gmaps:"customGoogleLoader.js", ymaps:"customYahooLoader.js", openlayers:"OpenLayers.js", gapi:"gmapapi.js" } OAT.LoaderTMP = { /* second part of loader */ loadedLibs:[], /* libraries ready to be used */ loadingLibs:[], /* libraries marked for inclusion */ loadCallbacks:[], /* features & callbacks to be executed */ loadFeatures:function(features,callback) { /* load all these features and execute callback */ var allNames = OAT.Loader.makeDep(features); /* dependencies */ /* distinct values */ var distinct = {}; for (var i=0;i execute and mark for removal */ var ok = false; /* check for windows - special delivery */ if (OAT.Loader.loadedLibs.find("window") != -1) { /* include default window */ var obj = { 1:"mswin", 2:"macwin", 3:"roundwin", 4:"rectwin" } var name = obj[OAT.WindowType()]; if (OAT.Loader.loadedLibs.find(name) == -1) { /* not yet loaded! */ var deps = OAT.Loader.makeDep(name); for (var j=0;j=0;i--) { var index = done[i]; OAT.Loader.loadCallbacks.splice(index,1); } for (var i=0;i= 1024 && i+1 < post.length) { result = result / 1024; } else { return Math.round(result) + " " + post[i]; } } return this; } Date.prototype.format = function(formatStr) { var result = formatStr; result = result.replace(/d/,this.getDate().toString().leadingZero(2)); result = result.replace(/g/,parseInt(this.getHours()) % 12); result = result.replace(/G/,this.getHours()); result = result.replace(/h/,(parseInt(this.getHours()) % 12).toString().leadingZero(2)); result = result.replace(/H/,this.getHours().toString().leadingZero(2)); result = result.replace(/i/,this.getMinutes().toString().leadingZero(2)); result = result.replace(/j/,this.getDate()); result = result.replace(/m/,(this.getMonth()+1).toString().leadingZero(2)); result = result.replace(/n/,this.getMonth()+1); result = result.replace(/s/,this.getSeconds().toString().leadingZero(2)); result = result.replace(/U/,this.getTime()); result = result.replace(/w/,this.getDay()); result = result.replace(/Y/,this.getFullYear()); result = result.replace(/x/,this.getMilliseconds().toString().leadingZero(3)); return result; } Date.prototype.toHumanString = function() { return this.format("j.n.Y H:i:s"); } OAT.Dom = { /* DOM common object */ create:function(tagName,styleObj,className) { var elm = document.createElement(tagName); if (styleObj) { for (prop in styleObj) { elm.style[prop] = styleObj[prop]; } } if (className) { elm.className = className; } return elm; }, createNS:function(ns,tagName) { if (document.createElementNS) { var elm = document.createElementNS(ns,tagName); } else { var elm = document.createElement(tagName); elm.setAttribute("xmlns",ns); } return elm; }, text:function(text) { var elm = document.createTextNode(text); return elm; }, button:function(label) { var b = OAT.Dom.create("input"); b.type = "button"; b.value = label; return b; }, radio:function(name) { if (OAT.Browser.isIE) { var elm = document.createElement(''); return elm; } else { var elm = OAT.Dom.create("input"); elm.name = name; elm.type = "radio"; return elm; } }, image:function(src,srcBlank,w,h) { var elm = OAT.Dom.create("img",{width:w+"px",height:h+"px"}); OAT.Dom.imageSrc(elm,src,srcBlank); return elm; }, imageSrc:function(element,src,srcBlank) { var elm = $(element); var png = !!src.toLowerCase().match(/png$/); if (png && OAT.Browser.isIE) { elm.src = srcBlank; elm.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')"; } else { elm.src = src; } }, option:function(name,value,parent) { var opt = OAT.Dom.create("option"); opt.innerHTML = name; opt.value = value; if (parent) { $(parent).appendChild(opt); } return opt; }, append:function() { for (var i=0;i 1) { for (var i=0;i 1) { for (var i=0;i elements */ var x = c[0]; var y = c[1]; if (!OAT.Browser.isOpera || elm.scrollTop != elm.offsetTop || elm.scrollLeft != elm.offsetLeft) { x -= elm.scrollLeft; y -= elm.scrollTop; } if (OAT.Browser.isWebKit && parent == document.body && OAT.Dom.style(elm,"position") == "absolute") { return [x,y]; } x += parent_coords[0]; y += parent_coords[1]; return [x,y]; }, getLT:function(something) { var elm = $(something); var curr_x,curr_y; if (elm.style.left && elm.style.position != "relative") { curr_x = parseInt(elm.style.left); } else { curr_x = elm.offsetLeft; } if (elm.style.top && elm.style.position != "relative") { curr_y = parseInt(elm.style.top); } else { curr_y = elm.offsetTop; } return [curr_x,curr_y]; }, getWH:function(something) { /* This is tricky: we need to measure current element's width & height. If this property was already set (thus available directly through elm.style), everything is ok. If nothing was set yet: * IE stores this information in offsetWidth and offsetHeight * Gecko doesn't count borders into offsetWidth and offsetHeight Thus, we need another means for counting real dimensions. */ var curr_w, curr_h; var elm = $(something); if (elm.style.width && !elm.style.width.match(/%/) && elm.style.width != "auto") { curr_w = parseInt(elm.style.width); } else if (OAT.Style.get(elm,"width") && !OAT.Browser.isIE) { curr_w = Math.round(parseFloat(OAT.Style.get(elm,"width"))); } else { curr_w = elm.offsetWidth; if (elm.tagName.toLowerCase() == "input") { curr_w += 5; } } if (elm.style.height && !elm.style.height.match(/%/) && elm.style.height != "auto") { curr_h = parseInt(elm.style.height); } else if (OAT.Style.get(elm,"height") && !OAT.Browser.isIE) { curr_h = Math.round(parseFloat(OAT.Style.get(elm,"height"))); } else { curr_h = elm.offsetHeight; if (elm.tagName.toLowerCase() == "input") { curr_h += 5; } } /* one more bonus - if we are getting height of document.body, take window size */ if (elm == document.body) { curr_h = (OAT.Browser.isIE ? document.body.clientHeight : window.innerHeight); } return [curr_w,curr_h]; }, moveBy:function(element,dx,dy) { var curr_x,curr_y; var elm = $(element); /* If the element is not anchored to left top corner, strange things will happen during resizing; therefore, we need to make sure it is anchored properly. */ if (OAT.Dom.style(elm,"position") == "absolute") { if (!elm.style.left) { elm.style.left = elm.offsetLeft + "px"; elm.style.right = ""; } if (!elm.style.top) { elm.style.top = elm.offsetTop + "px"; elm.style.bottom = ""; } } var tmp = OAT.Dom.getLT(elm); curr_x = tmp[0]; curr_y = tmp[1]; var x = curr_x + dx; var y = curr_y + dy; elm.style.left = x + "px"; elm.style.top = y + "px"; }, resizeBy:function(element,dx,dy) { var curr_w, curr_h; var elm = $(element); /* If the element is not anchored to left top corner, strange things will happen during resizing; therefore, we need to make sure it is anchored properly. */ if (OAT.Dom.style(elm,"position") == "absolute" && dx) { if (!elm.style.left) { elm.style.left = elm.offsetLeft + "px"; elm.style.right = ""; } if (!elm.style.top && dy) { elm.style.top = elm.offsetTop + "px"; elm.style.bottom = ""; } } var tmp = OAT.Dom.getWH(elm); curr_w = tmp[0]; curr_h = tmp[1]; var w = curr_w + dx; var h = curr_h + dy; if (dx) { elm.style.width = w + "px"; } if (dy) { elm.style.height = h + "px"; } }, decodeImage:function(data) { var decoded = OAT.Crypto.base64d(data); var mime = "image/"; switch (decoded.charAt(1)) { case "I": mime += "gif"; break; case "P": mime += "png"; break; case "M": mime += "bmp"; break; default: mime += "jpeg"; break; } var src="data:"+mime+";base64,"+data; return src; }, removeSelection:function() { var selObj = false; if (document.getSelection && !OAT.Browser.isGecko) { selObj = document.getSelection(); } if (window.getSelection) { selObj = window.getSelection(); } if (document.selection) { selObj = document.selection; } if (selObj) { if (selObj.empty) { selObj.empty(); } if (selObj.removeAllRanges) { selObj.removeAllRanges(); } } }, getScroll:function() { if (OAT.Browser.isWebKit || (OAT.Browser.isIE && document.compatMode == "BackCompat")) { var l = document.body.scrollLeft; var t = document.body.scrollTop; } else { var l = Math.max(document.documentElement.scrollLeft,document.body.scrollLeft); var t = Math.max(document.documentElement.scrollTop,document.body.scrollTop); } return [l,t]; }, getFreeSpace:function(x,y) { var scroll = OAT.Dom.getScroll(); var port = OAT.Dom.getViewport(); var spaceLeft = x - scroll[0]; var spaceRight = port[0] - x + scroll[0]; var spaceTop = y - scroll[1]; var spaceBottom = port[1] - y + scroll[1]; var left = (spaceLeft > spaceRight); var top = (spaceTop > spaceBottom); return [left,top]; }, toSafeXML:function(str) { if (typeof(str) != "string") { return str; } return str.replace(/&/g,"&").replace(/>/g,">").replace(/").replace(/</g,"<"); }, uriParams:function() { var result = {}; var s = location.search; if (s.length > 1) { s = s.substring(1); } if (!s) { return result; } var parts = s.split("&"); for (var i=0; i < parts.length; i++) { var part = parts[i]; if (!part) { continue; } var index = part.indexOf("="); if (index == -1) { result[decodeURIComponent(part)] = ""; continue; } /* not a pair */ var key = part.substring(0,index); var val = part.substring(index+1); key = decodeURIComponent(key); val = decodeURIComponent(val); var r = false; if ((r = key.match(/(.*)\[\]$/))) { key = r[1]; if (key in result) { result[key].push(val); } else { result[key] = [val]; } } else { result[key] = val; } } return result; }, changeHref:function(elm,newHref) { /* opera cannot do this with elements not being part of the page :/ */ var ok = false; var e = $(elm); var node = e; while (node.parentNode) { node = node.parentNode; if (node == document.body) { ok = true; } } if (ok) { e.href = newHref; } else if (e.parentNode) { var oldParent = e.parentNode; var next = e.nextSibling; document.body.appendChild(e); e.href = newHref; OAT.Dom.unlink(e); oldParent.insertBefore(e,next); } else { document.body.appendChild(e); e.href = newHref; OAT.Dom.unlink(e); } }, makePosition:function(elm) { var e = $(elm); if (OAT.Dom.style(e,"position") != "absolute") { e.style.position = "relative"; } } } OAT.Style = { /* Style helper */ get:function(elm,property) { var element = $(elm); if (document.defaultView && document.defaultView.getComputedStyle) { var cs = document.defaultView.getComputedStyle(element,''); if (!cs) { return true; } return cs[property]; } else { return element.currentStyle[property]; } }, background:function(element,src) { var elm = $(element); var png = !!src.toLowerCase().match(/png$/); if (png && OAT.Browser.isIE) { elm.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')"; } else { elm.style.backgroundImage="url("+src+")"; } }, apply:function(something,obj) { var elm = $(something); if (!elm) {return;} for (var p in obj) { elm.style[p] = obj[p]; } }, opacity:function(element,opacity) { var o = Math.max(opacity,0); var elm = $(element); if (OAT.Browser.isIE) { elm.style.filter = "alpha(opacity="+Math.round(o*100)+")"; } else { elm.style.opacity = o; } } } OAT.Dom.style = OAT.Style.get; /* backward compatibility */ OAT.Dom.applyStyle = OAT.Style.apply; /* backward compatibility */ OAT.Browser = { /* Browser helper */ isIE:OAT.Dom.isIE(), isIE6:OAT.Dom.isIE6(), isIE7:OAT.Dom.isIE7(), isGecko:OAT.Dom.isGecko(), isOpera:OAT.Dom.isOpera(), isKonqueror:OAT.Dom.isKonqueror(), isWebKit:OAT.Dom.isWebKit(), isMac:OAT.Dom.isMac() } OAT.Event = { /* Event helper */ attach:function(elm,event,callback) { var element = $(elm); if (element.addEventListener) { /* gecko */ element.addEventListener(event,callback,false); } else if (element.attachEvent) { /* ie */ element.attachEvent("on"+event,callback); } else { /* ??? */ element["on"+event] = callback; } }, detach:function(elm,event,callback) { var element = $(elm); if (element.removeEventListener) { /* gecko */ element.removeEventListener(event,callback,false); } else if (element.detachEvent) { /* ie */ element.detachEvent("on"+event,callback); } else { /* ??? */ element["on"+event] = false; } }, source:function(event) { return (event.target ? event.target : event.srcElement); }, cancel:function(event) { event.cancelBubble = true; if (event.stopPropagation) { event.stopPropagation(); } }, position:function(event) { var scroll = OAT.Dom.getScroll(); return [event.clientX+scroll[0],event.clientY+scroll[1]]; }, prevent:function(event) { if (event.preventDefault) { event.preventDefault(); } event.returnValue = false; } } OAT.Dom.attach = OAT.Event.attach; OAT.Dom.detach = OAT.Event.detach; OAT.Dom.source = OAT.Event.source; OAT.Dom.eventPos = OAT.Event.position; OAT.Dom.prevent = OAT.Event.prevent; OAT.Loader = { /* first part of loader object */ toolkitPath:false, loadOccurred:0, /* was window.onload fired? */ openAjax:false, /* OpenAjax.js included? */ include:function(file) { var path = OAT.Loader.toolkitPath || ""; var value = (typeof(file) == "object" ? file : [file]); for (var i=0;i\"zLinksFAQ  News"; header_container.innerHTML = "
    \"zLinksFAQ  News
    "; /*@cc_on var br = OAT.Dom.create("br",{},""); zitgist_popup.appendChild(br); var br = OAT.Dom.create("br",{},""); zitgist_popup.appendChild(br); var br = OAT.Dom.create("br",{},""); zitgist_popup.appendChild(br); @*/ var content_container = OAT.Dom.create("div",{},"content_container"); content_container.id = "content_container_id_" + generated_id; zitgist_popup.appendChild(content_container); var scroll_prent_content_container = OAT.Dom.create("div",{},"scrolldiv_parentContainer"); scroll_prent_content_container.id = "scrolldiv_parentContainer_id_" + generated_id; content_container.appendChild(scroll_prent_content_container); var scroll_content_container = OAT.Dom.create("div",{},"scrolldiv_content"); scroll_content_container.id = "scrolldiv_content_id_" + generated_id; scroll_prent_content_container.appendChild(scroll_content_container); // Service Container 1 var service_1_container = OAT.Dom.create("div",{},"service_1_container"); service_1_container.id = "service_1_container_id_" + generated_id; scroll_content_container.appendChild(service_1_container); var menu1 = OAT.Dom.create("div",{},"zitgist_menu"); service_1_container.appendChild(menu1); var waiting_container1 = OAT.Dom.create("div",{},"waiting_container"); menu1.appendChild(waiting_container1); waiting_container1.innerHTML = service_1_container.innerHTML + ''; var menu_separator1 = OAT.Dom.create("div",{},"zitgist_menu_separator"); menu1.appendChild(menu_separator1); // Service Container 3 var service_3_container = OAT.Dom.create("div",{},"service_3_container"); service_3_container.id = "service_3_container_id_" + generated_id; scroll_content_container.appendChild(service_3_container); var menu3 = OAT.Dom.create("div",{},"zitgist_menu"); service_3_container.appendChild(menu3); var waiting_container3 = OAT.Dom.create("div",{},"waiting_container"); menu3.appendChild(waiting_container3); waiting_container3.innerHTML = service_3_container.innerHTML + ''; var menu_separator3 = OAT.Dom.create("div",{},"zitgist_menu_separator"); menu3.appendChild(menu_separator3); // Service Container 2 var service_2_container = OAT.Dom.create("div",{},"service_2_container"); service_2_container.id = "service_2_container_id_" + generated_id; scroll_content_container.appendChild(service_2_container); var menu2 = OAT.Dom.create("div",{},"zitgist_menu"); service_2_container.appendChild(menu2); var waiting_container2 = OAT.Dom.create("div",{},"waiting_container"); menu2.appendChild(waiting_container2); waiting_container2.innerHTML = service_2_container.innerHTML + ''; var scrolldiv_slider = OAT.Dom.create("div",{},"scrolldiv_slider"); scrolldiv_slider.id = "scrolldiv_slider_id_" + generated_id; content_container.appendChild(scrolldiv_slider); var scrolldiv_scrollUp = OAT.Dom.create("div",{},"scrolldiv_scrollUp"); scrolldiv_scrollUp.id = "scrolldiv_scrollUp_id_" + generated_id; scrolldiv_slider.appendChild(scrolldiv_scrollUp); var scrolldiv_scrollbar = OAT.Dom.create("div",{},"scrolldiv_scrollbar"); scrolldiv_scrollbar.id = "scrolldiv_scrollbar_id_" + generated_id; scrolldiv_slider.appendChild(scrolldiv_scrollbar); var scrolldiv_theScroll = OAT.Dom.create("div",{},"scrolldiv_theScroll"); scrolldiv_theScroll.id = "scrolldiv_theScroll_id_" + generated_id; scrolldiv_scrollbar.appendChild(scrolldiv_theScroll); var scrolldiv_theScroll_span = OAT.Dom.create("span",{},""); scrolldiv_theScroll.appendChild(scrolldiv_theScroll_span); var scrolldiv_scrollDown = OAT.Dom.create("div",{},"scrolldiv_scrollDown"); scrolldiv_scrollDown.id = "scrolldiv_scrollDown_id_" + generated_id; scrolldiv_slider.appendChild(scrolldiv_scrollDown); scrolldiv_initScroll(generated_id); var a1 = new OAT.AnimationOpacity(zitgist_popup,{opacity:1}); var a2 = new OAT.AnimationOpacity(zitgist_popup,{opacity:0}); // First mouseover behavior var position = OAT.Dom.position(element); load_service_1(uri, service_1_container, local_path); // Web Page + Semantic Page load_service_3(uri, service_3_container, local_path); // Author's Annotations load_service_2(uri, service_2_container, local_path); // Semantic Web Entities /*@cc_on popup_show_timeout_id = setTimeout((function show_zlinks_popup(zitgist_popup, position, a1, a2) { return function() { // Check if the annotation window is already open. If it is not, then show the zitgist_popup if(!isAnnotationPopupOpen(document.getElementById("zitgist_popup_btn_" + zitgist_popup.id.substr(14, zitgist_popup.id.length - 14)))) { a2.stop(); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); } } } )(zitgist_popup, position, a1, a2), 500); @*/ if(!OAT.Browser.isIE) { popup_show_timeout_id = setTimeout(show_zlinks_popup, 500, zitgist_popup, position, a1, a2); } var scroll_over = false; OAT.Event.attach(content_container,"mouseover",function(event) { /* start displaying on mouseover */ if(scroll_over == false) { if (window.addEventListener) // DOMMouseScroll is for mozilla. window.addEventListener('DOMMouseScroll', wheel, false); // IE/Opera. window.onmousewheel = document.onmousewheel = wheel; scrolldiv_initScroll_mouseover(generated_id); scroll_over = true; } }); OAT.Event.attach(content_container,"mouseout",function(event) { /* start displaying on mouseover */ if(scroll_over == true) { if (window.removeEventListener) // DOMMouseScroll is for mozilla. window.removeEventListener('DOMMouseScroll', wheel, false); // IE/Opera. window.onmousewheel = document.onmousewheel = null; scroll_over = false; } }); OAT.MSG.attach(a2.animation,OAT.MSG.ANIMATION_STOP,function(){ /* hide after opacity gets to 0 */ OAT.Dom.hide(zitgist_popup); }); // Re-asign the mouse over event. OAT.Event.attach(element,"mouseover",function(event) { /* start displaying on mouseover */ var position = OAT.Event.position(event); clearTimeout(popup_hide_timeout_id); /*@cc_on popup_show_timeout_id = setTimeout((function show_zlinks_popup(zitgist_popup, position, a1, a2) { return function() { if(!isAnnotationPopupOpen(document.getElementById("zitgist_popup_btn_" + zitgist_popup.id.substr(14, zitgist_popup.id.length - 14)))) { a2.stop(); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); } } } )(zitgist_popup, position, a1, a2), 500); @*/ if(!OAT.Browser.isIE) { popup_show_timeout_id = setTimeout(show_zlinks_popup, 500, zitgist_popup, position, a1, a2); } }); OAT.Event.attach(element,"mouseout",function(event) { /* start hiding on mouseout */ clearTimeout(popup_show_timeout_id); /*@cc_on popup_hide_timeout_id = setTimeout((function hide_zlinks_popup(a1, a2) { return function() { a1.stop(); a2.start(); } } )(a1, a2), 1000); @*/ if(!OAT.Browser.isIE) { popup_hide_timeout_id = setTimeout(hide_zlinks_popup, 1000, a1, a2); } }); OAT.Event.attach(zitgist_popup,"mouseover",function(event) { /* start displaying on mouseover */ clearTimeout(popup_hide_timeout_id); OAT.Dom.show(zitgist_popup); a1.start(); }); OAT.Event.attach(zitgist_popup,"mouseout",function(event) { /* start hiding on mouseout */ clearTimeout(popup_show_timeout_id); /*@cc_on popup_hide_timeout_id = setTimeout((function hide_zlinks_popup(a1, a2) { return function() { a1.stop(); a2.start(); } } )(a1, a2), 1000); @*/ if(!OAT.Browser.isIE) { popup_hide_timeout_id = setTimeout(hide_zlinks_popup, 1000, a1, a2); } }); } } function show_zlinks_popup(zitgist_popup, position, a1, a2) { if(!isAnnotationPopupOpen(document.getElementById("zitgist_popup_btn_" + zitgist_popup.id.substr(14, zitgist_popup.id.length - 14)))) { a2.stop(); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); } } function hide_zlinks_popup(a1, a2) { a1.stop(); a2.start(); } function load_service_1(uri, element, local_path) { var imgs_path = local_path + 'imgs/'; var url = local_path + 'proxy.php?'; url = url + 'service=all&'; url = url + 'from='+local_path+'&'; url = url + 'uri=' + escape(uri); reqs.push(load_service_response_XML_1(url, uri, element.firstChild, imgs_path)); } function load_service_2(uri, element, local_path) { var imgs_path = local_path + 'imgs/'; var url = local_path + 'proxy.php?'; url = url + 'service=rdf&'; url = url + 'from='+local_path+'&'; url = url + 'uri=' + escape(uri); reqs2.push(load_service_response_XML_2(url, uri, element.firstChild, imgs_path)); } function load_service_3(uri, element, local_path) { var imgs_path = local_path + 'imgs/'; var url = local_path + 'annotations.php?'; url = url + 'uri=' + escape(uri); reqs3.push(load_service_response_XML_3(url, uri, element.firstChild, imgs_path)); } function load_service_response_XML_1(url, uri, element, imgs_path) { var req; // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.element = element; req.imgs_path = imgs_path; req.onreadystatechange = process_service_response_1; req.open("GET", url, true); req.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.element = element; req.imgs_path = imgs_path; req.onreadystatechange = process_service_response_1; req.open("GET", url, true); req.send(); } } return req; } function load_service_response_XML_2(url, uri, element, imgs_path) { var req2; // branch for native XMLHttpreq2uest object if (window.XMLHttpRequest) { req2 = new XMLHttpRequest(); req2.element = element; req2.imgs_path = imgs_path; req2.onreadystatechange = process_service_response_2; req2.open("GET", url, true); req2.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req2 = new ActiveXObject("Microsoft.XMLHTTP"); if (req2) { req2.element = element; req2.imgs_path = imgs_path; req2.onreadystatechange = process_service_response_2; req2.open("GET", url, true); req2.send(); } } return req2; } function load_service_response_XML_3(url, uri, element, imgs_path) { var req3; // branch for native XMLHttpreq2uest object if (window.XMLHttpRequest) { req3 = new XMLHttpRequest(); req3.element = element; req3.imgs_path = imgs_path; req3.onreadystatechange = process_service_response_3; req3.open("GET", url, true); req3.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req3 = new ActiveXObject("Microsoft.XMLHTTP"); if (req3) { req3.element = element; req3.imgs_path = imgs_path; req3.onreadystatechange = process_service_response_3; req3.open("GET", url, true); req3.send(); } } return req3; } function process_service_response_1() { for (var i = 0; i < reqs.length; i++) { if (reqs[i].readyState == 4) { window.status = ''; if (reqs[i].status == 200) { if(reqs[i].element) { reqs[i].element.innerHTML = ""; } if(reqs[i].responseXML) { var response = reqs[i].responseXML.documentElement; var blank_icon = ""; var isAnyElement = false; if(response.getElementsByTagName('amazon')[0]) { var buyurl = response.getElementsByTagName('amazon')[0].getElementsByTagName('buyurl')[0].firstChild.data; var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); menu_item.innerHTML = '' + blank_icon + '\"Buy' + 'Buy on Amazon'; reqs[i].element.appendChild(menu_item); isAnyElement = true; } if(response.getElementsByTagName('webpage')[0]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); var url = ""; if(response.getElementsByTagName('amazon')[0]) { url = unescape(response.getElementsByTagName('webpage')[0].firstChild.data) + '/searchcom07-20'; } else { url = unescape(response.getElementsByTagName('webpage')[0].firstChild.data); } menu_item.innerHTML = '' + blank_icon + '\"See' + 'Web page'; reqs[i].element. appendChild(menu_item); isAnyElement = true; } if(response.getElementsByTagName('rdfdocument')[0]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); menu_item.innerHTML = '' + blank_icon + '\"See' + 'Semantic page'; reqs[i].element. appendChild(menu_item); isAnyElement = true; } if(isAnyElement) { var menu_separator = OAT.Dom.create("div",{},"zitgist_menu_separator"); reqs[i].element.appendChild(menu_separator); } if(reqs[i].element) { reposition_popup(reqs[i].element.parentNode.parentNode.parentNode.parentNode.parentNode); } scrolldiv_initScroll(reqs[i].element.parentNode.parentNode.id.substr(21, reqs[i].element.parentNode.parentNode.id.length - 21)); } } } } } function process_service_response_2() { for (var ii = 0; ii < reqs2.length; ii++) { if (reqs2[ii].readyState == 4) { window.status = ''; if (reqs2[ii].status == 200) { if(reqs2[ii].element) { reqs2[ii].element.innerHTML = ""; } if(reqs2[ii].responseXML) { var response = reqs2[ii].responseXML.documentElement; for(var i = 0; i < response.getElementsByTagName('entity').length; i++) { if(response.getElementsByTagName('entity')[i]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); var entity = response.getElementsByTagName('entity')[i]; var entity_type = extractTypeName(entity.attributes[2].nodeValue) var entity_img = reqs2[ii].imgs_path; entity_img = entity_img + entity_type + ".gif"; var entity_rel_backlink = ""; if(entity.attributes[5].nodeValue == "backlink") { entity_rel_backlink = "\"Incoming"; } if(entity.attributes[3].nodeValue == "") { if(entity_type == "") { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity_rel_backlink + 'undefined'; } else { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity_type + '' } } else { if(entity_type == "") { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity.attributes[3].nodeValue + ''; } else { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity.attributes[3].nodeValue + ' (' + entity_type + ')'; } } reqs2[ii].element.appendChild(menu_item); } } if(reqs2[ii].element) { reposition_popup(reqs2[ii].element.parentNode.parentNode.parentNode.parentNode.parentNode); } scrolldiv_initScroll(reqs2[ii].element.parentNode.parentNode.id.substr(21, reqs2[ii].element.parentNode.parentNode.id.length - 21)); } } } } } function process_service_response_3() { for (var iii = 0; iii < reqs3.length; iii++) { if (reqs3[iii].readyState == 4) { window.status = ''; if (reqs3[iii].status == 200) { if(reqs3[iii].element) { reqs3[iii].element.innerHTML = ""; } if(reqs3[iii].responseXML) { var response = reqs3[iii].responseXML.documentElement; for(var i = 0; i < response.getElementsByTagName('annotation').length; i++) { if(response.getElementsByTagName('annotation')[i]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); var annotation_item = response.getElementsByTagName('annotation')[i]; var annotation_item_body = OAT.Dom.create("div",{},"annotation_item_body"); menu_item.appendChild(annotation_item_body); var clean_text = removeHTML(annotation_item.getElementsByTagName('body')[0].firstChild.data); var icons = "\"Author's"; if(clean_text.length > 50) { annotation_item_body.innerHTML = icons + clean_text.substr(0, 50) + "...

    Read full annotation
    "; // Adding the anchor element to open the dimmer menu_item.appendChild(annotation_item_body); // Creating the Dimmer content var dimmer_content = OAT.Dom.create("div",{},"seemore_dimmer_content"); dimmer_content.id = "dimmer_content_id_" + annotation_item.getElementsByTagName('id')[0].firstChild.data; OAT.Dom.hide(dimmer_content); OAT.Dom.attach(annotation_item_body.getElementsByTagName('a')[0], "click", function (event) { var id = OAT.Event.source(event).id.substr(19,OAT.Event.source(event).id.length - 19); OAT.Dimmer.show(document.getElementById("dimmer_content_id"+id), {popup:true}); OAT.Dom.center(document.getElementById("dimmer_content_id"+id), 1, 1); }); // Dimmer close button var dimmer_content_close_btn = OAT.Dom.create("img",{},"close_dimmer_btn"); dimmer_content_close_btn.src = reqs3[iii].imgs_path+"close.gif"; dimmer_content_close_btn.alt = "Close"; dimmer_content_close_btn.title = "Close"; dimmer_content.appendChild(dimmer_content_close_btn); OAT.Dom.attach(dimmer_content_close_btn, "click", function (event) { OAT.Dimmer.hide(); }); var dimmer_content_p = OAT.Dom.create("p",{},""); dimmer_content.appendChild(dimmer_content_p); dimmer_content_p.innerHTML = annotation_item.getElementsByTagName('body')[0].firstChild.data; menu_item.appendChild(dimmer_content); } else { annotation_item_body.innerHTML = icons + annotation_item.getElementsByTagName('body')[0].firstChild.data; } reqs3[iii].element.appendChild(menu_item); var menu_separator = OAT.Dom.create("div",{},"zitgist_menu_separator"); reqs3[iii].element.appendChild(menu_separator); } } if(reqs3[iii].element) { reposition_popup(reqs3[iii].element.parentNode.parentNode.parentNode.parentNode.parentNode); } scrolldiv_initScroll(reqs3[iii].element.parentNode.parentNode.id.substr(21, reqs3[iii].element.parentNode.parentNode.id.length - 21)); } } } } } function extractTypeName(typeUri) { if(typeUri.lastIndexOf('#') > 0) { return typeUri.substring(typeUri.lastIndexOf('#') + 1, typeUri.length).toLowerCase(); } else { return typeUri.substring(typeUri.lastIndexOf('/') + 1, typeUri.length).toLowerCase(); } } function generateId() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var string_length = 8; var randomstring = ''; for (var i=0; i]+(>|$)/g, "")); } function reposition_popup(element) { var window_top = window.pageYOffset; /*@cc_on window_top = document.documentElement.scrollTop; @*/ var window_height = window.innerHeight; /*@cc_on window_height = document.documentElement.clientHeight; @*/ var window_bottom = window_top + window_height; var popup_top = element.offsetTop; var popup_height = element.scrollHeight; var popup_bottom = popup_top + popup_height; // Check if the popup is bellow the bottom fold if(popup_bottom > window_bottom) { var move_top = 0; if(window_height <= popup_height) { move_top = window_top + 20; } else { move_top = popup_top - ( popup_height - (window_bottom - popup_top)); move_top = move_top - 30; } element.style.top = move_top+"px"; } } function isAnnotationPopupOpen(element) { // Check if the annotation window is already open. If it is not, then show the zitgist_popup if(element) { if(element.previousSibling.nodeName == "IMG") { var id = element.previousSibling.id.substr(21, element.previousSibling.id.length - 21); if(!document.getElementById("annotation_popup_" + id) || document.getElementById("annotation_popup_" + id).style.display == "none") { return false; } return true; } return false; } return false; } function wheel(event){ var delta = 0; if (!event) event = window.event; if (event.wheelDelta) { delta = event.wheelDelta/120; if (window.opera) delta = -delta; } else if (event.detail) { delta = -event.detail/3; } if (delta) mouse_wheel_handle(delta); if (event.preventDefault) event.preventDefault(); event.returnValue = false; } function mouse_wheel_handle(delta) { if(navigator.userAgent.indexOf('Opera') >= 0) { if(delta < 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonUp(); scrolldiv_scrollButtonStopUp(); scrollbuttonSpeed = backup_speed; } if(delta > 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonDown(); scrolldiv_scrollButtonStopDown(); scrollbuttonSpeed = backup_speed; } } else { if(delta > 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonUp(); scrolldiv_scrollButtonStopUp(); scrollbuttonSpeed = backup_speed; } if(delta < 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonDown(); scrolldiv_scrollButtonStopDown(); scrollbuttonSpeed = backup_speed; } } }0wordpress/wp-content/plugins/zlinks/js/scroll.js!var scrollActive = false; var contentHeight = 0; // The total height of the content var visibleContentHeight = 0; var scrollHandleObj = false; // reference to the scroll handle var scrollHandleHeight = false; var scrollbarTop = false; var eventYPos = false; var scrollbuttonActive = false; var scrollbuttonDirection = false; var scrollbuttonSpeed = 2; var scrollTimer = 10; // Also how fast the content scrolls. By decreasing this value, the content will move faster var scrollMoveToActive = false; var scrollMoveToYPosition = false; var element_id = ""; var operaBrowser = false; if(navigator.userAgent.indexOf('Opera') >= 0) { operaBrowser=1; } function scrollDiv_startScroll(e) { if(document.all && !operaBrowser) { e = event; } scrollbarTop = document.getElementById('scrolldiv_theScroll_id_' + element_id).offsetTop; eventYPos = e.clientY; scrollActive = true; } function scrollDiv_stopScroll() { scrollActive = false; scrollbuttonActive = false; scrollMoveToActive = false; } function scrollDiv_scroll(e) { if(scrollActive) { if(!scrollActive) { return; } } else { return; } if(document.all && !operaBrowser) { e = event; } if(e.button!=1 && document.all) { return; } var topPos = scrollbarTop + e.clientY - eventYPos; if(topPos<0) { topPos=0; } if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1) { topPos = visibleContentHeight-(scrollHandleHeight+4); } document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top = topPos + 'px'; document.getElementById('scrolldiv_content_id_' + element_id).style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' } /* Click on the slider Move the content to the this point */ function scrolldiv_scrollMoveToInit(e) { if(document.all && !operaBrowser) { e = event; } scrollMoveToActive = true; scrollMoveToYPosition = e.clientY - document.getElementById('scrolldiv_scrollbar_id_' + element_id).offsetTop; // scrollMoveToYPosition = e.clientY; if(document.getElementById('scrolldiv_theScroll_id_' + element_id).offsetTop/1 > scrollMoveToYPosition) { scrollbuttonDirection = scrollbuttonSpeed*-2; } else { scrollbuttonDirection = scrollbuttonSpeed*2; } scrolldiv_scrollMoveTo(); } function scrolldiv_scrollMoveTo() { // Disable scroll if the content is smaller than the scroll container if(document.getElementById('scrolldiv_slider_id_' + element_id).scrollHeight >= document.getElementById('scrolldiv_content_id_' + element_id).scrollHeight) { return; } if(!scrollMoveToActive || scrollActive) { return; } var topPos = document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top.replace('px',''); topPos = topPos/1 + scrollbuttonDirection; if(topPos<0) { topPos=0; scrollMoveToActive=false; } if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1) { topPos = visibleContentHeight-(scrollHandleHeight+4); scrollMoveToActive=false; } if(scrollbuttonDirection<0 && topPos0 && topPos>scrollMoveToYPosition-scrollHandleHeight/2) { return; } document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top = topPos + 'px'; document.getElementById('scrolldiv_content_id_' + element_id).style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' setTimeout('scrolldiv_scrollMoveTo()',scrollTimer); } function cancelEvent() { return false; } function scrolldiv_scrollButtonDown() { document.getElementById('scrolldiv_scrollDown_id_' + element_id).style.backgroundColor = "#A4A4A4"; scrollbuttonDirection = scrollbuttonSpeed; scrollbuttonActive=true; scrolldiv_scrollButtonScroll(); } function scrolldiv_scrollButtonUp() { document.getElementById('scrolldiv_scrollUp_id_' + element_id).style.backgroundColor = "#A4A4A4"; scrollbuttonDirection = scrollbuttonSpeed * - 1; scrollbuttonActive=true; scrolldiv_scrollButtonScroll(); } function scrolldiv_scrollButtonScroll() { // Disable scroll if the content is smaller than the scroll container if(document.getElementById('scrolldiv_slider_id_' + element_id).scrollHeight >= document.getElementById('scrolldiv_content_id_' + element_id).scrollHeight) { return; } if(!scrollbuttonActive) { return; } var topPos = document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top.replace('px',''); topPos = topPos/1 + scrollbuttonDirection; if(topPos<0) { topPos=0; scrollbuttonActive=false; } if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1) { topPos = visibleContentHeight-(scrollHandleHeight+4); scrollbuttonActive=false; } document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top = topPos + 'px'; document.getElementById('scrolldiv_content_id_' + element_id).style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' setTimeout('scrolldiv_scrollButtonScroll()',scrollTimer); } function scrolldiv_scrollButtonStopUp() { document.getElementById('scrolldiv_scrollUp_id_' + element_id).style.backgroundColor = ""; scrolldiv_scrollButtonStop(); } function scrolldiv_scrollButtonStopDown() { document.getElementById('scrolldiv_scrollDown_id_' + element_id).style.backgroundColor = ""; scrolldiv_scrollButtonStop(); } function scrolldiv_scrollButtonStop() { scrollbuttonActive = false; } function scrolldiv_initScroll(generated_id) { document.getElementById('scrolldiv_content_id_' + generated_id).style.top = 0; scrollinit(generated_id); } function scrolldiv_initScroll_mouseover(generated_id) { scrollinit(generated_id); } function scrollinit(generated_id) { element_id = generated_id; visibleContentHeight = document.getElementById('scrolldiv_scrollbar_id_' + generated_id).offsetHeight ; contentHeight = document.getElementById('scrolldiv_content_id_' + generated_id).offsetHeight - visibleContentHeight; scrollHandleObj = document.getElementById('scrolldiv_theScroll_id_' + generated_id); scrollHandleHeight = scrollHandleObj.offsetHeight; scrollbarTop = document.getElementById('scrolldiv_scrollbar_id_' + generated_id).offsetTop; document.getElementById('scrolldiv_theScroll_id_' + generated_id).onmousedown = scrollDiv_startScroll; document.body.onmousemove = scrollDiv_scroll; document.getElementById('scrolldiv_scrollbar_id_' + generated_id).onselectstart = cancelEvent; document.getElementById('scrolldiv_theScroll_id_' + generated_id).onmouseup = scrollDiv_stopScroll; if(document.all) { document.body.onmouseup = scrollDiv_stopScroll; } else { document.documentElement.onmouseup = scrollDiv_stopScroll; } document.getElementById('scrolldiv_scrollDown_id_' + generated_id).onmousedown = scrolldiv_scrollButtonDown; document.getElementById('scrolldiv_scrollUp_id_' + generated_id).onmousedown = scrolldiv_scrollButtonUp; document.getElementById('scrolldiv_scrollDown_id_' + generated_id).onmouseup = scrolldiv_scrollButtonStopDown; document.getElementById('scrolldiv_scrollUp_id_' + generated_id).onmouseup = scrolldiv_scrollButtonStopUp; document.getElementById('scrolldiv_scrollUp_id_' + generated_id).onselectstart = cancelEvent; document.getElementById('scrolldiv_scrollDown_id_' + generated_id).onselectstart = cancelEvent; document.getElementById('scrolldiv_scrollbar_id_' + generated_id).onmousedown = scrolldiv_scrollMoveToInit; // resize the scroll until it reaches 400 in height. var content_height = document.getElementById('scrolldiv_content_id_' + generated_id).scrollHeight; if(content_height < 400) { document.getElementById('scrolldiv_slider_id_' + generated_id).style.height = content_height + 'px'; if(content_height - 47 <= 0) { document.getElementById('scrolldiv_scrollbar_id_' + generated_id).style.height = "13px"; document.getElementById('content_container_id_' + generated_id).style.height = "52px"; } else { document.getElementById('scrolldiv_scrollbar_id_' + generated_id).style.height = (content_height - 34) + 'px'; document.getElementById('content_container_id_' + generated_id).style.height = (content_height +5) + 'px'; } } else { document.getElementById('scrolldiv_slider_id_' + generated_id).style.height = "400px"; document.getElementById('scrolldiv_scrollbar_id_' + generated_id).style.height = "366px"; document.getElementById('content_container_id_' + generated_id).style.height = "405px"; } } // From dhtmlgoodies.com with many modifications to make it working. 3wordpress/wp-content/plugins/zlinks/js/.svn/entriesn8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins/zlinks/js svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 script.js file 2008-11-20T16:30:39.000000Z ba9f05622af0ecb91f6174126ef30318 2008-10-28T18:17:06.112729Z 97 paul oat dir annotation.js file 2008-11-20T16:30:39.000000Z 22b09dca30f2568272f24bd7f1ce6a07 2008-10-28T18:17:06.112729Z 97 paul scroll.js file 2008-11-20T16:30:39.000000Z 86a2719fa120081723ba13883bd2c6b9 2008-10-28T18:17:06.112729Z 97 paul 2wordpress/wp-content/plugins/zlinks/js/.svn/format8 Lwordpress/wp-content/plugins/zlinks/js/.svn/text-base/annotation.js.svn-base; var save_type = "new"; var current_edited_annotation_element = -1; function assignAnnotationPopup(element, uri, local_path, author_id) { if(element.id == "") /* only way to get it working on FF, IE, safari, and opera. There is an issue in Event un-registration with IE. */ { var generated_id = generateId(); element.id = 'annotation_popup_btn_' + generated_id; var uri = uri; var zitgist_popup = OAT.Dom.create("div",{},"zitgist_popup"); zitgist_popup.id = "annotation_popup_" + generated_id; OAT.Style.opacity(zitgist_popup, 0); OAT.Dom.hide(zitgist_popup); document.body.appendChild(zitgist_popup); var header_container = OAT.Dom.create("div",{},"header_container_annotations"); zitgist_popup.appendChild(header_container); header_container.innerHTML = "
    \"zLinksFAQ  News
    "; var annotations_container = OAT.Dom.create("div",{},"annotations_container"); zitgist_popup.appendChild(annotations_container); show_annotations(uri, annotations_container, local_path); var add_annotation_container = OAT.Dom.create("div",{},"editor_annotation_container"); zitgist_popup.appendChild(add_annotation_container); var annotation_button_container = OAT.Dom.create("div",{},"btn_annotation_container"); zitgist_popup.appendChild(annotation_button_container); var annotation_editor = OAT.Dom.create("textarea",{},"annotation_editor"); add_annotation_container.appendChild(annotation_editor); var annotation_button = OAT.Dom.create("img",{},"annotation_button"); annotation_button.src = local_path + 'imgs/annotate_btn.gif'; annotation_button_container.appendChild(annotation_button); OAT.Event.attach(annotation_button,"click",function(event) { // Check if we save an edition or a new annotaiton if(save_type == "edit") { var id = current_edited_annotation_id; var annotation_body_text = document.getElementById("annotation_editor_" + id).value; OAT.Event.source(event).src = local_path+"imgs/waiting_ajax.gif"; var params = "id="+id+"&author="+ author_id +"&body="+escape(annotation_body_text); OAT.Event.source(event).src = local_path+"imgs/waiting_ajax.gif"; OAT.Event.source(event).width = "16"; OAT.Event.source(event).height = "16"; if (window.XMLHttpRequest) { req_anno_4 = new XMLHttpRequest(); req_anno_4.uri = uri; req_anno_4.container = annotations_container; req_anno_4.local_path = local_path; req_anno_4.annotation_btn = OAT.Event.source(event); req_anno_4.onreadystatechange = process_edit_annotation; req_anno_4.open("POST", local_path + "edit_annotation.php", true); req_anno_4.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno_4.setRequestHeader("Content-length", params.length); req_anno_4.setRequestHeader("Connection", "close"); req_anno_4.send(params); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req_anno_4 = new ActiveXObject("Microsoft.XMLHTTP"); if (req_anno_4) { req_anno_4.uri = uri; req_anno_4.container = annotations_container; req_anno_4.local_path = local_path; req_anno_4.annotation_btn = OAT.Event.source(event); req_anno_4.onreadystatechange = process_edit_annotation; req_anno_4.open("POST", local_path + "edit_annotation.php", true); req_anno_4.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno_4.setRequestHeader("Content-length", params.length); req_anno_4.setRequestHeader("Connection", "close"); req_anno_4.send(params); } } save_type = "new"; } else if(save_type == "new") { if(annotation_editor.value == "") { alert("Please add a body to your annotation"); } else { var params = "partial_uri="+escape(local_path)+escape("annotations/?id=")+"&author="+author_id+"&annotated_resource="+escape(uri)+"&body="+escape(annotation_editor.value); OAT.Event.source(event).src = local_path+"imgs/waiting_ajax.gif"; OAT.Event.source(event).width = "16"; OAT.Event.source(event).height = "16"; // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req_anno = new XMLHttpRequest(); req_anno.annotation_editor = annotation_editor; req_anno.annotations_container = annotations_container; req_anno.annotation_btn = OAT.Event.source(event); req_anno.local_path = local_path; req_anno.uri = uri; req_anno.onreadystatechange = update_annotations; req_anno.open("POST", local_path + "add_annotation.php", true); req_anno.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno.setRequestHeader("Content-length", params.length); req_anno.setRequestHeader("Connection", "close"); req_anno.send(params); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req_anno = new ActiveXObject("Microsoft.XMLHTTP"); if (req_anno) { req_anno.annotation_editor = annotation_editor; req_anno.annotations_container = annotations_container; req_anno.annotation_btn = OAT.Event.source(event); req_anno.uri = uri; req_anno.local_path = local_path; req_anno.onreadystatechange = update_annotations; req_anno.open("POST", local_path + "add_annotation.php", true); req_anno.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req_anno.setRequestHeader("Content-length", params.length); req_anno.setRequestHeader("Connection", "close"); req_anno.send(params); } } } } }); var a1 = new OAT.AnimationOpacity(zitgist_popup,{opacity:1}); var a2 = new OAT.AnimationOpacity(zitgist_popup,{opacity:0}); // First mouseover behavior var position = OAT.Dom.position(element); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+10)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); OAT.MSG.attach(a2.animation,OAT.MSG.ANIMATION_STOP,function(){ /* hide after opacity gets to 0 */ OAT.Dom.hide(zitgist_popup); }); // Re-asign the mouse over event. OAT.Event.attach(element,"click",function(event) { /* start displaying on mouseover */ a2.stop(); var position = OAT.Event.position(event); zitgist_popup.style.left = (position[0]+5)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); }); var element_over = true; OAT.Event.attach(window.document,"click",function(event) { if(!element_over) { a1.stop(); a2.start(); } else { element_over = false; } }); OAT.Event.attach(zitgist_popup,"click",function(event) { element_over = true; }); OAT.Event.attach(element,"click",function(event) { element_over = true; }); } } function update_annotations() { if (req_anno.readyState == 4) { window.status = ''; if (req_anno.status == 200) { req_anno.annotation_btn.src = req_anno.local_path + 'imgs/annotate_btn.gif'; req_anno.annotation_btn.width = "102"; req_anno.annotation_btn.height = "25"; req_anno.annotation_editor.value = ""; show_annotations(req_anno.uri, req_anno.annotations_container, req_anno.local_path) } } } function show_annotations(uri, container, local_path) { container.innerHTML = ""; if (window.XMLHttpRequest) { req_anno_2 = null; req_anno_2 = new XMLHttpRequest(); req_anno_2.container = container; req_anno_2.uri = uri; req_anno_2.local_path = local_path; req_anno_2.onreadystatechange = process_show_annotations; req_anno_2.open("GET", local_path + "annotations.php?uri="+escape(uri), true); req_anno_2.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req_anno_2 = null; req_anno_2 = new ActiveXObject("Microsoft.XMLHTTP"); if (req_anno_2) { req_anno_2.container = container; req_anno_2.uri = uri; req_anno_2.local_path = local_path; req_anno_2.onreadystatechange = process_show_annotations; req_anno_2.open("GET", local_path + "annotations.php?uri="+escape(uri)+"&refresh="+ generateId(), true); req_anno_2.send(null); } } } function process_show_annotations() { if (req_anno_2.readyState == 4) { window.status = ''; if (req_anno_2.status == 200) { req_anno_2.container.innerHTML = ""; if(req_anno_2.responseXML) { var response = req_anno_2.responseXML.documentElement; for(var i = 0; i < response.getElementsByTagName('annotation').length; i++) { if(response.getElementsByTagName('annotation')[i]) { var annotation_item = response.getElementsByTagName('annotation')[i]; var annotation_item_container = OAT.Dom.create("div",{},"annotation_item_container"); req_anno_2.container.appendChild(annotation_item_container); var annotation_item_header = OAT.Dom.create("div",{},"annotation_item_header"); annotation_item_container.appendChild(annotation_item_header); annotation_item_header.innerHTML = "
    \"Annotation\"\"Edit\"Remove
    "; // Onclick Edit Annotation OAT.Event.attach(annotation_item_header.getElementsByTagName('img')[1],"click",function(event) { if(save_type == "new") // No more than one edition at time { var id = OAT.Event.source(event).id.substr(10,OAT.Event.source(event).id.length-10); var annotation_body_text = document.getElementById("annotation_item_body_id_" + id).innerHTML; // Replace
    by /n annotation_body_text = annotation_body_text.replace(/
    /g, "\n"); document.getElementById("annotation_item_body_id_" + id).innerHTML = ""; var annotation_editor = OAT.Dom.create("textarea",{},"annotation_editor"); annotation_editor.id = "annotation_editor_" + id; document.getElementById("annotation_item_body_id_" + id).appendChild(annotation_editor); annotation_editor.value = annotation_body_text; OAT.Dom.hide(OAT.Event.source(event)); OAT.Dom.hide(document.getElementById("annotation_item_body_id_" + id).parentNode.parentNode.parentNode.lastChild.previousSibling.firstChild); save_type = "edit"; current_edited_annotation_id = id; } else { alert("Edit one item at the same time"); } }); // Onclick Delete Annotation OAT.Event.attach(annotation_item_header.getElementsByTagName('img')[2],"click",function(event) { if(save_type == "new") // No deletation when editing { if (confirm("Are you sure you want to delete this annotation?")) { var id = OAT.Event.source(event).id.substr(9,OAT.Event.source(event).id.length-9); OAT.Event.source(event).src = req_anno_2.local_path+"imgs/waiting_ajax.gif"; if (window.XMLHttpRequest) { rewq_anno_3 = new XMLHttpRequest(); rewq_anno_3.uri = req_anno_2.uri; rewq_anno_3.container = req_anno_2.container; rewq_anno_3.local_path = req_anno_2.local_path; rewq_anno_3.onreadystatechange = process_delete_annotation; rewq_anno_3.open("GET", req_anno_2.local_path + "delete_annotation.php?id="+id, true); rewq_anno_3.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { rewq_anno_3 = new ActiveXObject("Microsoft.XMLHTTP"); if (rewq_anno_3) { rewq_anno_3.container = req_anno_2.container; rewq_anno_3.uri = req_anno_2.uri; rewq_anno_3.local_path = req_anno_2.local_path; rewq_anno_3.onreadystatechange = process_delete_annotation; rewq_anno_3.open("GET", req_anno_2.local_path + "delete_annotation.php?id="+id+"&refresh="+ generateId(), true); rewq_anno_3.send(null); } } } } else { alert("Save your edition before deleting an annotation"); } }); var annotation_item_body = OAT.Dom.create("div",{},"annotation_item_body"); annotation_item_body.id = "annotation_item_body_id_" + annotation_item.getElementsByTagName('id')[0].firstChild.data; annotation_item_container.appendChild(annotation_item_body); annotation_item_body.innerHTML = annotation_item.getElementsByTagName('body')[0].firstChild.data; var item_separator = OAT.Dom.create("div",{},"zitgist_menu_separator"); annotation_item_container.appendChild(item_separator); OAT.Dom.show(document.getElementById("annotation_item_body_id_" + annotation_item.getElementsByTagName('id')[0].firstChild.data).parentNode.parentNode.parentNode.lastChild.previousSibling.firstChild); } } reposition_popup(req_anno_2.container.parentNode) } } } } function process_delete_annotation(container, id) { if (rewq_anno_3.readyState == 4) { window.status = ''; if (rewq_anno_3.status == 200) { show_annotations(rewq_anno_3.uri, rewq_anno_3.container, rewq_anno_3.local_path); } } } function process_edit_annotation(container, id) { if (req_anno_4.readyState == 4) { window.status = ''; if (req_anno_4.status == 200) { req_anno_4.annotation_btn.src = req_anno_4.local_path + 'imgs/annotate_btn.gif'; req_anno_4.annotation_btn.width = "102"; req_anno_4.annotation_btn.height = "25"; show_annotations(req_anno_4.uri, req_anno_4.container, req_anno_4.local_path); } } }Hwordpress/wp-content/plugins/zlinks/js/.svn/text-base/script.js.svn-baservar reqs = new Array(); var reqs2 = new Array(); var reqs3 = new Array(); function assignPopup(element, uri, local_path) { var popup_show_timeout_id; var popup_hide_timeout_id; if(element.id == "" && !isAnnotationPopupOpen(element)) /* only way to get it working on FF, IE, safari, and opera. There is an issue in Event un-registration with IE. */ { var generated_id = generateId(); element.id = 'zitgist_popup_btn_' + generated_id; var zitgist_popup = OAT.Dom.create("div",{},"zitgist_popup"); /*@cc_on zitgist_popup = OAT.Dom.create("div",{},"zitgist_popup_ie"); @*/ zitgist_popup.id = "zitgist_popup_" + generated_id; OAT.Style.opacity(zitgist_popup, 0); OAT.Dom.hide(zitgist_popup); document.body.appendChild(zitgist_popup); var header_container = OAT.Dom.create("div",{},"header_container"); zitgist_popup.appendChild(header_container); // header_container.innerHTML = "
    \"zLinks
    FAQ  News"; header_container.innerHTML = "
    \"zLinksFAQ  News
    "; /*@cc_on var br = OAT.Dom.create("br",{},""); zitgist_popup.appendChild(br); var br = OAT.Dom.create("br",{},""); zitgist_popup.appendChild(br); var br = OAT.Dom.create("br",{},""); zitgist_popup.appendChild(br); @*/ var content_container = OAT.Dom.create("div",{},"content_container"); content_container.id = "content_container_id_" + generated_id; zitgist_popup.appendChild(content_container); var scroll_prent_content_container = OAT.Dom.create("div",{},"scrolldiv_parentContainer"); scroll_prent_content_container.id = "scrolldiv_parentContainer_id_" + generated_id; content_container.appendChild(scroll_prent_content_container); var scroll_content_container = OAT.Dom.create("div",{},"scrolldiv_content"); scroll_content_container.id = "scrolldiv_content_id_" + generated_id; scroll_prent_content_container.appendChild(scroll_content_container); // Service Container 1 var service_1_container = OAT.Dom.create("div",{},"service_1_container"); service_1_container.id = "service_1_container_id_" + generated_id; scroll_content_container.appendChild(service_1_container); var menu1 = OAT.Dom.create("div",{},"zitgist_menu"); service_1_container.appendChild(menu1); var waiting_container1 = OAT.Dom.create("div",{},"waiting_container"); menu1.appendChild(waiting_container1); waiting_container1.innerHTML = service_1_container.innerHTML + ''; var menu_separator1 = OAT.Dom.create("div",{},"zitgist_menu_separator"); menu1.appendChild(menu_separator1); // Service Container 3 var service_3_container = OAT.Dom.create("div",{},"service_3_container"); service_3_container.id = "service_3_container_id_" + generated_id; scroll_content_container.appendChild(service_3_container); var menu3 = OAT.Dom.create("div",{},"zitgist_menu"); service_3_container.appendChild(menu3); var waiting_container3 = OAT.Dom.create("div",{},"waiting_container"); menu3.appendChild(waiting_container3); waiting_container3.innerHTML = service_3_container.innerHTML + ''; var menu_separator3 = OAT.Dom.create("div",{},"zitgist_menu_separator"); menu3.appendChild(menu_separator3); // Service Container 2 var service_2_container = OAT.Dom.create("div",{},"service_2_container"); service_2_container.id = "service_2_container_id_" + generated_id; scroll_content_container.appendChild(service_2_container); var menu2 = OAT.Dom.create("div",{},"zitgist_menu"); service_2_container.appendChild(menu2); var waiting_container2 = OAT.Dom.create("div",{},"waiting_container"); menu2.appendChild(waiting_container2); waiting_container2.innerHTML = service_2_container.innerHTML + ''; var scrolldiv_slider = OAT.Dom.create("div",{},"scrolldiv_slider"); scrolldiv_slider.id = "scrolldiv_slider_id_" + generated_id; content_container.appendChild(scrolldiv_slider); var scrolldiv_scrollUp = OAT.Dom.create("div",{},"scrolldiv_scrollUp"); scrolldiv_scrollUp.id = "scrolldiv_scrollUp_id_" + generated_id; scrolldiv_slider.appendChild(scrolldiv_scrollUp); var scrolldiv_scrollbar = OAT.Dom.create("div",{},"scrolldiv_scrollbar"); scrolldiv_scrollbar.id = "scrolldiv_scrollbar_id_" + generated_id; scrolldiv_slider.appendChild(scrolldiv_scrollbar); var scrolldiv_theScroll = OAT.Dom.create("div",{},"scrolldiv_theScroll"); scrolldiv_theScroll.id = "scrolldiv_theScroll_id_" + generated_id; scrolldiv_scrollbar.appendChild(scrolldiv_theScroll); var scrolldiv_theScroll_span = OAT.Dom.create("span",{},""); scrolldiv_theScroll.appendChild(scrolldiv_theScroll_span); var scrolldiv_scrollDown = OAT.Dom.create("div",{},"scrolldiv_scrollDown"); scrolldiv_scrollDown.id = "scrolldiv_scrollDown_id_" + generated_id; scrolldiv_slider.appendChild(scrolldiv_scrollDown); scrolldiv_initScroll(generated_id); var a1 = new OAT.AnimationOpacity(zitgist_popup,{opacity:1}); var a2 = new OAT.AnimationOpacity(zitgist_popup,{opacity:0}); // First mouseover behavior var position = OAT.Dom.position(element); load_service_1(uri, service_1_container, local_path); // Web Page + Semantic Page load_service_3(uri, service_3_container, local_path); // Author's Annotations load_service_2(uri, service_2_container, local_path); // Semantic Web Entities /*@cc_on popup_show_timeout_id = setTimeout((function show_zlinks_popup(zitgist_popup, position, a1, a2) { return function() { // Check if the annotation window is already open. If it is not, then show the zitgist_popup if(!isAnnotationPopupOpen(document.getElementById("zitgist_popup_btn_" + zitgist_popup.id.substr(14, zitgist_popup.id.length - 14)))) { a2.stop(); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); } } } )(zitgist_popup, position, a1, a2), 500); @*/ if(!OAT.Browser.isIE) { popup_show_timeout_id = setTimeout(show_zlinks_popup, 500, zitgist_popup, position, a1, a2); } var scroll_over = false; OAT.Event.attach(content_container,"mouseover",function(event) { /* start displaying on mouseover */ if(scroll_over == false) { if (window.addEventListener) // DOMMouseScroll is for mozilla. window.addEventListener('DOMMouseScroll', wheel, false); // IE/Opera. window.onmousewheel = document.onmousewheel = wheel; scrolldiv_initScroll_mouseover(generated_id); scroll_over = true; } }); OAT.Event.attach(content_container,"mouseout",function(event) { /* start displaying on mouseover */ if(scroll_over == true) { if (window.removeEventListener) // DOMMouseScroll is for mozilla. window.removeEventListener('DOMMouseScroll', wheel, false); // IE/Opera. window.onmousewheel = document.onmousewheel = null; scroll_over = false; } }); OAT.MSG.attach(a2.animation,OAT.MSG.ANIMATION_STOP,function(){ /* hide after opacity gets to 0 */ OAT.Dom.hide(zitgist_popup); }); // Re-asign the mouse over event. OAT.Event.attach(element,"mouseover",function(event) { /* start displaying on mouseover */ var position = OAT.Event.position(event); clearTimeout(popup_hide_timeout_id); /*@cc_on popup_show_timeout_id = setTimeout((function show_zlinks_popup(zitgist_popup, position, a1, a2) { return function() { if(!isAnnotationPopupOpen(document.getElementById("zitgist_popup_btn_" + zitgist_popup.id.substr(14, zitgist_popup.id.length - 14)))) { a2.stop(); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); } } } )(zitgist_popup, position, a1, a2), 500); @*/ if(!OAT.Browser.isIE) { popup_show_timeout_id = setTimeout(show_zlinks_popup, 500, zitgist_popup, position, a1, a2); } }); OAT.Event.attach(element,"mouseout",function(event) { /* start hiding on mouseout */ clearTimeout(popup_show_timeout_id); /*@cc_on popup_hide_timeout_id = setTimeout((function hide_zlinks_popup(a1, a2) { return function() { a1.stop(); a2.start(); } } )(a1, a2), 1000); @*/ if(!OAT.Browser.isIE) { popup_hide_timeout_id = setTimeout(hide_zlinks_popup, 1000, a1, a2); } }); OAT.Event.attach(zitgist_popup,"mouseover",function(event) { /* start displaying on mouseover */ clearTimeout(popup_hide_timeout_id); OAT.Dom.show(zitgist_popup); a1.start(); }); OAT.Event.attach(zitgist_popup,"mouseout",function(event) { /* start hiding on mouseout */ clearTimeout(popup_show_timeout_id); /*@cc_on popup_hide_timeout_id = setTimeout((function hide_zlinks_popup(a1, a2) { return function() { a1.stop(); a2.start(); } } )(a1, a2), 1000); @*/ if(!OAT.Browser.isIE) { popup_hide_timeout_id = setTimeout(hide_zlinks_popup, 1000, a1, a2); } }); } } function show_zlinks_popup(zitgist_popup, position, a1, a2) { if(!isAnnotationPopupOpen(document.getElementById("zitgist_popup_btn_" + zitgist_popup.id.substr(14, zitgist_popup.id.length - 14)))) { a2.stop(); zitgist_popup.style.left = (position[0]+10)+"px"; zitgist_popup.style.top = (position[1]+5)+"px"; OAT.Dom.show(zitgist_popup); a1.start(); reposition_popup(zitgist_popup); } } function hide_zlinks_popup(a1, a2) { a1.stop(); a2.start(); } function load_service_1(uri, element, local_path) { var imgs_path = local_path + 'imgs/'; var url = local_path + 'proxy.php?'; url = url + 'service=all&'; url = url + 'from='+local_path+'&'; url = url + 'uri=' + escape(uri); reqs.push(load_service_response_XML_1(url, uri, element.firstChild, imgs_path)); } function load_service_2(uri, element, local_path) { var imgs_path = local_path + 'imgs/'; var url = local_path + 'proxy.php?'; url = url + 'service=rdf&'; url = url + 'from='+local_path+'&'; url = url + 'uri=' + escape(uri); reqs2.push(load_service_response_XML_2(url, uri, element.firstChild, imgs_path)); } function load_service_3(uri, element, local_path) { var imgs_path = local_path + 'imgs/'; var url = local_path + 'annotations.php?'; url = url + 'uri=' + escape(uri); reqs3.push(load_service_response_XML_3(url, uri, element.firstChild, imgs_path)); } function load_service_response_XML_1(url, uri, element, imgs_path) { var req; // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.element = element; req.imgs_path = imgs_path; req.onreadystatechange = process_service_response_1; req.open("GET", url, true); req.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.element = element; req.imgs_path = imgs_path; req.onreadystatechange = process_service_response_1; req.open("GET", url, true); req.send(); } } return req; } function load_service_response_XML_2(url, uri, element, imgs_path) { var req2; // branch for native XMLHttpreq2uest object if (window.XMLHttpRequest) { req2 = new XMLHttpRequest(); req2.element = element; req2.imgs_path = imgs_path; req2.onreadystatechange = process_service_response_2; req2.open("GET", url, true); req2.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req2 = new ActiveXObject("Microsoft.XMLHTTP"); if (req2) { req2.element = element; req2.imgs_path = imgs_path; req2.onreadystatechange = process_service_response_2; req2.open("GET", url, true); req2.send(); } } return req2; } function load_service_response_XML_3(url, uri, element, imgs_path) { var req3; // branch for native XMLHttpreq2uest object if (window.XMLHttpRequest) { req3 = new XMLHttpRequest(); req3.element = element; req3.imgs_path = imgs_path; req3.onreadystatechange = process_service_response_3; req3.open("GET", url, true); req3.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req3 = new ActiveXObject("Microsoft.XMLHTTP"); if (req3) { req3.element = element; req3.imgs_path = imgs_path; req3.onreadystatechange = process_service_response_3; req3.open("GET", url, true); req3.send(); } } return req3; } function process_service_response_1() { for (var i = 0; i < reqs.length; i++) { if (reqs[i].readyState == 4) { window.status = ''; if (reqs[i].status == 200) { if(reqs[i].element) { reqs[i].element.innerHTML = ""; } if(reqs[i].responseXML) { var response = reqs[i].responseXML.documentElement; var blank_icon = ""; var isAnyElement = false; if(response.getElementsByTagName('amazon')[0]) { var buyurl = response.getElementsByTagName('amazon')[0].getElementsByTagName('buyurl')[0].firstChild.data; var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); menu_item.innerHTML = '' + blank_icon + '\"Buy' + 'Buy on Amazon'; reqs[i].element.appendChild(menu_item); isAnyElement = true; } if(response.getElementsByTagName('webpage')[0]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); var url = ""; if(response.getElementsByTagName('amazon')[0]) { url = unescape(response.getElementsByTagName('webpage')[0].firstChild.data) + '/searchcom07-20'; } else { url = unescape(response.getElementsByTagName('webpage')[0].firstChild.data); } menu_item.innerHTML = '' + blank_icon + '\"See' + 'Web page'; reqs[i].element. appendChild(menu_item); isAnyElement = true; } if(response.getElementsByTagName('rdfdocument')[0]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); menu_item.innerHTML = '' + blank_icon + '\"See' + 'Semantic page'; reqs[i].element. appendChild(menu_item); isAnyElement = true; } if(isAnyElement) { var menu_separator = OAT.Dom.create("div",{},"zitgist_menu_separator"); reqs[i].element.appendChild(menu_separator); } if(reqs[i].element) { reposition_popup(reqs[i].element.parentNode.parentNode.parentNode.parentNode.parentNode); } scrolldiv_initScroll(reqs[i].element.parentNode.parentNode.id.substr(21, reqs[i].element.parentNode.parentNode.id.length - 21)); } } } } } function process_service_response_2() { for (var ii = 0; ii < reqs2.length; ii++) { if (reqs2[ii].readyState == 4) { window.status = ''; if (reqs2[ii].status == 200) { if(reqs2[ii].element) { reqs2[ii].element.innerHTML = ""; } if(reqs2[ii].responseXML) { var response = reqs2[ii].responseXML.documentElement; for(var i = 0; i < response.getElementsByTagName('entity').length; i++) { if(response.getElementsByTagName('entity')[i]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); var entity = response.getElementsByTagName('entity')[i]; var entity_type = extractTypeName(entity.attributes[2].nodeValue) var entity_img = reqs2[ii].imgs_path; entity_img = entity_img + entity_type + ".gif"; var entity_rel_backlink = ""; if(entity.attributes[5].nodeValue == "backlink") { entity_rel_backlink = "\"Incoming"; } if(entity.attributes[3].nodeValue == "") { if(entity_type == "") { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity_rel_backlink + 'undefined'; } else { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity_type + '' } } else { if(entity_type == "") { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity.attributes[3].nodeValue + ''; } else { menu_item.innerHTML = '' + entity_rel_backlink + '\"Resource' + entity.attributes[3].nodeValue + ' (' + entity_type + ')'; } } reqs2[ii].element.appendChild(menu_item); } } if(reqs2[ii].element) { reposition_popup(reqs2[ii].element.parentNode.parentNode.parentNode.parentNode.parentNode); } scrolldiv_initScroll(reqs2[ii].element.parentNode.parentNode.id.substr(21, reqs2[ii].element.parentNode.parentNode.id.length - 21)); } } } } } function process_service_response_3() { for (var iii = 0; iii < reqs3.length; iii++) { if (reqs3[iii].readyState == 4) { window.status = ''; if (reqs3[iii].status == 200) { if(reqs3[iii].element) { reqs3[iii].element.innerHTML = ""; } if(reqs3[iii].responseXML) { var response = reqs3[iii].responseXML.documentElement; for(var i = 0; i < response.getElementsByTagName('annotation').length; i++) { if(response.getElementsByTagName('annotation')[i]) { var menu_item = OAT.Dom.create("div",{},"zitgist_menu_item"); var annotation_item = response.getElementsByTagName('annotation')[i]; var annotation_item_body = OAT.Dom.create("div",{},"annotation_item_body"); menu_item.appendChild(annotation_item_body); var clean_text = removeHTML(annotation_item.getElementsByTagName('body')[0].firstChild.data); var icons = "\"Author's"; if(clean_text.length > 50) { annotation_item_body.innerHTML = icons + clean_text.substr(0, 50) + "...

    Read full annotation
    "; // Adding the anchor element to open the dimmer menu_item.appendChild(annotation_item_body); // Creating the Dimmer content var dimmer_content = OAT.Dom.create("div",{},"seemore_dimmer_content"); dimmer_content.id = "dimmer_content_id_" + annotation_item.getElementsByTagName('id')[0].firstChild.data; OAT.Dom.hide(dimmer_content); OAT.Dom.attach(annotation_item_body.getElementsByTagName('a')[0], "click", function (event) { var id = OAT.Event.source(event).id.substr(19,OAT.Event.source(event).id.length - 19); OAT.Dimmer.show(document.getElementById("dimmer_content_id"+id), {popup:true}); OAT.Dom.center(document.getElementById("dimmer_content_id"+id), 1, 1); }); // Dimmer close button var dimmer_content_close_btn = OAT.Dom.create("img",{},"close_dimmer_btn"); dimmer_content_close_btn.src = reqs3[iii].imgs_path+"close.gif"; dimmer_content_close_btn.alt = "Close"; dimmer_content_close_btn.title = "Close"; dimmer_content.appendChild(dimmer_content_close_btn); OAT.Dom.attach(dimmer_content_close_btn, "click", function (event) { OAT.Dimmer.hide(); }); var dimmer_content_p = OAT.Dom.create("p",{},""); dimmer_content.appendChild(dimmer_content_p); dimmer_content_p.innerHTML = annotation_item.getElementsByTagName('body')[0].firstChild.data; menu_item.appendChild(dimmer_content); } else { annotation_item_body.innerHTML = icons + annotation_item.getElementsByTagName('body')[0].firstChild.data; } reqs3[iii].element.appendChild(menu_item); var menu_separator = OAT.Dom.create("div",{},"zitgist_menu_separator"); reqs3[iii].element.appendChild(menu_separator); } } if(reqs3[iii].element) { reposition_popup(reqs3[iii].element.parentNode.parentNode.parentNode.parentNode.parentNode); } scrolldiv_initScroll(reqs3[iii].element.parentNode.parentNode.id.substr(21, reqs3[iii].element.parentNode.parentNode.id.length - 21)); } } } } } function extractTypeName(typeUri) { if(typeUri.lastIndexOf('#') > 0) { return typeUri.substring(typeUri.lastIndexOf('#') + 1, typeUri.length).toLowerCase(); } else { return typeUri.substring(typeUri.lastIndexOf('/') + 1, typeUri.length).toLowerCase(); } } function generateId() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var string_length = 8; var randomstring = ''; for (var i=0; i]+(>|$)/g, "")); } function reposition_popup(element) { var window_top = window.pageYOffset; /*@cc_on window_top = document.documentElement.scrollTop; @*/ var window_height = window.innerHeight; /*@cc_on window_height = document.documentElement.clientHeight; @*/ var window_bottom = window_top + window_height; var popup_top = element.offsetTop; var popup_height = element.scrollHeight; var popup_bottom = popup_top + popup_height; // Check if the popup is bellow the bottom fold if(popup_bottom > window_bottom) { var move_top = 0; if(window_height <= popup_height) { move_top = window_top + 20; } else { move_top = popup_top - ( popup_height - (window_bottom - popup_top)); move_top = move_top - 30; } element.style.top = move_top+"px"; } } function isAnnotationPopupOpen(element) { // Check if the annotation window is already open. If it is not, then show the zitgist_popup if(element) { if(element.previousSibling.nodeName == "IMG") { var id = element.previousSibling.id.substr(21, element.previousSibling.id.length - 21); if(!document.getElementById("annotation_popup_" + id) || document.getElementById("annotation_popup_" + id).style.display == "none") { return false; } return true; } return false; } return false; } function wheel(event){ var delta = 0; if (!event) event = window.event; if (event.wheelDelta) { delta = event.wheelDelta/120; if (window.opera) delta = -delta; } else if (event.detail) { delta = -event.detail/3; } if (delta) mouse_wheel_handle(delta); if (event.preventDefault) event.preventDefault(); event.returnValue = false; } function mouse_wheel_handle(delta) { if(navigator.userAgent.indexOf('Opera') >= 0) { if(delta < 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonUp(); scrolldiv_scrollButtonStopUp(); scrollbuttonSpeed = backup_speed; } if(delta > 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonDown(); scrolldiv_scrollButtonStopDown(); scrollbuttonSpeed = backup_speed; } } else { if(delta > 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonUp(); scrolldiv_scrollButtonStopUp(); scrollbuttonSpeed = backup_speed; } if(delta < 0) { var backup_speed = scrollbuttonSpeed; scrollbuttonSpeed = scrollbuttonSpeed * 5; scrolldiv_scrollButtonDown(); scrolldiv_scrollButtonStopDown(); scrollbuttonSpeed = backup_speed; } } }Hwordpress/wp-content/plugins/zlinks/js/.svn/text-base/scroll.js.svn-base!var scrollActive = false; var contentHeight = 0; // The total height of the content var visibleContentHeight = 0; var scrollHandleObj = false; // reference to the scroll handle var scrollHandleHeight = false; var scrollbarTop = false; var eventYPos = false; var scrollbuttonActive = false; var scrollbuttonDirection = false; var scrollbuttonSpeed = 2; var scrollTimer = 10; // Also how fast the content scrolls. By decreasing this value, the content will move faster var scrollMoveToActive = false; var scrollMoveToYPosition = false; var element_id = ""; var operaBrowser = false; if(navigator.userAgent.indexOf('Opera') >= 0) { operaBrowser=1; } function scrollDiv_startScroll(e) { if(document.all && !operaBrowser) { e = event; } scrollbarTop = document.getElementById('scrolldiv_theScroll_id_' + element_id).offsetTop; eventYPos = e.clientY; scrollActive = true; } function scrollDiv_stopScroll() { scrollActive = false; scrollbuttonActive = false; scrollMoveToActive = false; } function scrollDiv_scroll(e) { if(scrollActive) { if(!scrollActive) { return; } } else { return; } if(document.all && !operaBrowser) { e = event; } if(e.button!=1 && document.all) { return; } var topPos = scrollbarTop + e.clientY - eventYPos; if(topPos<0) { topPos=0; } if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1) { topPos = visibleContentHeight-(scrollHandleHeight+4); } document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top = topPos + 'px'; document.getElementById('scrolldiv_content_id_' + element_id).style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' } /* Click on the slider Move the content to the this point */ function scrolldiv_scrollMoveToInit(e) { if(document.all && !operaBrowser) { e = event; } scrollMoveToActive = true; scrollMoveToYPosition = e.clientY - document.getElementById('scrolldiv_scrollbar_id_' + element_id).offsetTop; // scrollMoveToYPosition = e.clientY; if(document.getElementById('scrolldiv_theScroll_id_' + element_id).offsetTop/1 > scrollMoveToYPosition) { scrollbuttonDirection = scrollbuttonSpeed*-2; } else { scrollbuttonDirection = scrollbuttonSpeed*2; } scrolldiv_scrollMoveTo(); } function scrolldiv_scrollMoveTo() { // Disable scroll if the content is smaller than the scroll container if(document.getElementById('scrolldiv_slider_id_' + element_id).scrollHeight >= document.getElementById('scrolldiv_content_id_' + element_id).scrollHeight) { return; } if(!scrollMoveToActive || scrollActive) { return; } var topPos = document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top.replace('px',''); topPos = topPos/1 + scrollbuttonDirection; if(topPos<0) { topPos=0; scrollMoveToActive=false; } if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1) { topPos = visibleContentHeight-(scrollHandleHeight+4); scrollMoveToActive=false; } if(scrollbuttonDirection<0 && topPos0 && topPos>scrollMoveToYPosition-scrollHandleHeight/2) { return; } document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top = topPos + 'px'; document.getElementById('scrolldiv_content_id_' + element_id).style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' setTimeout('scrolldiv_scrollMoveTo()',scrollTimer); } function cancelEvent() { return false; } function scrolldiv_scrollButtonDown() { document.getElementById('scrolldiv_scrollDown_id_' + element_id).style.backgroundColor = "#A4A4A4"; scrollbuttonDirection = scrollbuttonSpeed; scrollbuttonActive=true; scrolldiv_scrollButtonScroll(); } function scrolldiv_scrollButtonUp() { document.getElementById('scrolldiv_scrollUp_id_' + element_id).style.backgroundColor = "#A4A4A4"; scrollbuttonDirection = scrollbuttonSpeed * - 1; scrollbuttonActive=true; scrolldiv_scrollButtonScroll(); } function scrolldiv_scrollButtonScroll() { // Disable scroll if the content is smaller than the scroll container if(document.getElementById('scrolldiv_slider_id_' + element_id).scrollHeight >= document.getElementById('scrolldiv_content_id_' + element_id).scrollHeight) { return; } if(!scrollbuttonActive) { return; } var topPos = document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top.replace('px',''); topPos = topPos/1 + scrollbuttonDirection; if(topPos<0) { topPos=0; scrollbuttonActive=false; } if(topPos/1>visibleContentHeight-(scrollHandleHeight+4)/1) { topPos = visibleContentHeight-(scrollHandleHeight+4); scrollbuttonActive=false; } document.getElementById('scrolldiv_theScroll_id_' + element_id).style.top = topPos + 'px'; document.getElementById('scrolldiv_content_id_' + element_id).style.top = 0 - Math.floor((contentHeight) * ((topPos)/(visibleContentHeight-scrollHandleHeight)))+'px' setTimeout('scrolldiv_scrollButtonScroll()',scrollTimer); } function scrolldiv_scrollButtonStopUp() { document.getElementById('scrolldiv_scrollUp_id_' + element_id).style.backgroundColor = ""; scrolldiv_scrollButtonStop(); } function scrolldiv_scrollButtonStopDown() { document.getElementById('scrolldiv_scrollDown_id_' + element_id).style.backgroundColor = ""; scrolldiv_scrollButtonStop(); } function scrolldiv_scrollButtonStop() { scrollbuttonActive = false; } function scrolldiv_initScroll(generated_id) { document.getElementById('scrolldiv_content_id_' + generated_id).style.top = 0; scrollinit(generated_id); } function scrolldiv_initScroll_mouseover(generated_id) { scrollinit(generated_id); } function scrollinit(generated_id) { element_id = generated_id; visibleContentHeight = document.getElementById('scrolldiv_scrollbar_id_' + generated_id).offsetHeight ; contentHeight = document.getElementById('scrolldiv_content_id_' + generated_id).offsetHeight - visibleContentHeight; scrollHandleObj = document.getElementById('scrolldiv_theScroll_id_' + generated_id); scrollHandleHeight = scrollHandleObj.offsetHeight; scrollbarTop = document.getElementById('scrolldiv_scrollbar_id_' + generated_id).offsetTop; document.getElementById('scrolldiv_theScroll_id_' + generated_id).onmousedown = scrollDiv_startScroll; document.body.onmousemove = scrollDiv_scroll; document.getElementById('scrolldiv_scrollbar_id_' + generated_id).onselectstart = cancelEvent; document.getElementById('scrolldiv_theScroll_id_' + generated_id).onmouseup = scrollDiv_stopScroll; if(document.all) { document.body.onmouseup = scrollDiv_stopScroll; } else { document.documentElement.onmouseup = scrollDiv_stopScroll; } document.getElementById('scrolldiv_scrollDown_id_' + generated_id).onmousedown = scrolldiv_scrollButtonDown; document.getElementById('scrolldiv_scrollUp_id_' + generated_id).onmousedown = scrolldiv_scrollButtonUp; document.getElementById('scrolldiv_scrollDown_id_' + generated_id).onmouseup = scrolldiv_scrollButtonStopDown; document.getElementById('scrolldiv_scrollUp_id_' + generated_id).onmouseup = scrolldiv_scrollButtonStopUp; document.getElementById('scrolldiv_scrollUp_id_' + generated_id).onselectstart = cancelEvent; document.getElementById('scrolldiv_scrollDown_id_' + generated_id).onselectstart = cancelEvent; document.getElementById('scrolldiv_scrollbar_id_' + generated_id).onmousedown = scrolldiv_scrollMoveToInit; // resize the scroll until it reaches 400 in height. var content_height = document.getElementById('scrolldiv_content_id_' + generated_id).scrollHeight; if(content_height < 400) { document.getElementById('scrolldiv_slider_id_' + generated_id).style.height = content_height + 'px'; if(content_height - 47 <= 0) { document.getElementById('scrolldiv_scrollbar_id_' + generated_id).style.height = "13px"; document.getElementById('content_container_id_' + generated_id).style.height = "52px"; } else { document.getElementById('scrolldiv_scrollbar_id_' + generated_id).style.height = (content_height - 34) + 'px'; document.getElementById('content_container_id_' + generated_id).style.height = (content_height +5) + 'px'; } } else { document.getElementById('scrolldiv_slider_id_' + generated_id).style.height = "400px"; document.getElementById('scrolldiv_scrollbar_id_' + generated_id).style.height = "366px"; document.getElementById('content_container_id_' + generated_id).style.height = "405px"; } } // From dhtmlgoodies.com with many modifications to make it working. -wordpress/wp-content/plugins/zlinks/proxy.php 0) && (strlen($url) > 0)) { $reponse = do_post($url, $request, $success); } else { header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past ?> Bad Call .wordpress/wp-content/plugins/zlinks/readme.txt\p=== Plugin Name === Contributors: Zitgist Tags: zlinks, semantic web, links, linked data, rdf, related data Requires at least: 2.0.0 Tested up to: 2.2 Stable tag: 1.0 A clickable icon for every post, comment and embedded link leads to additional semantic Web and related data resources. == Description == This plug-in shows blog readers existing related data for a given URL and, in some cases, enables them to perform actions based on this data. More explanations and examples are available from the online help or from this article: "[Blogs, Wordpress, Zitgist and the Semantic Web](http://fgiasson.com/blog/index.php/2007/09/01/blogs-wordpress-zitgist-and-the-semantic-web/ "") == Installation == The zLinks plugin is simple to install and get working: 1. Unzip the distribution package locally 2. Upload the folder`zlinks` and its subdirectories to the `/wp-content/plugins/` directory 3. Activate the plugin through the 'Plugins' menu in the WordPress Administration panel. That's it! All links within your blog posts and comments will now display an icon to its immediate right, which your blog readers may click to invoke a popup with additional links and resources related to that link. == Frequently Asked Questions == What is zLinks? --------------- zLinks is a service expressed on a user's client that enables all links from within a blog post and its comments (or from a CMS -- content management system) to be displayed with additional and related data and information. zLinks thus becomes a nexus -- or jumping off point -- for additional exploration and learning. In this specific instance, zLinks resides as a plug-in to WordPress; other instances may also occur as plug-ins to existing client-side software. The interlinkable linked data phenomenon underlying zLinks is a key underpinning of the semantic Web, and an expression of the unique technologies and data mastery provided by zLinks' parent company, Zitgist. What is the value of zLinks links? ---------------------------------- The Internet and the Web first showed the power of linked and networked documents. The interlinked links provided by zLinks takes this understanding to a new level: the freeing and linking of all data objects and concepts with related information. We have seen a bit of this trend in the past few years with "mashups" that are able to, for example, plot geographic information from one source onto a different map source, or time-related information on calendars or timelines. But these first baby steps required specific coding to make data from two different sources relate. zLinks now offers a single facility for exposing data linkages everywhere and in any form. These linkages are a floodgate about ready to open. The value is that related data will find itself and find its relationships by virtue of its linked character and quality. The added value to standard Web users is limitless. Is there anything I should do in advance of installation? --------------------------------------------------------- No, there is nothing you need to do in advance. It is useful to already have a personal URI, FOAF file or OpenID, but those can also be obtained after initial installation; see this other link. Where do I find the zLinks download? ------------------------------------ The current zLinks download is always available directly from the WordPress download site at: http://wordpress.org/extend/plugins/zlinks/. Where and how do I upgrade my zLinks plug-in? --------------------------------------------- The most recent version and upgrade instructions may also be found from the same WordPress distribution site. How do I install the plug-in? ----------------------------- 1. Upload the folder`zitgist_browser_linker` to the `/wp-content/plugins/` directory 2. Activate the plugin through the 'Plugins' menu in WordPress Then you are done. All links within your blog posts and comments will have now an icon displayed to the right of all links that, when the mouse passes over, causes a popup dialog to appear with the linked data information. Does zLinks require cURL? ------------------------- Yes, zLinks requires the cURL utility (see http://en.wikipedia.org/wiki/CURL). Fortunately, this utility is a standard inclusion with PHP and virtually all users should experience no issues. If it does pose a problem, the link above will lead to further information to fix the problem. Where do I find configuration settings? --------------------------------------- You must initially set up zLinks before you can begin entering annotations. Like other zLinks configurations, you make these changes within the Options ? zLinks menu links within your WordPress Administration panel (see http://codex.wordpress.org/Administration_Panels). All configuration options are set via radio buttons and simple fill-in text boxes. How do I set up my author identification? ----------------------------------------- You must set your author identity prior to being able to share your annotations publicly on the Semantic Web. This identifier is used to link the annotations you wrote with the URL you annotated. You may select from three options to set your identity: 1. ( ) Use the generic WordPress ID number: http://blogname.com/wp-content/plugins/zlinks/user/$userid 2. (x) Reuse an existing identifier (the URI describing you): [enter URI] 3. ( ) Use a new identifier at a later time: http://blogname.com/wp-content/plugins/zlinks/user/$userid; link it to this new identifier once obtained: [enter URI] If you don't have any existing URI and don't plan to get one, you can select option #1. In that case, your generic $userid is automatically chosen from your internal WordPress settings. This is usually a number ID and its display can not be altered. This is the default fallback case. However, on the Semantic Web, some people already have an identifier for themselves via an OpenID or a URI they own pointing to, say, a FOAF file. This is generally the best case because the identifier is reusable for many settings and purposes and other users see the name you want to display as the annotator. If you already have one, use option #2, then fill in the text field with the identifier URI. If you don't have one, but want to use an identifier URI, you can get one prior to proceeding further with your zLinks configuration. For example, you could obtain for yourself a URI (http://dig.csail.mit.edu/breadcrumbs/node/71) (which you then could use or not for a FOAF file and OpenID; see http://en.wikipedia.org/wiki/OpenID). Once you have your identifier URI then proceed with option #2. However if you plan to use a URI identifier, but don't want to go through the effort immediately, then chose option #3. This option starts by using the default WP $userid, but enables you to later update to a new identifier URI. Option #3 maintains the connection between older annotations using the $userid with your new user identifier. You fill in the text field at a later date after you have set up that new identifier. For all options, your user identifier is found at http://blogname.com/wp-content/plugins/zlinks/user/$userid, and is available to both browsers and as RDF. What else do I need to do to make my annotations public? -------------------------------------------------------- Part of enabling your annotations to be public is notifying a service, Ping the Semantic Web in the case of zLinks, that the annotation is available and updated. While the software install takes care of most parts of this requirement, you also need to tell your WordPress installation that is OK to notify the service. You do this by modifying the robots.txt file found in your WordPress root directory (most often called public_html). You need to modify that file by adding a # and a space before the line that reads Disallow: /wp-content/, so that it now becomes: # Disallow: /wp-content/ That is all that must be done. Likely future versions of zLinks may change this arrangement. And, should you have any questions about this requirement, contact your hosting provider. How do I keep annotations private? ---------------------------------- You may keep your annotations private or share them publicly with others on the Semantic Web. When public, whenever another person links to the same URL you have annotated (say, the URL http://example.com) and also has the zLinks plug-in installed, then readers of that reference blog will also now see the annotations you wrote for that URL. By disabling this option in the configuration dialog under Options in your WordPress Admininstrative panel, your annotations will only be visible from your blog and will remain private internally to the blog and its authors. How do I interpret the information in the zLinks popup? ------------------------------------------------------- When you mouse over the small icon at the right of a link, zLinks launches its data link analysis. You will first get an alert that the system is working, retrieving all of the necessary background link information. You will then get a popup showing the results. The popup results are presented in up to four sections. The top section contains some general zLinks links (to this FAQ, for example!). The second section presents links to either the standard Web page or the semantic Web page (resolved) for the initiating link. The choice of this link depends on the content negotiation dictated by the starting URI in the embedded blog link. Additionally, there may also be some actions in this section related to certain types of URis (such as those with a book or product reference on Amazon, for example). Often, these additional actions and links are coded by a unique site icon. The third section presents any annotations, if present. The last and bottom section presents a more disaggregate view of related resources (data objects) with each link representing a unique "triple" drawn from the contributing information resources enriching the link. This listing can get quite long, and is therefore also keyed by icon to indicate the particular kind of resource that each triple link represents (person, document, subject, music, etc; see further below). Clicking on one of these links takes you to a Zitgist Linked Data Server (ZLDS) with its results presented through the Zitgist Browser, where various views and data formats are displayed (again, based on data type), with still further links for additional discovery. These Zitgist views can themselves be quite rich with maps, timelines, photos, structured data, etc. Here is where the data discovery part is really fun! What is a 'backlink' and how do I recognize one? ------------------------------------------------ An incoming reference (or "backlink") is a external link pointing to your content. A 'backlink' is akin to being the object in a subject - predicate - object triple. All incoming references or backlinks are shown in the first column of the zLinks popup as a twisted arrow icon, or little back arrow. I see some detailed information in a 'backlink' tooltip. What does this information mean? ----------------------------------------------------------------------------------------- When you mouseover an incoming reference ("backlink") icon, the tooltip shows a message similar to: Incoming reference has predicate: link_to Remember, an incoming reference is based on an external object referencing your current entry with a form similar to something like: Where the form corresponds to the standard triple of . (The predicate is called a property in RDF, but it is the same thing.) Depending on the backlink (that is, the incoming reference) the predicate may be any of the relationships from a source. Common ones are linked_to, homepage, see_also, sameAs, and so forth. These variations can not be enumerated in advance because the actual predicate relationship name in zLinks is based on the nature of the source triple. As you become familiar with the nature of these data relationships, inspection of these 'backlinked' tooltips becomes even more valuable. OK, so what other common icons might I see in zLinks and what do they mean? --------------------------------------------------------------------------- There are a few common application icons you will see in zLinks (these are separate from the resource type icons; see below). Here are these icons and their explanations: Standard zLinks link icon standard zLinks icon that calls up the links popup zLinks link with annotation a zLinks link that includes annotation(s) working icon icon indicating zLinks is currently working . . . . Annotation popup icon Annotation popup icon (authors only; click to invoke) annotation indicator icon icon indicator for annotation edit icon edit an existing annotation (authors only; click to invoke) delete icon delete an existing annotation (authors only; click to invoke) backlink icon icon indicating an incoming URI reference ("backlink") Web page icon icon for a standard Web page link close icon Close dialog icon How do I annotate a link? ------------------------- To make a link annotation, you first must be logged in as an author of the blog (via having accessed the Administration panel). As a logged in author, you can then single-click on the zLinks icon, which will then bring up the separate Annotation popup. You simply need to add information in the text box to create your specific annotation. Note you can do this multiple times with multiple, separate annotations, or edit or modify existing ones. When you are completed with your entry, click the Save button to save your entry to the database. If you click off of the Annotation popup without first saving with the Save button, the dialog will close and nothing will be changed. However, if you return to this dialog in while the session remains active, you will see your previous unsaved changes. Note each time you create or delete a new annotation, zLinks pings PTSW (http://pingthesemanticweb.com) to update your listing if you have made it public (see above). How do I annotate my entire blog entry? --------------------------------------- You may provide an overall annotation relating to a specific blog post in its entirety (including, as examples, categories or tags) by annotating the link associated with the post title. How do I edit or modify an annotation? -------------------------------------- Simply bring up the Annotator for that link and click on the edit icon for the specific annotation you wish to change. You will then get the text box to edit your entry. When you are done, click the Save button to update the entry and save it to the database. To close the dialog, click outside of the popup. How do I delete an annotation? ------------------------------ Simply bring up the annotator for that link and click on the delete icon for the specific annotation you wish to delete. The entry will be removed from the database. Can I provide more than one annotation per link? ------------------------------------------------ Yes, you may provide as many annotation items per link as you wish. How do I use annotations for other purposes? -------------------------------------------- Annotations are also separately available as resources at this location: http://blogname.com/wp-content/plugins/zlinks/annotations. Annotations can be referenced as rdf+xml, turtle, or rdf+n3 (application or text). In addition, the annotations can be obtained in their entirety or by individual post. The URIs are properly handled so that the information is available to both browsers and as RDF. Can I include a link reference in an annotation? ------------------------------------------------ Yes. How long can an annotation be? ------------------------------ At present, there is no limit. Also you can add multiple annotations per link as separate entries. I occasionally see some long load times for the popup with the working icon. Why, is it stuck? ---------------------------------------------------------------------------------------------- The zLinks interlinked data is not kept permanently on the Zitgist servers. Each time you access a new zLink, the references are retrieved anew. This is most often not a problem, but can be on occasion if either: 1) the sources of the interlinks are slow; or 2) there are many, many interlinks. The latter is not yet that common, because linked data is still rather young. But it will grow to be a consideration and can crop up now when some of your sources are really "semwebby." We will likely need to change this behavior in the near future, but, for now, you may encounter a linked site that does an awful lot of "thinking" before your get your full results. By the way, if it ever is a problem and you can't wait, simply move on. Just move your mouse! No harm will happen. What are the standard icons provided with zLinks and what do they mean? ----------------------------------------------------------------------- These are the standard icons provided with zLinks and the name of the rdf:type to which they match: amazon icon amazon annotation icon annotation article icon article channel icon channel comment icon comment document icon document entry icon entry feed icon feed group icon group info icon info musicartist icon musicartist musicgroup icon musicgroup note icon note onlineaccount icon onlineaccount organization icon organization person icon person personalprofiledocument icon personalprofiledocument point icon point post icon post project icon project record icon record semanticpage icon semanticpage solomusicartist icon solomusicartist How can I add my own icons to the popup display? ------------------------------------------------ Any data resource link that appears in the lower portion of the popup may have its own associated icon. To do so, create an icon for the type you desire (advised to keep to 16 x 16 maximum), and give it a name with the GIF extension exactly the same as the rdf:type name used to refer to it. Then, place the same-named item.gif in the /imgs/ directory of your zLinks plug-in. You may add as many icons directly related to specific class names as you wish. Examples of the existing icons pre-loaded with zLinks are provided above. How do I submit additional questions or support requests? --------------------------------------------------------- Submit any support requests that are not obvious on the Web site to zlinks-support@zitgist.com. What is the semantic Web? ------------------------- The semantic Web is an evolving extension of the World Wide Web in which web content can be expressed not only in natural language, but also in a format that can be read and used by software agents, thus permitting them to find, share and integrate information more easily. It derives from W3C director Sir Tim Berners-Lee's vision of the Web as a universal medium for data, information, and knowledge exchange. At its core, the semantic web comprises a philosophy, a set of design principles, collaborative working groups, and a variety of enabling technologies. The most compliant versions of this definition are generally referred to in all caps as the Semantic Web, while lower case usage represents a more relaxed version with non-RDF data. What is RDF? ------------ Resource Description Framework (RDF) is a family of World Wide Web Consortium (W3C) specifications originally designed as a metadata model. The RDF model is based upon the idea of making statements about resources in the form of subject - predicate - object expressions, called triples in RDF terminology. The subject denotes the resource, and the predicate denotes traits or aspects of the resource and expresses a relationship between the subject and the object. This mechanism for describing resources is a major component in what is proposed by the W3C's Semantic Web vision in which automated software can store, exchange, and use machine-readable information distributed throughout the web, in turn enabling users to deal with the information with greater efficiency and certainty. With respect to the semantic Web, RDF is also used by a number of reference vocabularies called RDF schema that provide common concepts for relating resources to one another. It is this commonality of reference that enables data to be linked. RDF's simple data model and ability to model disparate, abstract concepts has also led to its increasing use in knowledge management applications unrelated to semantic Web activity. What is linked data? -------------------- Linked data is a term used to describe a recommended best practice for exposing, sharing, and connecting pieces of data on the semantic Web. The practice emphasizes Web access to data using existing Web technologies such as URIs and HTTP. It also emphasizes links between related Web resources. Linked data is by definition in RDF. Why is linked data important? ----------------------------- Linked data breaks the document boundaries of the original Web by enabling information resources about any given object or concept from anywhere on the Web to be combined into more meaningful understandings of that object and its relation to other objects or concepts. Via a common representation (RDF) and common vocabularies (RDF schema) and interoperable tools and understandings, data from any location or provenance can now be combined. This link facility enables the entire Web to be treated as an interoperable knowledge base and creates the ability to learn new emergent knowledge from the combined information. What is Zitgist and what else does it do? ----------------------------------------- Zitgist (pronounced "zeitgeist") (http://www.zitgist.com) is an industry standards-compliant Semantic Web query service. Its goal is to help Web users locate data, information, and knowledge on the Web. Zitgist develops and deploys Web application and data interlinking services that facilitate creation, aggregation, conversion, publication, and exchange of structured data. The company's main platform is the Zitgist Linked Data Server, accessed via the Zitgist Browser and Query Builder. zLinks is the client-side complement to the company's server-side technologies and services. The real work of zLinks comes through its access to the remote and free Zitgist Linked Data Servers. These Zitgist servers are the place where the heavy lifting of relating and finding new relevant information is done. An animated "working" icon appears while these additional related information and links are assembled. To learn more, check this blog post for more information: [Blogs, Wordpress, Zitgist and the Semantic Web](http://fgiasson.com/blog/index.php/2007/09/01/blogs-wordpress-zitgist-and-the-semantic-web/ ""). The popup also has links to further FAQs and information regarding the zLinks tool. 0wordpress/wp-content/plugins/zlinks/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins/zlinks svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 imgs dir zlinks.php file 2008-11-20T16:30:39.000000Z c53ef6065027ea540bf63ecbd36967aa 2008-10-28T18:17:06.112729Z 97 paul delete_annotation.php file 2008-11-20T16:30:39.000000Z f7ae2400aaf720299356ced318627ea2 2008-10-28T18:17:06.112729Z 97 paul annotations.php file 2008-11-20T16:30:39.000000Z f566ac15c327f6805ba5c3b2f61bb954 2008-10-28T18:17:06.112729Z 97 paul system dir authors dir edit_annotation.php file 2008-11-20T16:30:39.000000Z 4f35e7ce81f714450a3dffc00f65cd51 2008-10-28T18:17:06.112729Z 97 paul proxy.php file 2008-11-20T16:30:39.000000Z a17c645fe8a5fdbd9aaebc16b5b1a71a 2008-10-28T18:17:06.112729Z 97 paul css dir add_annotation.php file 2008-11-20T16:30:39.000000Z 0b89fd7db98121d5b4e4dab3e9570619 2008-10-28T18:17:06.112729Z 97 paul readme.txt file 2008-11-20T16:30:39.000000Z 74aef219c6bd9cb22a2e9bb8664f50bd 2008-10-28T18:17:06.112729Z 97 paul js dir annotations dir /wordpress/wp-content/plugins/zlinks/.svn/format8 Nwordpress/wp-content/plugins/zlinks/.svn/text-base/add_annotation.php.svn-basej", $body); $body = hyperlink_urls($body, 30, '', '...', false); } $date = date('Y-m-d'); $time = date('H:i:s'); global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; // Filtering out bad HTML. Prevent HTML code injection $filter_annotation = new lib_filter(); $body = $filter_annotation->go($body); $insert = "INSERT INTO " . $table_name . " (partial_uri, author_id, body, annotated_resource, created) " . "VALUES ('".quote_smart($partial_uri)."','".quote_smart($author)."', '".quote_smart($body)."', '".quote_smart($annotated_resource)."', '$date $time')"; $results = $wpdb->query( $insert ); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; echo "\n"; // If user shares annotations, then we have to ping http://pingthesemanticweb.com if(get_option("zlinks_option_private_".$author) == "false" || get_option("zlinks_option_private_".$author) == "") { $query = "SELECT * FROM " . $table_name . " WHERE created = '$date $time'"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { pingPTSW($partial_uri.$annotation->id); } } function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not a number or a numeric string if (!is_numeric($value)) { $value = mysql_escape_string($value); } return $value; } // From: http://www.coffee2code.com // mode: 0=full url; 1=host-only ;11+=number of characters to truncate after function hyperlink_urls ($text, $mode='0', $trunc_before='', $trunc_after='...', $open_in_new_window=true) { $text = ' ' . $text . ' '; $new_win_txt = ($open_in_new_window) ? ' target="_blank"' : ''; // Hyperlink Class B domains *.(com|org|net|gov|edu|us|info|biz|ws|name|tv)(/*) $text = preg_replace("#([\s{}\(\)\[\]])([A-Za-z0-9\-\.]+)\.(com|org|net|gov|edu|us|info|biz|ws|name|tv)((?:/[^\s{}\(\)\[\]]*[^\.,\s{}\(\)\[\]]?)?)#ie", "'$1' . truncate_link(\"$2.$3$4\", \"$mode\", \"$trunc_before\", \"$trunc_after\") . ''", $text); // Hyperlink anything with an explicit protocol $text = preg_replace("#([\s{}\(\)\[\]])(([a-z]+?)://([A-Za-z_0-9\-]+\.([^\s{}\(\)\[\]]+[^\s,\.\;{}\(\)\[\]])))#ie", "'$1' . truncate_link(\"$4\", \"$mode\", \"$trunc_before\", \"$trunc_after\") . ''", $text); // Hyperlink e-mail addresses $text = preg_replace("#([\s{}\(\)\[\]])([A-Za-z0-9\-_\.]+?)@([^\s,{}\(\)\[\]]+\.[^\s.,{}\(\)\[\]]+)#ie", "'$1' . truncate_link(\"$2@$3\", \"$mode\", \"$trunc_before\", \"$trunc_after\") . ''", $text); return substr($text,1,strlen($text)-2); } function truncate_link($url, $mode='0', $trunc_before='', $trunc_after='...') { if (1 == $mode) { $url = preg_replace("/(([a-z]+?):\\/\\/[A-Za-z0-9\-\.]+).*/i", "$1", $url); $url = $trunc_before . preg_replace("/([A-Za-z0-9\-\.]+\.(com|org|net|gov|edu|us|info|biz|ws|name|tv)).*/i", "$1", $url) . $trunc_after; } elseif (($mode > 10) && (strlen($url) > $mode)) { $url = $trunc_before . substr($url, 0, $mode) . $trunc_after; } return $url; } ?> Kwordpress/wp-content/plugins/zlinks/.svn/text-base/annotations.php.svn-baseprefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE annotated_resource = '$uri' ORDER BY created"; $annotations = $wpdb->get_results($query); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; foreach ($annotations as $annotation) { echo "\n"; echo " ".$annotation->id."\n"; echo " ".$annotation->partial_uri."\n"; echo " ".$annotation->author."\n"; echo " ".htmlspecialchars($annotation->body)."\n"; echo " ".$annotation->created."\n"; echo "\n"; } echo "\n" ?> Qwordpress/wp-content/plugins/zlinks/.svn/text-base/delete_annotation.php.svn-base?prefix . "zlinks_annotations"; $delete = "DELETE FROM " . $table_name . " WHERE id = '$id'"; $results = $wpdb->query( $delete ); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; echo "\n"; ?> Owordpress/wp-content/plugins/zlinks/.svn/text-base/edit_annotation.php.svn-base}", $body); } if (isset($_POST['author'])) { $author = stripslashes(urldecode($_POST['author'])); } $date = date('Y-m-d'); $time = date('H:i:s'); global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; // Filtering out bad HTML. Prevent HTML code injection $filter_annotation = new lib_filter(); $body = $filter_annotation->go($body); $update = "UPDATE " . $table_name . " SET body = '".quote_smart($body)."' WHERE id = $id"; $results = $wpdb->query( $update ); // header header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past echo "\n"; echo "\n"; // If user shares annotations, then we have to ping http://pingthesemanticweb.com if(get_option("zlinks_option_private_".$author) == "false" || get_option("zlinks_option_private_".$author) == "") { $query = "SELECT * FROM " . $table_name . " WHERE id = $id"; $annotations = $wpdb->get_results($query); foreach ($annotations as $annotation) { pingPTSW($annotation->partial_uri.$annotation->id); } } function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not a number or a numeric string if (!is_numeric($value)) { $value = mysql_escape_string($value); } return $value; } ?> Ewordpress/wp-content/plugins/zlinks/.svn/text-base/proxy.php.svn-base 0) && (strlen($url) > 0)) { $reponse = do_post($url, $request, $success); } else { header('Content-type: text/xml'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past ?> Bad Call Fwordpress/wp-content/plugins/zlinks/.svn/text-base/readme.txt.svn-base\p=== Plugin Name === Contributors: Zitgist Tags: zlinks, semantic web, links, linked data, rdf, related data Requires at least: 2.0.0 Tested up to: 2.2 Stable tag: 1.0 A clickable icon for every post, comment and embedded link leads to additional semantic Web and related data resources. == Description == This plug-in shows blog readers existing related data for a given URL and, in some cases, enables them to perform actions based on this data. More explanations and examples are available from the online help or from this article: "[Blogs, Wordpress, Zitgist and the Semantic Web](http://fgiasson.com/blog/index.php/2007/09/01/blogs-wordpress-zitgist-and-the-semantic-web/ "") == Installation == The zLinks plugin is simple to install and get working: 1. Unzip the distribution package locally 2. Upload the folder`zlinks` and its subdirectories to the `/wp-content/plugins/` directory 3. Activate the plugin through the 'Plugins' menu in the WordPress Administration panel. That's it! All links within your blog posts and comments will now display an icon to its immediate right, which your blog readers may click to invoke a popup with additional links and resources related to that link. == Frequently Asked Questions == What is zLinks? --------------- zLinks is a service expressed on a user's client that enables all links from within a blog post and its comments (or from a CMS -- content management system) to be displayed with additional and related data and information. zLinks thus becomes a nexus -- or jumping off point -- for additional exploration and learning. In this specific instance, zLinks resides as a plug-in to WordPress; other instances may also occur as plug-ins to existing client-side software. The interlinkable linked data phenomenon underlying zLinks is a key underpinning of the semantic Web, and an expression of the unique technologies and data mastery provided by zLinks' parent company, Zitgist. What is the value of zLinks links? ---------------------------------- The Internet and the Web first showed the power of linked and networked documents. The interlinked links provided by zLinks takes this understanding to a new level: the freeing and linking of all data objects and concepts with related information. We have seen a bit of this trend in the past few years with "mashups" that are able to, for example, plot geographic information from one source onto a different map source, or time-related information on calendars or timelines. But these first baby steps required specific coding to make data from two different sources relate. zLinks now offers a single facility for exposing data linkages everywhere and in any form. These linkages are a floodgate about ready to open. The value is that related data will find itself and find its relationships by virtue of its linked character and quality. The added value to standard Web users is limitless. Is there anything I should do in advance of installation? --------------------------------------------------------- No, there is nothing you need to do in advance. It is useful to already have a personal URI, FOAF file or OpenID, but those can also be obtained after initial installation; see this other link. Where do I find the zLinks download? ------------------------------------ The current zLinks download is always available directly from the WordPress download site at: http://wordpress.org/extend/plugins/zlinks/. Where and how do I upgrade my zLinks plug-in? --------------------------------------------- The most recent version and upgrade instructions may also be found from the same WordPress distribution site. How do I install the plug-in? ----------------------------- 1. Upload the folder`zitgist_browser_linker` to the `/wp-content/plugins/` directory 2. Activate the plugin through the 'Plugins' menu in WordPress Then you are done. All links within your blog posts and comments will have now an icon displayed to the right of all links that, when the mouse passes over, causes a popup dialog to appear with the linked data information. Does zLinks require cURL? ------------------------- Yes, zLinks requires the cURL utility (see http://en.wikipedia.org/wiki/CURL). Fortunately, this utility is a standard inclusion with PHP and virtually all users should experience no issues. If it does pose a problem, the link above will lead to further information to fix the problem. Where do I find configuration settings? --------------------------------------- You must initially set up zLinks before you can begin entering annotations. Like other zLinks configurations, you make these changes within the Options ? zLinks menu links within your WordPress Administration panel (see http://codex.wordpress.org/Administration_Panels). All configuration options are set via radio buttons and simple fill-in text boxes. How do I set up my author identification? ----------------------------------------- You must set your author identity prior to being able to share your annotations publicly on the Semantic Web. This identifier is used to link the annotations you wrote with the URL you annotated. You may select from three options to set your identity: 1. ( ) Use the generic WordPress ID number: http://blogname.com/wp-content/plugins/zlinks/user/$userid 2. (x) Reuse an existing identifier (the URI describing you): [enter URI] 3. ( ) Use a new identifier at a later time: http://blogname.com/wp-content/plugins/zlinks/user/$userid; link it to this new identifier once obtained: [enter URI] If you don't have any existing URI and don't plan to get one, you can select option #1. In that case, your generic $userid is automatically chosen from your internal WordPress settings. This is usually a number ID and its display can not be altered. This is the default fallback case. However, on the Semantic Web, some people already have an identifier for themselves via an OpenID or a URI they own pointing to, say, a FOAF file. This is generally the best case because the identifier is reusable for many settings and purposes and other users see the name you want to display as the annotator. If you already have one, use option #2, then fill in the text field with the identifier URI. If you don't have one, but want to use an identifier URI, you can get one prior to proceeding further with your zLinks configuration. For example, you could obtain for yourself a URI (http://dig.csail.mit.edu/breadcrumbs/node/71) (which you then could use or not for a FOAF file and OpenID; see http://en.wikipedia.org/wiki/OpenID). Once you have your identifier URI then proceed with option #2. However if you plan to use a URI identifier, but don't want to go through the effort immediately, then chose option #3. This option starts by using the default WP $userid, but enables you to later update to a new identifier URI. Option #3 maintains the connection between older annotations using the $userid with your new user identifier. You fill in the text field at a later date after you have set up that new identifier. For all options, your user identifier is found at http://blogname.com/wp-content/plugins/zlinks/user/$userid, and is available to both browsers and as RDF. What else do I need to do to make my annotations public? -------------------------------------------------------- Part of enabling your annotations to be public is notifying a service, Ping the Semantic Web in the case of zLinks, that the annotation is available and updated. While the software install takes care of most parts of this requirement, you also need to tell your WordPress installation that is OK to notify the service. You do this by modifying the robots.txt file found in your WordPress root directory (most often called public_html). You need to modify that file by adding a # and a space before the line that reads Disallow: /wp-content/, so that it now becomes: # Disallow: /wp-content/ That is all that must be done. Likely future versions of zLinks may change this arrangement. And, should you have any questions about this requirement, contact your hosting provider. How do I keep annotations private? ---------------------------------- You may keep your annotations private or share them publicly with others on the Semantic Web. When public, whenever another person links to the same URL you have annotated (say, the URL http://example.com) and also has the zLinks plug-in installed, then readers of that reference blog will also now see the annotations you wrote for that URL. By disabling this option in the configuration dialog under Options in your WordPress Admininstrative panel, your annotations will only be visible from your blog and will remain private internally to the blog and its authors. How do I interpret the information in the zLinks popup? ------------------------------------------------------- When you mouse over the small icon at the right of a link, zLinks launches its data link analysis. You will first get an alert that the system is working, retrieving all of the necessary background link information. You will then get a popup showing the results. The popup results are presented in up to four sections. The top section contains some general zLinks links (to this FAQ, for example!). The second section presents links to either the standard Web page or the semantic Web page (resolved) for the initiating link. The choice of this link depends on the content negotiation dictated by the starting URI in the embedded blog link. Additionally, there may also be some actions in this section related to certain types of URis (such as those with a book or product reference on Amazon, for example). Often, these additional actions and links are coded by a unique site icon. The third section presents any annotations, if present. The last and bottom section presents a more disaggregate view of related resources (data objects) with each link representing a unique "triple" drawn from the contributing information resources enriching the link. This listing can get quite long, and is therefore also keyed by icon to indicate the particular kind of resource that each triple link represents (person, document, subject, music, etc; see further below). Clicking on one of these links takes you to a Zitgist Linked Data Server (ZLDS) with its results presented through the Zitgist Browser, where various views and data formats are displayed (again, based on data type), with still further links for additional discovery. These Zitgist views can themselves be quite rich with maps, timelines, photos, structured data, etc. Here is where the data discovery part is really fun! What is a 'backlink' and how do I recognize one? ------------------------------------------------ An incoming reference (or "backlink") is a external link pointing to your content. A 'backlink' is akin to being the object in a subject - predicate - object triple. All incoming references or backlinks are shown in the first column of the zLinks popup as a twisted arrow icon, or little back arrow. I see some detailed information in a 'backlink' tooltip. What does this information mean? ----------------------------------------------------------------------------------------- When you mouseover an incoming reference ("backlink") icon, the tooltip shows a message similar to: Incoming reference has predicate: link_to Remember, an incoming reference is based on an external object referencing your current entry with a form similar to something like: Where the form corresponds to the standard triple of . (The predicate is called a property in RDF, but it is the same thing.) Depending on the backlink (that is, the incoming reference) the predicate may be any of the relationships from a source. Common ones are linked_to, homepage, see_also, sameAs, and so forth. These variations can not be enumerated in advance because the actual predicate relationship name in zLinks is based on the nature of the source triple. As you become familiar with the nature of these data relationships, inspection of these 'backlinked' tooltips becomes even more valuable. OK, so what other common icons might I see in zLinks and what do they mean? --------------------------------------------------------------------------- There are a few common application icons you will see in zLinks (these are separate from the resource type icons; see below). Here are these icons and their explanations: Standard zLinks link icon standard zLinks icon that calls up the links popup zLinks link with annotation a zLinks link that includes annotation(s) working icon icon indicating zLinks is currently working . . . . Annotation popup icon Annotation popup icon (authors only; click to invoke) annotation indicator icon icon indicator for annotation edit icon edit an existing annotation (authors only; click to invoke) delete icon delete an existing annotation (authors only; click to invoke) backlink icon icon indicating an incoming URI reference ("backlink") Web page icon icon for a standard Web page link close icon Close dialog icon How do I annotate a link? ------------------------- To make a link annotation, you first must be logged in as an author of the blog (via having accessed the Administration panel). As a logged in author, you can then single-click on the zLinks icon, which will then bring up the separate Annotation popup. You simply need to add information in the text box to create your specific annotation. Note you can do this multiple times with multiple, separate annotations, or edit or modify existing ones. When you are completed with your entry, click the Save button to save your entry to the database. If you click off of the Annotation popup without first saving with the Save button, the dialog will close and nothing will be changed. However, if you return to this dialog in while the session remains active, you will see your previous unsaved changes. Note each time you create or delete a new annotation, zLinks pings PTSW (http://pingthesemanticweb.com) to update your listing if you have made it public (see above). How do I annotate my entire blog entry? --------------------------------------- You may provide an overall annotation relating to a specific blog post in its entirety (including, as examples, categories or tags) by annotating the link associated with the post title. How do I edit or modify an annotation? -------------------------------------- Simply bring up the Annotator for that link and click on the edit icon for the specific annotation you wish to change. You will then get the text box to edit your entry. When you are done, click the Save button to update the entry and save it to the database. To close the dialog, click outside of the popup. How do I delete an annotation? ------------------------------ Simply bring up the annotator for that link and click on the delete icon for the specific annotation you wish to delete. The entry will be removed from the database. Can I provide more than one annotation per link? ------------------------------------------------ Yes, you may provide as many annotation items per link as you wish. How do I use annotations for other purposes? -------------------------------------------- Annotations are also separately available as resources at this location: http://blogname.com/wp-content/plugins/zlinks/annotations. Annotations can be referenced as rdf+xml, turtle, or rdf+n3 (application or text). In addition, the annotations can be obtained in their entirety or by individual post. The URIs are properly handled so that the information is available to both browsers and as RDF. Can I include a link reference in an annotation? ------------------------------------------------ Yes. How long can an annotation be? ------------------------------ At present, there is no limit. Also you can add multiple annotations per link as separate entries. I occasionally see some long load times for the popup with the working icon. Why, is it stuck? ---------------------------------------------------------------------------------------------- The zLinks interlinked data is not kept permanently on the Zitgist servers. Each time you access a new zLink, the references are retrieved anew. This is most often not a problem, but can be on occasion if either: 1) the sources of the interlinks are slow; or 2) there are many, many interlinks. The latter is not yet that common, because linked data is still rather young. But it will grow to be a consideration and can crop up now when some of your sources are really "semwebby." We will likely need to change this behavior in the near future, but, for now, you may encounter a linked site that does an awful lot of "thinking" before your get your full results. By the way, if it ever is a problem and you can't wait, simply move on. Just move your mouse! No harm will happen. What are the standard icons provided with zLinks and what do they mean? ----------------------------------------------------------------------- These are the standard icons provided with zLinks and the name of the rdf:type to which they match: amazon icon amazon annotation icon annotation article icon article channel icon channel comment icon comment document icon document entry icon entry feed icon feed group icon group info icon info musicartist icon musicartist musicgroup icon musicgroup note icon note onlineaccount icon onlineaccount organization icon organization person icon person personalprofiledocument icon personalprofiledocument point icon point post icon post project icon project record icon record semanticpage icon semanticpage solomusicartist icon solomusicartist How can I add my own icons to the popup display? ------------------------------------------------ Any data resource link that appears in the lower portion of the popup may have its own associated icon. To do so, create an icon for the type you desire (advised to keep to 16 x 16 maximum), and give it a name with the GIF extension exactly the same as the rdf:type name used to refer to it. Then, place the same-named item.gif in the /imgs/ directory of your zLinks plug-in. You may add as many icons directly related to specific class names as you wish. Examples of the existing icons pre-loaded with zLinks are provided above. How do I submit additional questions or support requests? --------------------------------------------------------- Submit any support requests that are not obvious on the Web site to zlinks-support@zitgist.com. What is the semantic Web? ------------------------- The semantic Web is an evolving extension of the World Wide Web in which web content can be expressed not only in natural language, but also in a format that can be read and used by software agents, thus permitting them to find, share and integrate information more easily. It derives from W3C director Sir Tim Berners-Lee's vision of the Web as a universal medium for data, information, and knowledge exchange. At its core, the semantic web comprises a philosophy, a set of design principles, collaborative working groups, and a variety of enabling technologies. The most compliant versions of this definition are generally referred to in all caps as the Semantic Web, while lower case usage represents a more relaxed version with non-RDF data. What is RDF? ------------ Resource Description Framework (RDF) is a family of World Wide Web Consortium (W3C) specifications originally designed as a metadata model. The RDF model is based upon the idea of making statements about resources in the form of subject - predicate - object expressions, called triples in RDF terminology. The subject denotes the resource, and the predicate denotes traits or aspects of the resource and expresses a relationship between the subject and the object. This mechanism for describing resources is a major component in what is proposed by the W3C's Semantic Web vision in which automated software can store, exchange, and use machine-readable information distributed throughout the web, in turn enabling users to deal with the information with greater efficiency and certainty. With respect to the semantic Web, RDF is also used by a number of reference vocabularies called RDF schema that provide common concepts for relating resources to one another. It is this commonality of reference that enables data to be linked. RDF's simple data model and ability to model disparate, abstract concepts has also led to its increasing use in knowledge management applications unrelated to semantic Web activity. What is linked data? -------------------- Linked data is a term used to describe a recommended best practice for exposing, sharing, and connecting pieces of data on the semantic Web. The practice emphasizes Web access to data using existing Web technologies such as URIs and HTTP. It also emphasizes links between related Web resources. Linked data is by definition in RDF. Why is linked data important? ----------------------------- Linked data breaks the document boundaries of the original Web by enabling information resources about any given object or concept from anywhere on the Web to be combined into more meaningful understandings of that object and its relation to other objects or concepts. Via a common representation (RDF) and common vocabularies (RDF schema) and interoperable tools and understandings, data from any location or provenance can now be combined. This link facility enables the entire Web to be treated as an interoperable knowledge base and creates the ability to learn new emergent knowledge from the combined information. What is Zitgist and what else does it do? ----------------------------------------- Zitgist (pronounced "zeitgeist") (http://www.zitgist.com) is an industry standards-compliant Semantic Web query service. Its goal is to help Web users locate data, information, and knowledge on the Web. Zitgist develops and deploys Web application and data interlinking services that facilitate creation, aggregation, conversion, publication, and exchange of structured data. The company's main platform is the Zitgist Linked Data Server, accessed via the Zitgist Browser and Query Builder. zLinks is the client-side complement to the company's server-side technologies and services. The real work of zLinks comes through its access to the remote and free Zitgist Linked Data Servers. These Zitgist servers are the place where the heavy lifting of relating and finding new relevant information is done. An animated "working" icon appears while these additional related information and links are assembled. To learn more, check this blog post for more information: [Blogs, Wordpress, Zitgist and the Semantic Web](http://fgiasson.com/blog/index.php/2007/09/01/blogs-wordpress-zitgist-and-the-semantic-web/ ""). The popup also has links to further FAQs and information regarding the zLinks tool. Fwordpress/wp-content/plugins/zlinks/.svn/text-base/zlinks.php.svn-baseAID == $post->post_author) { $content = preg_replace( "|(.*)()|Uei", "''.stripslashes('$4$5').''.restrict_zlinks_inclusion_annotations('$4', '$2', \"".$local_path_url."\", \"".$userdata->ID."\").''", $content); } else { $content = preg_replace( "|(.*)()|Uei", "''.stripslashes('$4$5').''.restrict_zlinks_inclusion('$4', '$2', \"".$local_path_url."\").''", $content); } } return $content; } function restrict_zlinks_inclusion_annotations($link_content, $uri, $local_path_url, $user_id) { global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE annotated_resource = '$uri' ORDER BY created"; $annotations = $wpdb->get_results($query); $img = "mini_rdf.gif"; // $alt = " alt=\"zLinks links popup\" title=\"zLinks links popup\" "; if ($annotations) foreach ($annotations as $annotation) { $img = "mini_rdf_annotated.gif"; // $alt = " alt=\"zLinks links popup plus annotations\" title=\"zLinks links popup plus annotations\" "; } if(!stristr($link_content, ""; } return ""; } function restrict_zlinks_inclusion($link_content, $uri, $local_path_url) { global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE annotated_resource = '$uri' ORDER BY created"; $annotations = $wpdb->get_results($query); $img = "mini_rdf.gif"; if(count($annotations) > 0) { foreach ($annotations as $annotation) { $img = "mini_rdf_annotated.gif"; } } if(!stristr($link_content, ""; } return ""; } function zlinks_comment($content) { $link_img_url = get_option('siteurl')."/wp-content/plugins/zlinks/imgs/"; $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; $content = preg_replace( "|([^<>]+)()|Uei", "''.stripslashes('$4$5').'\"\"'", $content); return $content; } function zlinks_register_headers() { $js_url = get_option('siteurl')."/wp-content/plugins/zlinks/js/"; $css_url = get_option('siteurl')."/wp-content/plugins/zlinks/css/"; echo "\n"; echo "\n"; echo ''; echo ''; echo ''; echo ''; echo ''; } function make_abs($rel_uri, $base, $REMOVE_LEADING_DOTS = true) { // check if the base is part of the uri if($base == substr($rel_uri, 0, strlen($base))) { // The "relative URI" already have the "base URI" in it. // so this is not a relative URI but a base URI. return $rel_uri; } // there is a URI protocol prefix, and the base is not part of the "relative uri" // in that case we have two different uris. if(preg_match("'^[^:]+://'", $rel_uri)) { return $rel_uri; } // Else we continue preg_match("'^([^:]+://[^/]+)/'", $base, $m); $base_start = $m[1]; if (preg_match("'^/'", $rel_uri)) { return $base_start . $rel_uri; } $base = preg_replace("{[^/]+$}", '', $base); $base .= $rel_uri; $base = preg_replace("{^[^:]+://[^/]+}", '', $base); $base_array = explode('/', $base); if (count($base_array) and!strlen($base_array[0])) array_shift($base_array); $i = 1; while ($i < count($base_array)) { if ($base_array[$i - 1] == ".") { array_splice($base_array, $i - 1, 1); if ($i > 1) $i--; } elseif ($base_array[$i] == ".." and $base_array[$i - 1]!= "..") { array_splice($base_array, $i - 1, 2); if ($i > 1) { $i--; if ($i == count($base_array)) array_push($base_array, ""); } } else { $i++; } } if (count($base_array) and $base_array[-1] == ".") $base_array[-1] = ""; if ($REMOVE_LEADING_DOTS) { while (count($base_array) and preg_match("/^\.\.?$/", $base_array[0])) { array_shift($base_array); } } return($base_start . '/' . implode("/", $base_array)); } function zlinks_uninstall() { global $wpdb; global $userdata; $table_name = $wpdb->prefix . "zlinks_annotations"; $sql = "DROP TABLE " . $table_name; // require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); $wpdb->query($sql); } function zlinks_install() { global $wpdb; global $userdata; $table_name = $wpdb->prefix . "zlinks_annotations"; // if($wpdb->get_var("show tables like '$table_name'") != $table_name) { $sql = "CREATE TABLE " . $table_name . " ( id int NOT NULL IDENTITY, partial_uri varchar NOT NULL, author_id int NOT NULL, body varchar NOT NULL, annotated_resource varchar NOT NULL, created VARCHAR NOT NULL, PRIMARY KEY (id) );"; require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); dbDelta($sql); update_option("zlinks_option_uri_".$userdata->ID, "default"); update_option("zlinks_option_uri_existing_".$userdata->ID, ""); update_option("zlinks_option_uri_sameas_".$userdata->ID, ""); update_option("zlinks_option_private_".$userdata->ID, "false"); } add_option("zlinks_db_version", "0.2"); } function zlinks_options_page() { global $userdata; $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; if (isset($_POST['zlinks_options_update'])) { update_option("zlinks_option_uri_".$userdata->ID, stripslashes($_POST["zlinks_option_uri_".$userdata->ID])); update_option("zlinks_option_uri_existing_".$userdata->ID, stripslashes($_POST["zlinks_option_uri_existing_".$userdata->ID])); update_option("zlinks_option_uri_sameas_".$userdata->ID, stripslashes($_POST["zlinks_option_uri_sameas_".$userdata->ID])); update_option("zlinks_option_private_".$userdata->ID, stripslashes($_POST["zlinks_option_private_".$userdata->ID])); } ?>

    zLinks Options

    Set your zLinks configurations options here.

    Private/Public Annotations

    You may keep your annotations private or share them publicly with others. Private annotations remain private internally to the blog and its authors.

    ID) == "false" || get_option("zlinks_option_private_".$userdata->ID) == "") { ?> Share publicly
    ID) == "true") { ?> Keep private

    You can learn more here regarding public and private annotations.

    When you make annotations public, you also must grant access to the Ping the Semantic Web service so that notifications can be posted.
    You do so by modifying your robots.txt file in your root directory to read: # Disallow: /wp-content/ .
    (Note the added pound sign at the beginning of the line followed by a space. You can learn more about this requirement here.

    Author Identifier

    If you share annotations publicly, you may want a more useful author identity. You may select from three options:

    ID) == "default" || get_option("zlinks_option_uri_".$userdata->ID) == "") { ?> Use the generic WordPress ID number: authors/?id=ID; ?>
    ID) == "existing") { ?> Reuse an existing identifier (the URI describing you): ID); ?>" />
    ID) == "same_as") { ?> Use a new identifier at a later time: authors/?id=ID; ?>; link it to this new identifier once obtained: ID); ?>" />

    You can learn more here regarding author identity options.

    Additional Information

    • You can learn more about other zLinks topics from its FAQ, especially with regard to installation, using, or tailoring to your own content.
    • Your annotations are also separately available as resources at this location: annotations.

    9wordpress/wp-content/plugins/zlinks/system/lib_filter.php4 # This code is licensed under a Creative Commons Attribution-ShareAlike 2.5 License # http://creativecommons.org/licenses/by-sa/2.5/ # # Thanks to Jang Kim for adding support for single quoted attributes # $filter = new lib_filter(); class lib_filter { var $tag_counts = array(); # # tags and attributes that are allowed # var $allowed = array( 'a' => array('href', 'target'), 'b' => array(), 'img' => array('src', 'width', 'height', 'alt'), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), 'blockquote' => array(), 'span' => array(), 'em' => array(), 'strong' => array(), 'code' => array(), 'cite' => array(), 'i' => array(), 'big' => array(), 'small' => array(), 'br' => array(), 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'div' => array(), 'table' => array(), 'tr' => array(), 'td' => array(), ); # # tags which should always be self-closing (e.g. "") # var $no_close = array( 'img', 'br', ); # # tags which must always have seperate opening and closing tags (e.g. "") # var $always_close = array( 'a', 'b', 'p', 'ul', 'ol', 'li', 'blockquote', 'span', 'em', 'strong', 'code', 'cite', 'i', 'big', 'small', 'h1', 'h2', 'h3', 'h4', 'div', 'table', 'tr', 'td', ); # # attributes which should be checked for valid protocols # var $protocol_attributes = array( // 'src', // 'href', ); # # protocols which are allowed # var $allowed_protocols = array( 'http', 'ftp', 'mailto', ); # # tags which should be removed if they contain no content (e.g. "" or "") # var $remove_blanks = array( 'a', 'b', 'ul', 'ol', 'li', 'blockquote', 'span', 'em', 'strong', 'code', 'cite', 'i', 'big', 'small', 'h1', 'h2', 'h3', 'h4', 'div', 'table', 'tr', 'td', ); # # should we remove comments? # var $strip_comments = 1; # # should we try and make a b tag out of "b>" # var $always_make_tags = 1; # # entity control options # var $allow_numbered_entities = 1; var $allowed_entities = array( 'amp', 'gt', 'lt', 'quot', ); ############################################################### function go($data){ $this->tag_counts = array(); $data = $this->escape_comments($data); $data = $this->balance_html($data); $data = $this->check_tags($data); $data = $this->process_remove_blanks($data); $data = $this->validate_entities($data); return $data; } ############################################################### function escape_comments($data){ $data = preg_replace("//se", "''", $data); return $data; } ############################################################### function balance_html($data){ if ($this->always_make_tags){ # # try and form html # $data = preg_replace("/>>+/", ">", $data); $data = preg_replace("/<<+/", "<", $data); $data = preg_replace("/^>/", "", $data); $data = preg_replace("/<([^>]*?)(?=<|$)/", "<$1>", $data); $data = preg_replace("/(^|>)([^<]*?)(?=>)/", "$1<$2", $data); }else{ # # escape stray brackets # $data = preg_replace("/<([^>]*?)(?=<|$)/", "<$1", $data); $data = preg_replace("/(^|>)([^<]*?)(?=>)/", "$1$2><", $data); # # the last regexp causes '<>' entities to appear # (we need to do a lookahead assertion so that the last bracket can # be used in the next pass of the regexp) # $data = str_replace('<>', '', $data); } #echo "::".HtmlSpecialChars($data)."
    \n"; return $data; } ############################################################### function check_tags($data){ $data = preg_replace("/<(.*?)>/se", "\$this->process_tag(\$this->StripSingle('\\1'))", $data); foreach(array_keys($this->tag_counts) as $tag){ for($i=0; $i<$this->tag_counts[$tag]; $i++){ $data .= ""; } } return $data; } ############################################################### function process_tag($data){ # ending tags if (preg_match("/^\/([a-z0-9]+)/si", $data, $matches)){ $name = StrToLower($matches[1]); if (in_array($name, array_keys($this->allowed))){ if (!in_array($name, $this->no_close)){ if ($this->tag_counts[$name]){ $this->tag_counts[$name]--; return ''; } } }else{ return ''; } } # starting tags if (preg_match("/^([a-z0-9]+)(.*?)(\/?)$/si", $data, $matches)){ $name = StrToLower($matches[1]); $body = $matches[2]; $ending = $matches[3]; if (in_array($name, array_keys($this->allowed))){ $params = ""; preg_match_all("/([a-z0-9]+)=([\"'])(.*?)\\2/si", $body, $matches_2, PREG_SET_ORDER); # preg_match_all("/([a-z0-9]+)(=)([^\"\s']+)/si", $body, $matches_1, PREG_SET_ORDER); # preg_match_all("/([a-z0-9]+)=([\"'])([^\"']*?)\s*$/si", $body, $matches_3, PREG_SET_ORDER); # no_close)){ $ending = ' /'; } if (in_array($name, $this->always_close)){ $ending = ''; } if (!$ending){ if (isset($this->tag_counts[$name])){ $this->tag_counts[$name]++; }else{ $this->tag_counts[$name] = 1; } } if ($ending){ $ending = ' /'; } return '<'.$name.$params.$ending.'>'; }else{ return ''; } } # comments if (preg_match("/^!--(.*)--$/si", $data)){ if ($this->strip_comments){ return ''; }else{ return '<'.$data.'>'; } } # garbage, ignore it return ''; } ############################################################### function process_param_protocol($data){ $data = $this->decode_entities($data); if (preg_match("/^([^:]+)\:/si", $data, $matches)){ if (!in_array($matches[1], $this->allowed_protocols)){ $data = '#'.substr($data, strlen($matches[1])+1); } } return $data; } ############################################################### function process_remove_blanks($data){ foreach($this->remove_blanks as $tag){ $data = preg_replace("/<{$tag}(\s[^>]*)?><\\/{$tag}>/", '', $data); $data = preg_replace("/<{$tag}(\s[^>]*)?\\/>/", '', $data); } return $data; } ############################################################### function fix_case($data){ $data_notags = Strip_Tags($data); $data_notags = preg_replace('/[^a-zA-Z]/', '', $data_notags); if (strlen($data_notags)<5){ return $data; } if (preg_match('/[a-z]/', $data_notags)){ return $data; } return preg_replace( "/(>|^)([^<]+?)(<|$)/se", "\$this->StripSingle('\\1').". "\$this->fix_case_inner(\$this->StripSingle('\\2')).". "\$this->StripSingle('\\3')", $data ); } function fix_case_inner($data){ $data = StrToLower($data); $data = preg_replace( '/(^|[^\w\s\';,\\-])(\s*)([a-z])/e', "\$this->StripSingle('\\1\\2').StrToUpper(\$this->StripSingle('\\3'))", $data ); return $data; } ############################################################### function validate_entities($data){ # validate entities throughout the string $data = preg_replace( '!&([^&;]*)(?=(;|&|$))!e', "\$this->check_entity(\$this->StripSingle('\\1'), \$this->StripSingle('\\2'))", $data ); # validate quotes outside of tags $data = preg_replace( "/(>|^)([^<]+?)(<|$)/se", "\$this->StripSingle('\\1').". "str_replace('\"', '"', \$this->StripSingle('\\2')).". "\$this->StripSingle('\\3')", $data ); return $data; } function check_entity($preamble, $term){ if ($term != ';'){ return '&'.$preamble; } if ($this->is_valid_entity($preamble)){ return '&'.$preamble; } return '&'.$preamble; } function is_valid_entity($entity){ if (preg_match('!^#([0-9]+)$!i', $entity, $m)){ if ($m[1] > 127){ return 1; } return $this->allow_numbered_entities; } if (in_array($entity, $this->allowed_entities)){ return 1; } return 0; } ############################################################### # # within attributes, we want to convert all hex/dec/url escape sequences into # their raw characters so that we can check we don't get stray quotes/brackets # inside strings # function decode_entities($data){ $data = preg_replace_callback('!(&)#(\d+);?!', array($this, 'decode_dec_entity'), $data); $data = preg_replace_callback('!(&)#x([0-9a-f]+);?!i', array($this, 'decode_hex_entity'), $data); $data = preg_replace_callback('!(%)([0-9a-f]{2});?!i', array($this, 'decode_hex_entity'), $data); $data = $this->validate_entities($data); return $data; } function decode_hex_entity($m){ return $this->decode_num_entity($m[1], hexdec($m[2])); } function decode_dec_entity($m){ return $this->decode_num_entity($m[1], intval($m[2])); } function decode_num_entity($orig_type, $d){ if ($d < 0){ $d = 32; } # space # don't mess with huigh chars if ($d > 127){ if ($orig_type == '%'){ return '%'.dechex($d); } if ($orig_type == '&'){ return "&#$d;"; } } return HtmlSpecialChars(chr($d)); } ############################################################### function StripSingle($data){ return str_replace(array('\\"', "\\0"), array('"', chr(0)), $data); } ############################################################### } ?> ;wordpress/wp-content/plugins/zlinks/system/parseheaders.php 3wordpress/wp-content/plugins/zlinks/system/ptsw.php 7wordpress/wp-content/plugins/zlinks/system/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/plugins/zlinks/system svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 validation.php file 2008-11-20T16:30:38.000000Z 6ae28f45ff7a1d08b39930d0f84549d5 2008-10-28T18:17:06.112729Z 97 paul lib_filter.php file 2008-11-20T16:30:38.000000Z 149fbe5222e8cd930a0b38b1d64995a3 2008-10-28T18:17:06.112729Z 97 paul ptsw.php file 2008-11-20T16:30:38.000000Z 336e7f2323089bfd8ef8c6b964f39c07 2008-10-28T18:17:06.112729Z 97 paul parseheaders.php file 2008-11-20T16:30:38.000000Z bdf89e8781a45b3a193d583fd1d76326 2008-10-28T18:17:06.112729Z 97 paul 6wordpress/wp-content/plugins/zlinks/system/.svn/format8 Qwordpress/wp-content/plugins/zlinks/system/.svn/text-base/lib_filter.php.svn-base4 # This code is licensed under a Creative Commons Attribution-ShareAlike 2.5 License # http://creativecommons.org/licenses/by-sa/2.5/ # # Thanks to Jang Kim for adding support for single quoted attributes # $filter = new lib_filter(); class lib_filter { var $tag_counts = array(); # # tags and attributes that are allowed # var $allowed = array( 'a' => array('href', 'target'), 'b' => array(), 'img' => array('src', 'width', 'height', 'alt'), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), 'blockquote' => array(), 'span' => array(), 'em' => array(), 'strong' => array(), 'code' => array(), 'cite' => array(), 'i' => array(), 'big' => array(), 'small' => array(), 'br' => array(), 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'div' => array(), 'table' => array(), 'tr' => array(), 'td' => array(), ); # # tags which should always be self-closing (e.g. "") # var $no_close = array( 'img', 'br', ); # # tags which must always have seperate opening and closing tags (e.g. "") # var $always_close = array( 'a', 'b', 'p', 'ul', 'ol', 'li', 'blockquote', 'span', 'em', 'strong', 'code', 'cite', 'i', 'big', 'small', 'h1', 'h2', 'h3', 'h4', 'div', 'table', 'tr', 'td', ); # # attributes which should be checked for valid protocols # var $protocol_attributes = array( // 'src', // 'href', ); # # protocols which are allowed # var $allowed_protocols = array( 'http', 'ftp', 'mailto', ); # # tags which should be removed if they contain no content (e.g. "" or "") # var $remove_blanks = array( 'a', 'b', 'ul', 'ol', 'li', 'blockquote', 'span', 'em', 'strong', 'code', 'cite', 'i', 'big', 'small', 'h1', 'h2', 'h3', 'h4', 'div', 'table', 'tr', 'td', ); # # should we remove comments? # var $strip_comments = 1; # # should we try and make a b tag out of "b>" # var $always_make_tags = 1; # # entity control options # var $allow_numbered_entities = 1; var $allowed_entities = array( 'amp', 'gt', 'lt', 'quot', ); ############################################################### function go($data){ $this->tag_counts = array(); $data = $this->escape_comments($data); $data = $this->balance_html($data); $data = $this->check_tags($data); $data = $this->process_remove_blanks($data); $data = $this->validate_entities($data); return $data; } ############################################################### function escape_comments($data){ $data = preg_replace("//se", "''", $data); return $data; } ############################################################### function balance_html($data){ if ($this->always_make_tags){ # # try and form html # $data = preg_replace("/>>+/", ">", $data); $data = preg_replace("/<<+/", "<", $data); $data = preg_replace("/^>/", "", $data); $data = preg_replace("/<([^>]*?)(?=<|$)/", "<$1>", $data); $data = preg_replace("/(^|>)([^<]*?)(?=>)/", "$1<$2", $data); }else{ # # escape stray brackets # $data = preg_replace("/<([^>]*?)(?=<|$)/", "<$1", $data); $data = preg_replace("/(^|>)([^<]*?)(?=>)/", "$1$2><", $data); # # the last regexp causes '<>' entities to appear # (we need to do a lookahead assertion so that the last bracket can # be used in the next pass of the regexp) # $data = str_replace('<>', '', $data); } #echo "::".HtmlSpecialChars($data)."
    \n"; return $data; } ############################################################### function check_tags($data){ $data = preg_replace("/<(.*?)>/se", "\$this->process_tag(\$this->StripSingle('\\1'))", $data); foreach(array_keys($this->tag_counts) as $tag){ for($i=0; $i<$this->tag_counts[$tag]; $i++){ $data .= ""; } } return $data; } ############################################################### function process_tag($data){ # ending tags if (preg_match("/^\/([a-z0-9]+)/si", $data, $matches)){ $name = StrToLower($matches[1]); if (in_array($name, array_keys($this->allowed))){ if (!in_array($name, $this->no_close)){ if ($this->tag_counts[$name]){ $this->tag_counts[$name]--; return ''; } } }else{ return ''; } } # starting tags if (preg_match("/^([a-z0-9]+)(.*?)(\/?)$/si", $data, $matches)){ $name = StrToLower($matches[1]); $body = $matches[2]; $ending = $matches[3]; if (in_array($name, array_keys($this->allowed))){ $params = ""; preg_match_all("/([a-z0-9]+)=([\"'])(.*?)\\2/si", $body, $matches_2, PREG_SET_ORDER); # preg_match_all("/([a-z0-9]+)(=)([^\"\s']+)/si", $body, $matches_1, PREG_SET_ORDER); # preg_match_all("/([a-z0-9]+)=([\"'])([^\"']*?)\s*$/si", $body, $matches_3, PREG_SET_ORDER); # no_close)){ $ending = ' /'; } if (in_array($name, $this->always_close)){ $ending = ''; } if (!$ending){ if (isset($this->tag_counts[$name])){ $this->tag_counts[$name]++; }else{ $this->tag_counts[$name] = 1; } } if ($ending){ $ending = ' /'; } return '<'.$name.$params.$ending.'>'; }else{ return ''; } } # comments if (preg_match("/^!--(.*)--$/si", $data)){ if ($this->strip_comments){ return ''; }else{ return '<'.$data.'>'; } } # garbage, ignore it return ''; } ############################################################### function process_param_protocol($data){ $data = $this->decode_entities($data); if (preg_match("/^([^:]+)\:/si", $data, $matches)){ if (!in_array($matches[1], $this->allowed_protocols)){ $data = '#'.substr($data, strlen($matches[1])+1); } } return $data; } ############################################################### function process_remove_blanks($data){ foreach($this->remove_blanks as $tag){ $data = preg_replace("/<{$tag}(\s[^>]*)?><\\/{$tag}>/", '', $data); $data = preg_replace("/<{$tag}(\s[^>]*)?\\/>/", '', $data); } return $data; } ############################################################### function fix_case($data){ $data_notags = Strip_Tags($data); $data_notags = preg_replace('/[^a-zA-Z]/', '', $data_notags); if (strlen($data_notags)<5){ return $data; } if (preg_match('/[a-z]/', $data_notags)){ return $data; } return preg_replace( "/(>|^)([^<]+?)(<|$)/se", "\$this->StripSingle('\\1').". "\$this->fix_case_inner(\$this->StripSingle('\\2')).". "\$this->StripSingle('\\3')", $data ); } function fix_case_inner($data){ $data = StrToLower($data); $data = preg_replace( '/(^|[^\w\s\';,\\-])(\s*)([a-z])/e', "\$this->StripSingle('\\1\\2').StrToUpper(\$this->StripSingle('\\3'))", $data ); return $data; } ############################################################### function validate_entities($data){ # validate entities throughout the string $data = preg_replace( '!&([^&;]*)(?=(;|&|$))!e', "\$this->check_entity(\$this->StripSingle('\\1'), \$this->StripSingle('\\2'))", $data ); # validate quotes outside of tags $data = preg_replace( "/(>|^)([^<]+?)(<|$)/se", "\$this->StripSingle('\\1').". "str_replace('\"', '"', \$this->StripSingle('\\2')).". "\$this->StripSingle('\\3')", $data ); return $data; } function check_entity($preamble, $term){ if ($term != ';'){ return '&'.$preamble; } if ($this->is_valid_entity($preamble)){ return '&'.$preamble; } return '&'.$preamble; } function is_valid_entity($entity){ if (preg_match('!^#([0-9]+)$!i', $entity, $m)){ if ($m[1] > 127){ return 1; } return $this->allow_numbered_entities; } if (in_array($entity, $this->allowed_entities)){ return 1; } return 0; } ############################################################### # # within attributes, we want to convert all hex/dec/url escape sequences into # their raw characters so that we can check we don't get stray quotes/brackets # inside strings # function decode_entities($data){ $data = preg_replace_callback('!(&)#(\d+);?!', array($this, 'decode_dec_entity'), $data); $data = preg_replace_callback('!(&)#x([0-9a-f]+);?!i', array($this, 'decode_hex_entity'), $data); $data = preg_replace_callback('!(%)([0-9a-f]{2});?!i', array($this, 'decode_hex_entity'), $data); $data = $this->validate_entities($data); return $data; } function decode_hex_entity($m){ return $this->decode_num_entity($m[1], hexdec($m[2])); } function decode_dec_entity($m){ return $this->decode_num_entity($m[1], intval($m[2])); } function decode_num_entity($orig_type, $d){ if ($d < 0){ $d = 32; } # space # don't mess with huigh chars if ($d > 127){ if ($orig_type == '%'){ return '%'.dechex($d); } if ($orig_type == '&'){ return "&#$d;"; } } return HtmlSpecialChars(chr($d)); } ############################################################### function StripSingle($data){ return str_replace(array('\\"', "\\0"), array('"', chr(0)), $data); } ############################################################### } ?> Swordpress/wp-content/plugins/zlinks/system/.svn/text-base/parseheaders.php.svn-base Kwordpress/wp-content/plugins/zlinks/system/.svn/text-base/ptsw.php.svn-base Qwordpress/wp-content/plugins/zlinks/system/.svn/text-base/validation.php.svn-base 9wordpress/wp-content/plugins/zlinks/system/validation.php .wordpress/wp-content/plugins/zlinks/zlinks.phpAID == $post->post_author) { $content = preg_replace( "|(.*)()|Uei", "''.stripslashes('$4$5').''.restrict_zlinks_inclusion_annotations('$4', '$2', \"".$local_path_url."\", \"".$userdata->ID."\").''", $content); } else { $content = preg_replace( "|(.*)()|Uei", "''.stripslashes('$4$5').''.restrict_zlinks_inclusion('$4', '$2', \"".$local_path_url."\").''", $content); } } return $content; } function restrict_zlinks_inclusion_annotations($link_content, $uri, $local_path_url, $user_id) { global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE annotated_resource = '$uri' ORDER BY created"; $annotations = $wpdb->get_results($query); $img = "mini_rdf.gif"; // $alt = " alt=\"zLinks links popup\" title=\"zLinks links popup\" "; if ($annotations) foreach ($annotations as $annotation) { $img = "mini_rdf_annotated.gif"; // $alt = " alt=\"zLinks links popup plus annotations\" title=\"zLinks links popup plus annotations\" "; } if(!stristr($link_content, ""; } return ""; } function restrict_zlinks_inclusion($link_content, $uri, $local_path_url) { global $wpdb; $table_name = $wpdb->prefix . "zlinks_annotations"; $query = "SELECT * FROM " . $table_name . " WHERE annotated_resource = '$uri' ORDER BY created"; $annotations = $wpdb->get_results($query); $img = "mini_rdf.gif"; if(count($annotations) > 0) { foreach ($annotations as $annotation) { $img = "mini_rdf_annotated.gif"; } } if(!stristr($link_content, ""; } return ""; } function zlinks_comment($content) { $link_img_url = get_option('siteurl')."/wp-content/plugins/zlinks/imgs/"; $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; $content = preg_replace( "|([^<>]+)()|Uei", "''.stripslashes('$4$5').'\"\"'", $content); return $content; } function zlinks_register_headers() { $js_url = get_option('siteurl')."/wp-content/plugins/zlinks/js/"; $css_url = get_option('siteurl')."/wp-content/plugins/zlinks/css/"; echo "\n"; echo "\n"; echo ''; echo ''; echo ''; echo ''; echo ''; } function make_abs($rel_uri, $base, $REMOVE_LEADING_DOTS = true) { // check if the base is part of the uri if($base == substr($rel_uri, 0, strlen($base))) { // The "relative URI" already have the "base URI" in it. // so this is not a relative URI but a base URI. return $rel_uri; } // there is a URI protocol prefix, and the base is not part of the "relative uri" // in that case we have two different uris. if(preg_match("'^[^:]+://'", $rel_uri)) { return $rel_uri; } // Else we continue preg_match("'^([^:]+://[^/]+)/'", $base, $m); $base_start = $m[1]; if (preg_match("'^/'", $rel_uri)) { return $base_start . $rel_uri; } $base = preg_replace("{[^/]+$}", '', $base); $base .= $rel_uri; $base = preg_replace("{^[^:]+://[^/]+}", '', $base); $base_array = explode('/', $base); if (count($base_array) and!strlen($base_array[0])) array_shift($base_array); $i = 1; while ($i < count($base_array)) { if ($base_array[$i - 1] == ".") { array_splice($base_array, $i - 1, 1); if ($i > 1) $i--; } elseif ($base_array[$i] == ".." and $base_array[$i - 1]!= "..") { array_splice($base_array, $i - 1, 2); if ($i > 1) { $i--; if ($i == count($base_array)) array_push($base_array, ""); } } else { $i++; } } if (count($base_array) and $base_array[-1] == ".") $base_array[-1] = ""; if ($REMOVE_LEADING_DOTS) { while (count($base_array) and preg_match("/^\.\.?$/", $base_array[0])) { array_shift($base_array); } } return($base_start . '/' . implode("/", $base_array)); } function zlinks_uninstall() { global $wpdb; global $userdata; $table_name = $wpdb->prefix . "zlinks_annotations"; $sql = "DROP TABLE " . $table_name; // require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); $wpdb->query($sql); } function zlinks_install() { global $wpdb; global $userdata; $table_name = $wpdb->prefix . "zlinks_annotations"; // if($wpdb->get_var("show tables like '$table_name'") != $table_name) { $sql = "CREATE TABLE " . $table_name . " ( id int NOT NULL IDENTITY, partial_uri varchar NOT NULL, author_id int NOT NULL, body varchar NOT NULL, annotated_resource varchar NOT NULL, created VARCHAR NOT NULL, PRIMARY KEY (id) );"; require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); dbDelta($sql); update_option("zlinks_option_uri_".$userdata->ID, "default"); update_option("zlinks_option_uri_existing_".$userdata->ID, ""); update_option("zlinks_option_uri_sameas_".$userdata->ID, ""); update_option("zlinks_option_private_".$userdata->ID, "false"); } add_option("zlinks_db_version", "0.2"); } function zlinks_options_page() { global $userdata; $local_path_url = get_option('siteurl')."/wp-content/plugins/zlinks/"; if (isset($_POST['zlinks_options_update'])) { update_option("zlinks_option_uri_".$userdata->ID, stripslashes($_POST["zlinks_option_uri_".$userdata->ID])); update_option("zlinks_option_uri_existing_".$userdata->ID, stripslashes($_POST["zlinks_option_uri_existing_".$userdata->ID])); update_option("zlinks_option_uri_sameas_".$userdata->ID, stripslashes($_POST["zlinks_option_uri_sameas_".$userdata->ID])); update_option("zlinks_option_private_".$userdata->ID, stripslashes($_POST["zlinks_option_private_".$userdata->ID])); } ?>

    zLinks Options

    Set your zLinks configurations options here.

    Private/Public Annotations

    You may keep your annotations private or share them publicly with others. Private annotations remain private internally to the blog and its authors.

    ID) == "false" || get_option("zlinks_option_private_".$userdata->ID) == "") { ?> Share publicly
    ID) == "true") { ?> Keep private

    You can learn more here regarding public and private annotations.

    When you make annotations public, you also must grant access to the Ping the Semantic Web service so that notifications can be posted.
    You do so by modifying your robots.txt file in your root directory to read: # Disallow: /wp-content/ .
    (Note the added pound sign at the beginning of the line followed by a space. You can learn more about this requirement here.

    Author Identifier

    If you share annotations publicly, you may want a more useful author identity. You may select from three options:

    ID) == "default" || get_option("zlinks_option_uri_".$userdata->ID) == "") { ?> Use the generic WordPress ID number: authors/?id=ID; ?>
    ID) == "existing") { ?> Reuse an existing identifier (the URI describing you): ID); ?>" />
    ID) == "same_as") { ?> Use a new identifier at a later time: authors/?id=ID; ?>; link it to this new identifier once obtained: ID); ?>" />

    You can learn more here regarding author identity options.

    Additional Information

    • You can learn more about other zLinks topics from its FAQ, especially with regard to installation, using, or tailoring to your own content.
    • Your annotations are also separately available as resources at this location: annotations.

    !wordpress/wp-content/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 plugins dir themes dir uploads dir index.php file 2008-11-20T16:30:43.000000Z 96137494913a1f730a592e8932af394e 2008-10-28T18:17:06.112729Z 97 paul wordpress/wp-content/.svn/format8 6wordpress/wp-content/.svn/text-base/index.php.svn-base0wordpress/wp-content/themes/classic/comments.php post_password) && $_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?>

    ">»

    1. @

    RSS feed for comments on this post.')); ?> URL'); ?>

    You must be logged in to post a comment.

    Logged in as . Logout »

    ID); ?>

    6wordpress/wp-content/themes/classic/comments-popup.php <?php echo get_option('blogname'); ?> - <?php echo sprintf(__("Comments on %s"), the_title('','',false)); ?>

    RSS feed for comments on this post."); ?>

    ping_status) { ?>

    URL to TrackBack this entry is:"); ?>

    post_password) && $_COOKIE['wp-postpass_'. COOKIEHASH] != $commentstatus->post_password) { // and it doesn't match the cookie echo(get_the_password_form()); } else { ?>
    1. @

    comment_status) { ?>

    HTML allowed:"); ?>

    Logged in as . Logout »

    " />


    " />

    ID); ?>

    Powered by Wordpress"),__("Powered by WordPress, state-of-the-art semantic personal publishing platform.")); ?>

    .wordpress/wp-content/themes/classic/footer.php

    WordPress"), __("Powered by WordPress, state-of-the-art semantic personal publishing platform.")); ?>

    1wordpress/wp-content/themes/classic/functions.php '
  • ', 'after_widget' => '
  • ', 'before_title' => '', 'after_title' => '', )); ?> .wordpress/wp-content/themes/classic/header.php > <?php bloginfo('name'); ?><?php wp_title(); ?>

    -wordpress/wp-content/themes/classic/index.php ',''); ?>

    @

    2wordpress/wp-content/themes/classic/screenshot.png ܉PNG  IHDR,ExgAMA7tEXtSoftwareAdobe ImageReadyqe<`PLTE̮ȼЮ؝dacЭߣ򦠥~urxzwD IDATx]e J4_¤}w{;('Eq@xKK}:=R|.לseͻG`udoοR옹^tYNp4σp~?,-gKAQPOP@G-2. m׻$j:k7dzݣF٩Un?XGydݥ{Z&qa!Xݭ"3q{$w [sy-/G7;G[De5d/iO!Ҟ8]),UF;k^o "X.ݕ0wZD^=K>VW_w*ଗgCp޿k$ 6lO]%%ڵ@lQR(1U=] +z~sRG&>u/eԷC varHlg=)3^@w_Z?i?Kȫd QB$_5}ϵ]s!.ġha{;xσx+`1*[`!U\)Ԡv'QEG\E1]VewDZIR\HpoH.t\=5DꪫƏ4׫kS@uFXF2oX r+T]5e;]wnpp_#(b7|!XNw"V=R{GT `5&WRI0313/U)~X=j"!omaM6DR6j k8l6 AR, mUEThGzE 4ք,uW+hZ>BUO1Od.sҢ!%!q<M_\6MTـ~^PZJ&d_8ʖ8ELjaX!W߭ډN T<fٯzfqك-t3%]@>GA]IRLL,FDT'GB+@crAcggOvuuuuJRѱ+ER>j\D ):||< vըZ!+.9S#8'[6X>Xf929W[LQ5X?Xm4!6+eZ;qR! ՐI}@~}qnIF߾Ux&Y" &lMZڅJQ:<|2:(4vK0@%1Q| )XSHl!RJ z?J''%4)`c $< މ#zn`XXXXF׳,60"&T{6[B ^ %.@Qh7ۇo=I yو/_(>>@oR Q1#2}}[O`lDV\G0&E5W xzpGIꬅϋ[ꅃ)0*l!|RBoKS"zsY-X'q;TCP6eAJ.uOqJicu0" NV׻*ۚK aΤd H:: ߢBq6vtL4/.iR1)[ C5 FSѬ/+~Gq8 }݊}ow*EL`$K-ӗf4gר;8a@e%p$eDa\& 2,lHd12srzE@UDBD7,3&ifEIny^0ufCdl%Lζ\䌳V1}Igрc~$AaXKd9yo"#gBii/̷u^0]԰`k>B,W:2 Cd.Rf EA!ofRMoL4xC۬Y_ [MYmˊcg6yxU3ի=nև_kiHi?]ï]w*-mL[nS[m -52ZPb Aʏ+0Gn樶'D,}-z6?T7 ?:.z7ڕ5< T9mXl]ᴌ,t 6Cs.Os/Ow0x;3Ϯ |-ŀ-Oٔ22{E}, V_eUqs{D[0晱*:6~+QV_/ǫ_xgC?-65ceOnச:$hi]S= F4ܜW'W}ג0QiŲ fŇ`:H `@ ’--k|#gQّ/Lq6JGиC\͵=4Bɜ%Bq~~YSwX mFȦڝ 54-i7/vg͢ _eR(A,&]/YSLlOYsGr8х̪&:ry: b#iZbϪv9Bt&z K7y;,l7*czIL(K([-14t$NQD:GCDR?8;-~_q_w-[m.nTrjlrp>8v4:OWHִ7v/vQ>z3~wWJ}].Wo+z, X͍dJ lؖ15v1׼µnK5Xŷ#mGV&x뜉=TmEi|h%ؕFchgIf\ P5G^T_⹸o)Ymk?ӸYۙu2y|6lX:h`ÅN'ZDg7eaXpBV: w|G`GDid*Ք '@rìD `fI6: KS$ /$Cm鏻k)isO@ה<&CSv3UR^@+d`} c>^t90N"FOOuQJ2m:;GhĒ)LԸI`=900k;$|Wj+B23QR`=QeMۋո4iWqw+jO<U#ڑ֧|d.o-Va+%,jr1_Ce^J"X׶|>ؼ*.[A]um9U sSUA7_~#*u@]7oNK5s T.NΡdp|&9ֽ'O|/hazY&Fwk'z=e.$Y|,]Ss$)_@ێDEdl?5B*Bjԏ */+` md[4^a zҧ:+rgF2O~ XOthFԢ6eP<;`6ƬA̬KpmcYx 5:h=\۶oDO^!{}VCP~<"eا:ܟG$ۗ[ht_f;V) 05%UZBu']N"+gOe1]I*ds%]ZsG5Ffj d,.RM44e~uh9H1@Bb"kUk-%)j"Tx rF.GAмj Cxz&Y mžĴ'Fp o}mZ*s |Ln`kgG)$یd4Sjtzr[{[}^F 8dD[b[$MZ2;mmX ^m2O |U9SGyMG7zFOUIeXʧO/|vbh= UXS#0B x駵g뷘<1]۫R1l?6v'k[C`_}k"Ӆ t]$ c65iP<$H2+?n8iy[pzZ5=q e8ӪOx%Ӱ,;Xg5OdY*gэD\r@1/nͪ1h7ltZ |Z kPMz:M.;v N<~ 9 'c?E dqѶ\c6d`}<+{D5.}@1/1RAeĤ,gx]ӌIz&Sǁ;C]d XyV&}<^}юG fl=Gg%`Lc 47Jivrerd.;Lf7m4L`9(묲?zI1{q{mb^-zq;:9`^_ƿ,d~YV).>`CKݳMx#P^hOȏ5A #5㻒Emq+[ (f?,?6 fvg#/6{zEVT|M9V: =,ˣ ::x+5csxA^/u"yEhLr&Ke,bВqA brj09]-`:zm86@U3A*X2KP=cdqu)/!̸jKsq[m 'Ai!cIͯl&rOVt|b҇zhBKMOJN!4)jOFLQF&73ƢB,FNpST{t 53 34'XU2jv&V3n y8 EQ:9H:+uX?ܤj [ qJQvtSd$fOSTvXݫfXj{3, %LRH"MN)ctQ0BZcFR|ۺ3xy;i+GQڧ^ Q,__XZjXdGm4~aHV*1 Y j=e^)TF|jC?W^11Ňn{ޏ^hԻ|3˸W<`e8vsX%?iݓtC37[ϰ&RwQV76 ާvЧJ ~W KWX2`} V!EX9Ŭ*tR_Kj`,{d~}/#jhb OV3$FMf,#G!ٯVC;DVaH <:'*vLKR\6緈Xjw/hbf02_\GUD`]V3cH,dmߖ}vuHJlGI]@/OkW$ϫӏ!pxɤy0VhcAezԈ4Ml9HgĬb!g爍؃ٵ#gτV2&L{1vz Y`qCREhD'&eM4lut'/5`x glTX.8[ V3`605R&|߷b/I$_uR\JyHm:/kA` w, MtNFC9S5W$;X/c +Y!@!HrIEG"! P>?&W͉6ծlsgSc۪ҷM0<\B%9@< -wordpress/wp-content/themes/classic/style.css/* Theme Name: WordPress Classic Theme URI: http://wordpress.org/ Description: The original WordPress theme that graced versions 1.2.x and prior. Version: 1.5 Author: Dave Shea Default WordPress by Dave Shea || http://mezzoblue.com Modifications by Matthew Mullenweg || http://photomatt.net This is just a basic layout, with only the bare minimum defined. Please tweak this and make it your own. :) */ a { color: #675; } a img { border: none; } a:visited { color: #342; } a:hover { color: #9a8; } acronym, abbr { border-bottom: 1px dashed #333; } acronym, abbr, span.caps { font-size: 90%; letter-spacing: .07em; } acronym, abbr { cursor: help; } blockquote { border-left: 5px solid #ccc; margin-left: 1.5em; padding-left: 5px; } body { background: #fff; border: solid 2px #565; border-bottom: solid 1px #565; border-top: solid 3px #565; color: #000; font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; margin: 0; padding: 0; } cite { font-size: 90%; font-style: normal; } h2 { border-bottom: 1px dotted #ccc; font: 95% "Times New Roman", Times, serif; letter-spacing: 0.2em; margin: 15px 0 2px 0; padding-bottom: 2px; } h3 { border-bottom: dotted 1px #eee; font-family: "Times New Roman", Times, serif; margin-top: 0; } ol#comments li p { font-size: 100%; } p, li, .feedback { font: 90%/175% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; letter-spacing: -1px; } /* classes used by the_meta() */ ul.post-meta { list-style: none; } ul.post-meta span.post-meta-key { font-weight: bold; } .credit { background: #90a090; border-top: double 3px #aba; color: #fff; font-size: 11px; margin: 10px 0 0 0; padding: 3px; text-align: center; } .credit a:link, .credit a:hover { color: #fff; } .feedback { color: #ccc; text-align: right; clear: both; } .meta { font-size: .75em; } .meta li, ul.post-meta li { display: inline; } .meta ul { display: inline; list-style: none; margin: 0; padding: 0; } .meta, .meta a { color: #808080; font-weight: normal; letter-spacing: 0; } .storytitle { margin: 0; } .storytitle a { text-decoration: none; } #commentform #author, #commentform #email, #commentform #url, #commentform textarea { background: #fff; border: 1px solid #333; padding: .2em; } #commentform textarea { width: 100%; } #commentlist li ul { border-left: 1px solid #ddd; font-size: 110%; list-style-type: none; } #content { margin: 30px 13em 0 3em; padding-right: 60px; } #header { background: #90a090; border-bottom: double 3px #aba; border-left: solid 1px #9a9; border-right: solid 1px #565; border-top: solid 1px #9a9; font: italic normal 230% 'Times New Roman', Times, serif; letter-spacing: 0.2em; margin: 0; padding: 15px 10px 15px 60px; } #header a { color: #fff; text-decoration: none; } #header a:hover { text-decoration: underline; } #menu { background: #fff; border-left: 1px dotted #ccc; border-top: solid 3px #e0e6e0; padding: 20px 0 10px 30px; position: absolute; right: 2px; top: 0; width: 11em; } #menu form { margin: 0 0 0 13px; } #menu input#s { width: 80%; background: #eee; border: 1px solid #999; color: #000; } #menu ul { color: #ccc; font-weight: bold; list-style-type: none; margin: 0; padding-left: 3px; text-transform: lowercase; } #menu ul li { font: italic normal 110% 'Times New Roman', Times, serif; letter-spacing: 0.1em; margin-top: 10px; padding-bottom: 2px; /*border-bottom: dotted 1px #ccc;*/ } #menu ul ul { font-variant: normal; font-weight: normal; line-height: 100%; list-style-type: none; margin: 0; padding: 0; text-align: left; } #menu ul ul li { border: 0; font: normal normal 12px/115% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; letter-spacing: 0; margin-top: 0; padding: 0; padding-left: 12px; } #menu ul ul li a { color: #000; text-decoration: none; } #menu ul ul li a:hover { border-bottom: 1px solid #809080; } #menu ul ul ul.children { font-size: 142%; padding-left: 4px; } #wp-calendar { border: 1px solid #ddd; empty-cells: show; font-size: 14px; margin: 0; width: 90%; } #wp-calendar #next a { padding-right: 10px; text-align: right; } #wp-calendar #prev a { padding-left: 10px; text-align: left; } #wp-calendar a { display: block; text-decoration: none; } #wp-calendar a:hover { background: #e0e6e0; color: #333; } #wp-calendar caption { color: #999; font-size: 16px; text-align: left; } #wp-calendar td { color: #ccc; font: normal 12px 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; letter-spacing: normal; padding: 2px 0; text-align: center; } #wp-calendar td.pad:hover { background: #fff; } #wp-calendar td:hover, #wp-calendar #today { background: #eee; color: #bbb; } #wp-calendar th { font-style: normal; text-transform: capitalize; } 0wordpress/wp-content/themes/classic/.svn/entriesD8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/themes/classic svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 sidebar.php file 2008-11-20T16:30:40.000000Z dbea754dcc063eab2a39fdfc84663622 2008-10-28T18:17:06.112729Z 97 paul screenshot.png file 2008-11-20T16:30:40.000000Z 60baf51fc9ae291e896257973cca52db 2008-10-28T18:17:06.112729Z 97 paul has-props footer.php file 2008-11-20T16:30:40.000000Z 5d6e21ec2a30cf8fb1eefa9b3f937f54 2008-10-28T18:17:06.112729Z 97 paul style.css file 2008-11-20T16:30:40.000000Z dafbbb2dba6b98cde3a44dc351ae1c15 2008-10-28T18:17:06.112729Z 97 paul comments.php file 2008-11-20T16:30:40.000000Z 37d9da677f1ea65141c96f9371aee22e 2008-10-28T18:17:06.112729Z 97 paul comments-popup.php file 2008-11-20T16:30:40.000000Z 69f6d170d5418ee39ab666e2a87287cb 2008-10-28T18:17:06.112729Z 97 paul index.php file 2008-11-20T16:30:40.000000Z aef75cd04ec6aca2c1cf917e3087686f 2008-10-28T18:17:06.112729Z 97 paul functions.php file 2008-11-20T16:30:40.000000Z 0c9bdfa8d399c97cf903c1a046f2f192 2008-10-28T18:17:06.112729Z 97 paul header.php file 2008-11-20T16:30:40.000000Z 809a2b809fa01c34ab0e04ce545ba5b4 2008-10-28T18:17:06.112729Z 97 paul /wordpress/wp-content/themes/classic/.svn/format8 Jwordpress/wp-content/themes/classic/.svn/prop-base/screenshot.png.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Hwordpress/wp-content/themes/classic/.svn/text-base/comments.php.svn-base post_password) && $_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?>

    ">»

    1. @

    RSS feed for comments on this post.')); ?> URL'); ?>

    You must be logged in to post a comment.

    Logged in as . Logout »

    ID); ?>

    Nwordpress/wp-content/themes/classic/.svn/text-base/comments-popup.php.svn-base <?php echo get_option('blogname'); ?> - <?php echo sprintf(__("Comments on %s"), the_title('','',false)); ?>

    RSS feed for comments on this post."); ?>

    ping_status) { ?>

    URL to TrackBack this entry is:"); ?>

    post_password) && $_COOKIE['wp-postpass_'. COOKIEHASH] != $commentstatus->post_password) { // and it doesn't match the cookie echo(get_the_password_form()); } else { ?>
    1. @

    comment_status) { ?>

    HTML allowed:"); ?>

    Logged in as . Logout »

    " />


    " />

    ID); ?>

    Powered by Wordpress"),__("Powered by WordPress, state-of-the-art semantic personal publishing platform.")); ?>

    Fwordpress/wp-content/themes/classic/.svn/text-base/footer.php.svn-base

    WordPress"), __("Powered by WordPress, state-of-the-art semantic personal publishing platform.")); ?>

    Iwordpress/wp-content/themes/classic/.svn/text-base/functions.php.svn-base '
  • ', 'after_widget' => '
  • ', 'before_title' => '', 'after_title' => '', )); ?> Fwordpress/wp-content/themes/classic/.svn/text-base/header.php.svn-base > <?php bloginfo('name'); ?><?php wp_title(); ?>

    Ewordpress/wp-content/themes/classic/.svn/text-base/index.php.svn-base ',''); ?>

    @

    Jwordpress/wp-content/themes/classic/.svn/text-base/screenshot.png.svn-base ܉PNG  IHDR,ExgAMA7tEXtSoftwareAdobe ImageReadyqe<`PLTE̮ȼЮ؝dacЭߣ򦠥~urxzwD IDATx]e J4_¤}w{;('Eq@xKK}:=R|.לseͻG`udoοR옹^tYNp4σp~?,-gKAQPOP@G-2. m׻$j:k7dzݣF٩Un?XGydݥ{Z&qa!Xݭ"3q{$w [sy-/G7;G[De5d/iO!Ҟ8]),UF;k^o "X.ݕ0wZD^=K>VW_w*ଗgCp޿k$ 6lO]%%ڵ@lQR(1U=] +z~sRG&>u/eԷC varHlg=)3^@w_Z?i?Kȫd QB$_5}ϵ]s!.ġha{;xσx+`1*[`!U\)Ԡv'QEG\E1]VewDZIR\HpoH.t\=5DꪫƏ4׫kS@uFXF2oX r+T]5e;]wnpp_#(b7|!XNw"V=R{GT `5&WRI0313/U)~X=j"!omaM6DR6j k8l6 AR, mUEThGzE 4ք,uW+hZ>BUO1Od.sҢ!%!q<M_\6MTـ~^PZJ&d_8ʖ8ELjaX!W߭ډN T<fٯzfqك-t3%]@>GA]IRLL,FDT'GB+@crAcggOvuuuuJRѱ+ER>j\D ):||< vըZ!+.9S#8'[6X>Xf929W[LQ5X?Xm4!6+eZ;qR! ՐI}@~}qnIF߾Ux&Y" &lMZڅJQ:<|2:(4vK0@%1Q| )XSHl!RJ z?J''%4)`c $< މ#zn`XXXXF׳,60"&T{6[B ^ %.@Qh7ۇo=I yو/_(>>@oR Q1#2}}[O`lDV\G0&E5W xzpGIꬅϋ[ꅃ)0*l!|RBoKS"zsY-X'q;TCP6eAJ.uOqJicu0" NV׻*ۚK aΤd H:: ߢBq6vtL4/.iR1)[ C5 FSѬ/+~Gq8 }݊}ow*EL`$K-ӗf4gר;8a@e%p$eDa\& 2,lHd12srzE@UDBD7,3&ifEIny^0ufCdl%Lζ\䌳V1}Igрc~$AaXKd9yo"#gBii/̷u^0]԰`k>B,W:2 Cd.Rf EA!ofRMoL4xC۬Y_ [MYmˊcg6yxU3ի=nև_kiHi?]ï]w*-mL[nS[m -52ZPb Aʏ+0Gn樶'D,}-z6?T7 ?:.z7ڕ5< T9mXl]ᴌ,t 6Cs.Os/Ow0x;3Ϯ |-ŀ-Oٔ22{E}, V_eUqs{D[0晱*:6~+QV_/ǫ_xgC?-65ceOnச:$hi]S= F4ܜW'W}ג0QiŲ fŇ`:H `@ ’--k|#gQّ/Lq6JGиC\͵=4Bɜ%Bq~~YSwX mFȦڝ 54-i7/vg͢ _eR(A,&]/YSLlOYsGr8х̪&:ry: b#iZbϪv9Bt&z K7y;,l7*czIL(K([-14t$NQD:GCDR?8;-~_q_w-[m.nTrjlrp>8v4:OWHִ7v/vQ>z3~wWJ}].Wo+z, X͍dJ lؖ15v1׼µnK5Xŷ#mGV&x뜉=TmEi|h%ؕFchgIf\ P5G^T_⹸o)Ymk?ӸYۙu2y|6lX:h`ÅN'ZDg7eaXpBV: w|G`GDid*Ք '@rìD `fI6: KS$ /$Cm鏻k)isO@ה<&CSv3UR^@+d`} c>^t90N"FOOuQJ2m:;GhĒ)LԸI`=900k;$|Wj+B23QR`=QeMۋո4iWqw+jO<U#ڑ֧|d.o-Va+%,jr1_Ce^J"X׶|>ؼ*.[A]um9U sSUA7_~#*u@]7oNK5s T.NΡdp|&9ֽ'O|/hazY&Fwk'z=e.$Y|,]Ss$)_@ێDEdl?5B*Bjԏ */+` md[4^a zҧ:+rgF2O~ XOthFԢ6eP<;`6ƬA̬KpmcYx 5:h=\۶oDO^!{}VCP~<"eا:ܟG$ۗ[ht_f;V) 05%UZBu']N"+gOe1]I*ds%]ZsG5Ffj d,.RM44e~uh9H1@Bb"kUk-%)j"Tx rF.GAмj Cxz&Y mžĴ'Fp o}mZ*s |Ln`kgG)$یd4Sjtzr[{[}^F 8dD[b[$MZ2;mmX ^m2O |U9SGyMG7zFOUIeXʧO/|vbh= UXS#0B x駵g뷘<1]۫R1l?6v'k[C`_}k"Ӆ t]$ c65iP<$H2+?n8iy[pzZ5=q e8ӪOx%Ӱ,;Xg5OdY*gэD\r@1/nͪ1h7ltZ |Z kPMz:M.;v N<~ 9 'c?E dqѶ\c6d`}<+{D5.}@1/1RAeĤ,gx]ӌIz&Sǁ;C]d XyV&}<^}юG fl=Gg%`Lc 47Jivrerd.;Lf7m4L`9(묲?zI1{q{mb^-zq;:9`^_ƿ,d~YV).>`CKݳMx#P^hOȏ5A #5㻒Emq+[ (f?,?6 fvg#/6{zEVT|M9V: =,ˣ ::x+5csxA^/u"yEhLr&Ke,bВqA brj09]-`:zm86@U3A*X2KP=cdqu)/!̸jKsq[m 'Ai!cIͯl&rOVt|b҇zhBKMOJN!4)jOFLQF&73ƢB,FNpST{t 53 34'XU2jv&V3n y8 EQ:9H:+uX?ܤj [ qJQvtSd$fOSTvXݫfXj{3, %LRH"MN)ctQ0BZcFR|ۺ3xy;i+GQڧ^ Q,__XZjXdGm4~aHV*1 Y j=e^)TF|jC?W^11Ňn{ޏ^hԻ|3˸W<`e8vsX%?iݓtC37[ϰ&RwQV76 ާvЧJ ~W KWX2`} V!EX9Ŭ*tR_Kj`,{d~}/#jhb OV3$FMf,#G!ٯVC;DVaH <:'*vLKR\6緈Xjw/hbf02_\GUD`]V3cH,dmߖ}vuHJlGI]@/OkW$ϫӏ!pxɤy0VhcAezԈ4Ml9HgĬb!g爍؃ٵ#gτV2&L{1vz Y`qCREhD'&eM4lut'/5`x glTX.8[ V3`605R&|߷b/I$_uR\JyHm:/kA` w, MtNFC9S5W$;X/c +Y!@!HrIEG"! P>?&W͉6ծlsgSc۪ҷM0<\B%9@< Ewordpress/wp-content/themes/classic/.svn/text-base/style.css.svn-base/* Theme Name: WordPress Classic Theme URI: http://wordpress.org/ Description: The original WordPress theme that graced versions 1.2.x and prior. Version: 1.5 Author: Dave Shea Default WordPress by Dave Shea || http://mezzoblue.com Modifications by Matthew Mullenweg || http://photomatt.net This is just a basic layout, with only the bare minimum defined. Please tweak this and make it your own. :) */ a { color: #675; } a img { border: none; } a:visited { color: #342; } a:hover { color: #9a8; } acronym, abbr { border-bottom: 1px dashed #333; } acronym, abbr, span.caps { font-size: 90%; letter-spacing: .07em; } acronym, abbr { cursor: help; } blockquote { border-left: 5px solid #ccc; margin-left: 1.5em; padding-left: 5px; } body { background: #fff; border: solid 2px #565; border-bottom: solid 1px #565; border-top: solid 3px #565; color: #000; font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; margin: 0; padding: 0; } cite { font-size: 90%; font-style: normal; } h2 { border-bottom: 1px dotted #ccc; font: 95% "Times New Roman", Times, serif; letter-spacing: 0.2em; margin: 15px 0 2px 0; padding-bottom: 2px; } h3 { border-bottom: dotted 1px #eee; font-family: "Times New Roman", Times, serif; margin-top: 0; } ol#comments li p { font-size: 100%; } p, li, .feedback { font: 90%/175% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; letter-spacing: -1px; } /* classes used by the_meta() */ ul.post-meta { list-style: none; } ul.post-meta span.post-meta-key { font-weight: bold; } .credit { background: #90a090; border-top: double 3px #aba; color: #fff; font-size: 11px; margin: 10px 0 0 0; padding: 3px; text-align: center; } .credit a:link, .credit a:hover { color: #fff; } .feedback { color: #ccc; text-align: right; clear: both; } .meta { font-size: .75em; } .meta li, ul.post-meta li { display: inline; } .meta ul { display: inline; list-style: none; margin: 0; padding: 0; } .meta, .meta a { color: #808080; font-weight: normal; letter-spacing: 0; } .storytitle { margin: 0; } .storytitle a { text-decoration: none; } #commentform #author, #commentform #email, #commentform #url, #commentform textarea { background: #fff; border: 1px solid #333; padding: .2em; } #commentform textarea { width: 100%; } #commentlist li ul { border-left: 1px solid #ddd; font-size: 110%; list-style-type: none; } #content { margin: 30px 13em 0 3em; padding-right: 60px; } #header { background: #90a090; border-bottom: double 3px #aba; border-left: solid 1px #9a9; border-right: solid 1px #565; border-top: solid 1px #9a9; font: italic normal 230% 'Times New Roman', Times, serif; letter-spacing: 0.2em; margin: 0; padding: 15px 10px 15px 60px; } #header a { color: #fff; text-decoration: none; } #header a:hover { text-decoration: underline; } #menu { background: #fff; border-left: 1px dotted #ccc; border-top: solid 3px #e0e6e0; padding: 20px 0 10px 30px; position: absolute; right: 2px; top: 0; width: 11em; } #menu form { margin: 0 0 0 13px; } #menu input#s { width: 80%; background: #eee; border: 1px solid #999; color: #000; } #menu ul { color: #ccc; font-weight: bold; list-style-type: none; margin: 0; padding-left: 3px; text-transform: lowercase; } #menu ul li { font: italic normal 110% 'Times New Roman', Times, serif; letter-spacing: 0.1em; margin-top: 10px; padding-bottom: 2px; /*border-bottom: dotted 1px #ccc;*/ } #menu ul ul { font-variant: normal; font-weight: normal; line-height: 100%; list-style-type: none; margin: 0; padding: 0; text-align: left; } #menu ul ul li { border: 0; font: normal normal 12px/115% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; letter-spacing: 0; margin-top: 0; padding: 0; padding-left: 12px; } #menu ul ul li a { color: #000; text-decoration: none; } #menu ul ul li a:hover { border-bottom: 1px solid #809080; } #menu ul ul ul.children { font-size: 142%; padding-left: 4px; } #wp-calendar { border: 1px solid #ddd; empty-cells: show; font-size: 14px; margin: 0; width: 90%; } #wp-calendar #next a { padding-right: 10px; text-align: right; } #wp-calendar #prev a { padding-left: 10px; text-align: left; } #wp-calendar a { display: block; text-decoration: none; } #wp-calendar a:hover { background: #e0e6e0; color: #333; } #wp-calendar caption { color: #999; font-size: 16px; text-align: left; } #wp-calendar td { color: #ccc; font: normal 12px 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif; letter-spacing: normal; padding: 2px 0; text-align: center; } #wp-calendar td.pad:hover { background: #fff; } #wp-calendar td:hover, #wp-calendar #today { background: #eee; color: #bbb; } #wp-calendar th { font-style: normal; text-transform: capitalize; } +wordpress/wp-content/themes/default/404.php

    Error 404 - Not Found

    /wordpress/wp-content/themes/default/archive.php

    Archive for the ‘’ Category

    Archive for

    Archive for

    Archive for

    Author Archive

    Blog Archives

    Not Found

    0wordpress/wp-content/themes/default/archives.php`

    Archives by Month:

    Archives by Subject:

    2wordpress/wp-content/themes/default/attachment.php A
    ID, true, array(450, 800)); // This also populates the iconsize for the next line ?> ID); $classname = ($_post->iconsize[0] <= 128 ? 'small' : '') . 'attachment'; // This lets us style narrow icons specially ?>

    post_parent); ?> »


    guid); ?>

    Read the rest of this entry »

    '); ?> '

    Pages: ', 'after' => '

    ', 'next_or_number' => 'number')); ?>

    Sorry, no attachments matched your criteria.

    0wordpress/wp-content/themes/default/comments.phppost_password)) { // if there's a password if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie ?>

    This post is password protected. Enter the password to view comments.

    to “

    1. id="comment-"> Says: comment_approved == '0') : ?> Your comment is awaiting moderation.
    comment_status) : ?>

    Comments are closed.

    comment_status) : ?>

    Leave a Reply

    You must be logged in to post a comment.

    Logged in as . Logout »

    ID); ?>
    6wordpress/wp-content/themes/default/comments-popup.php$ <?php echo get_option('blogname'); ?> - Comments on <?php the_title(); ?>

    Comments

    RSS feed for comments on this post.

    ping_status) { ?>

    The URL to TrackBack this entry is:

    post_password) && $_COOKIE['wp-postpass_'. COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie echo(get_the_password_form()); } else { ?>
    1. by @

    No comments yet.

    comment_status) { ?>

    Leave a comment

    Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed:

    Logged in as . Logout »

    " />


    ID); ?>

    Sorry, the comment form is closed at this time.

    Powered by Wordpress

    .wordpress/wp-content/themes/default/footer.php
    1wordpress/wp-content/themes/default/functions.phpBd '
  • ', 'after_widget' => '
  • ', 'before_title' => '

    ', 'after_title' => '

    ', )); function kubrick_head() { $head = "\n"; if ( '' != $output ) echo $head . $output . $foot; } add_action('wp_head', 'kubrick_head'); function kubrick_header_image() { return apply_filters('kubrick_header_image', get_option('kubrick_header_image')); } function kubrick_upper_color() { if (strpos($url = kubrick_header_image_url(), 'header-img.php?') != false) { parse_str(substr($url, strpos($url, '?') + 1), $q); return $q['upper']; } else return '69aee7'; } function kubrick_lower_color() { if (strpos($url = kubrick_header_image_url(), 'header-img.php?') != false) { parse_str(substr($url, strpos($url, '?') + 1), $q); return $q['lower']; } else return '4180b6'; } function kubrick_header_image_url() { if ( $image = kubrick_header_image() ) $url = get_template_directory_uri() . '/images/' . $image; else $url = get_template_directory_uri() . '/images/kubrickheader.jpg'; return $url; } function kubrick_header_color() { return apply_filters('kubrick_header_color', get_option('kubrick_header_color')); } function kubrick_header_color_string() { $color = kubrick_header_color(); if ( false == $color ) return 'white'; return $color; } function kubrick_header_display() { return apply_filters('kubrick_header_display', get_option('kubrick_header_display')); } function kubrick_header_display_string() { $display = kubrick_header_display(); return $display ? $display : 'inline'; } add_action('admin_menu', 'kubrick_add_theme_page'); function kubrick_add_theme_page() { if ( $_GET['page'] == basename(__FILE__) ) { if ( 'save' == $_REQUEST['action'] ) { check_admin_referer('kubrick-header'); if ( isset($_REQUEST['njform']) ) { if ( isset($_REQUEST['defaults']) ) { delete_option('kubrick_header_image'); delete_option('kubrick_header_color'); delete_option('kubrick_header_display'); } else { if ( '' == $_REQUEST['njfontcolor'] ) delete_option('kubrick_header_color'); else { $fontcolor = preg_replace('/^.*(#[0-9a-fA-F]{6})?.*$/', '$1', $_REQUEST['njfontcolor']); update_option('kubrick_header_color', $fontcolor); } if ( preg_match('/[0-9A-F]{6}|[0-9A-F]{3}/i', $_REQUEST['njuppercolor'], $uc) && preg_match('/[0-9A-F]{6}|[0-9A-F]{3}/i', $_REQUEST['njlowercolor'], $lc) ) { $uc = ( strlen($uc[0]) == 3 ) ? $uc[0]{0}.$uc[0]{0}.$uc[0]{1}.$uc[0]{1}.$uc[0]{2}.$uc[0]{2} : $uc[0]; $lc = ( strlen($lc[0]) == 3 ) ? $lc[0]{0}.$lc[0]{0}.$lc[0]{1}.$lc[0]{1}.$lc[0]{2}.$lc[0]{2} : $lc[0]; update_option('kubrick_header_image', "header-img.php?upper=$uc&lower=$lc"); } if ( isset($_REQUEST['toggledisplay']) ) { if ( false == get_option('kubrick_header_display') ) update_option('kubrick_header_display', 'none'); else delete_option('kubrick_header_display'); } } } else { if ( isset($_REQUEST['headerimage']) ) { check_admin_referer('kubrick-header'); if ( '' == $_REQUEST['headerimage'] ) delete_option('kubrick_header_image'); else { $headerimage = preg_replace('/^.*?(header-img.php\?upper=[0-9a-fA-F]{6}&lower=[0-9a-fA-F]{6})?.*$/', '$1', $_REQUEST['headerimage']); update_option('kubrick_header_image', $headerimage); } } if ( isset($_REQUEST['fontcolor']) ) { check_admin_referer('kubrick-header'); if ( '' == $_REQUEST['fontcolor'] ) delete_option('kubrick_header_color'); else { $fontcolor = preg_replace('/^.*?(#[0-9a-fA-F]{6})?.*$/', '$1', $_REQUEST['fontcolor']); update_option('kubrick_header_color', $fontcolor); } } if ( isset($_REQUEST['fontdisplay']) ) { check_admin_referer('kubrick-header'); if ( '' == $_REQUEST['fontdisplay'] || 'inline' == $_REQUEST['fontdisplay'] ) delete_option('kubrick_header_display'); else update_option('kubrick_header_display', 'none'); } } //print_r($_REQUEST); wp_redirect("themes.php?page=functions.php&saved=true"); die; } add_action('admin_head', 'kubrick_theme_page_head'); } add_theme_page(__('Customize Header'), __('Header Image and Color'), 'edit_themes', basename(__FILE__), 'kubrick_theme_page'); } function kubrick_theme_page_head() { ?>

    '.__('Options saved.').'

    '; ?>


    red', '#FF0000', 'rgb(255, 0, 0)'); ?>
    #FF0000', '#F00'); ?>
    #FF0000', '#F00'); ?>

    .wordpress/wp-content/themes/default/header.phpg > <?php bloginfo('name'); ?> <?php if ( is_single() ) { ?> » Blog Archive <?php } ?> <?php wp_title(); ?>

    4wordpress/wp-content/themes/default/images/audio.jpg?JFIFddDuckyPAdobed      `` !1Aaq"Q2R#bBr$!1AQaq2R3r4 ?꯼e,x bY[-40]|ͻOCјfe7S~-oX{\bҗwݵ2^Kys-̗k%4fbI?(JI^~:GET ,glBF"tc?G]\7Њ, ;h]u8F貀:E~Qn]kq\Ik%C"hJNQy=oZF\=E=6?}_>u_Z5Tǁ #EE>`$҆-ŽB.),bAuc!2)Xo ftWңs(8סivI2XMO u-/퍒ɐz8 tˣe}K?>*Ϲ%#hBzBp,1VZIn awFCO"g'ǡVrpkF.bccAaTuY^\p"`kHǾv/X?Yvׯ(4+qF/aTws[k]C$`y{ RHLEO3e'r`,箶2uLn 4YVCgI32XXK.~7-0cu;]ow٭-yn4\fVz}-g2`46TDe{^d}Y$VTPզ82lڞe-kR]YHzB;箄-EPcJ)]]6\e-+HZUpvBAۡ;GBBzܨP >ru2[TV|i4 ;8Ao*#jUe`{U O\lhƁVRc,||WTi?ī|<nWW}80Cvf9cJ[x#xkDzaVe8- ;K xܛ5$[2nݸ} ר6Bߞcfw@φTGsᢨGsᢨGsᢨZqOcywXO%(,LQԏ0 68.+ӚZH7 S]^SQA$@ˍ^b3rlOfp2㗫ۻO |GgA)} &H Z&a@-Nwƾٶ9wordpress/wp-content/themes/default/images/header-img.phpjarray('r1', 'g1', 'b1'), 'lower'=>array('r2', 'g2', 'b2')); foreach ( $vars as $var => $subvars ) { if ( isset($_GET[$var]) ) { foreach ( $subvars as $index => $subvar ) { $length = strlen($_GET[$var]) / 3; $v = substr($_GET[$var], $index * $length, $length); if ( $length == 1 ) $v = '' . $v . $v; $$subvar = hexdec( $v ); if ( $$subvar < 0 || $$subvar > 255 ) $default = true; } } else { $default = true; } } if ( $default ) list ( $r1, $g1, $b1, $r2, $g2, $b2 ) = array ( 105, 174, 231, 65, 128, 182 ); // Create the image $im = imagecreatefromjpeg($img); // Get the background color, define the rectangle height $white = imagecolorat( $im, 15, 15 ); $h = 182; // Define the boundaries of the rounded edges ( y => array ( x1, x2 ) ) $corners = array( 0 => array ( 25, 734 ), 1 => array ( 23, 736 ), 2 => array ( 22, 737 ), 3 => array ( 21, 738 ), 4 => array ( 21, 738 ), 177 => array ( 21, 738 ), 178 => array ( 21, 738 ), 179 => array ( 22, 737 ), 180 => array ( 23, 736 ), 181 => array ( 25, 734 ), ); // Blank out the blue thing for ( $i = 0; $i < $h; $i++ ) { $x1 = 19; $x2 = 740; imageline( $im, $x1, 18 + $i, $x2, 18 + $i, $white ); } // Draw a new color thing for ( $i = 0; $i < $h; $i++ ) { $x1 = 20; $x2 = 739; $r = ( $r2 - $r1 != 0 ) ? $r1 + ( $r2 - $r1 ) * ( $i / $h ) : $r1; $g = ( $g2 - $g1 != 0 ) ? $g1 + ( $g2 - $g1 ) * ( $i / $h ) : $g1; $b = ( $b2 - $b1 != 0 ) ? $b1 + ( $b2 - $b1 ) * ( $i / $h ) : $b1; $color = imagecolorallocate( $im, $r, $g, $b ); if ( array_key_exists($i, $corners) ) { imageline( $im, $x1, 18 + $i, $x2, 18 + $i, $white ); list ( $x1, $x2 ) = $corners[$i]; } imageline( $im, $x1, 18 + $i, $x2, 18 + $i, $color ); } //die; header("Content-Type: image/jpeg"); imagejpeg($im, '', 92); imagedestroy($im); ?> =wordpress/wp-content/themes/default/images/kubrickbgcolor.jpg,JFIFddDucky<&Adobed  *       <<o```` ????!?!?! I$I$I$I$I$I$I$I$???ٶ,`>,`>,`>,`>,??ٶ??>??89Ǟ=s}q}\s}\yg}~?_/xx矷8y珧oXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQ}}?!϶~g> U|UUUUUUUUUUU_UUUUUUUU|UUUUUUUUUUUUUUUUUUUUU_1}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdg,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUg,?gUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYKg,oUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYzKgهUc+UUUUUUWªUU_ UUUW¯UU_ Wª?~S3[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ Mϯ?!>??!>? I$I$I$I$I$I$I$I$I$I$I$IA  I$I$I$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$I$I$?{Ǐ?,l|l>6)}8X@HX~l+|l1-rw[p?"?ǣqـ @ @ @ @ @ @ @ @ @ @( @ @qcϏF?Eьb??>??>?ٶRy/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S'Msr~e,սò򱭏2na{WQw Kpn^m1a_~J?3?jמ٨&cIw ݖB{fϭx/[W`:}p220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 _/Mu߶jSx}y{w횏>` v?;bx/v[ >c>zt`:}p00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L{>S}yPu߶jOvS``````````````````````_POT]w횏>` f?;bx/v[ >c8tO3tN$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@Z}E_pL{>S}yQ߶jO@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$Eǹ7/]fϢ$™w ݖB{fϭL"-]7nS}yL}>CSI {_R}O'Tw횏>` f?;bx/v[ >c0t}O3 N$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@\-}K?pL{>SxyS߶jOyɢ@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$A$Ϲ/O]fϢ$™w ݖB{fϭJ$]1lS}yL}>AS& _Sܓ>O'Umw횏>` f?;bx/v[ >c'tO3L$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@^}OrL>RyV5߶j`*V?;bx/v[ >ctjSx}yM{}>s)C0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 `WtL{>RyX5߶jԦ}pVS&``````````````````````kUDϹ/畗]fϢ$ʕw ݖB{fϭxM?DĬx6J .N۶Ym]l~NM?/Wh\<\;ÿeo]vmo-,??gA``````````````````````}a\{.aܲׯ^j,m?z#m+?~G]& (_mn޽n%K,#l_4?+QU_\=GE0LFeٶ7wordpress/wp-content/themes/default/images/.svn/entries.8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/themes/default/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 audio.jpg file 2008-11-20T16:30:41.000000Z 9e02a249556a063953ae1cf1c8719a98 2008-10-28T18:17:06.112729Z 97 paul has-props kubrickbg-ltr.jpg file 2008-11-20T16:30:41.000000Z fb899a26d58f085c095573b4d572f7cd 2008-10-28T18:17:06.112729Z 97 paul has-props kubrickbg-rtl.jpg file 2008-11-20T16:30:41.000000Z 6a9d85b0c47fba2847f083594e15d5ef 2008-10-28T18:17:06.112729Z 97 paul has-props kubrickbgcolor.jpg file 2008-11-20T16:30:41.000000Z 59ca34439ac4985d8b7e83f17fc77916 2008-10-28T18:17:06.112729Z 97 paul has-props kubrickheader.jpg file 2008-11-20T16:30:41.000000Z 762773d093daa7fb6974b8ff759b3803 2008-10-28T18:17:06.112729Z 97 paul has-props header-img.php file 2008-11-20T16:30:41.000000Z b92b6e2d975860ef1b91259b068f6d3a 2008-10-28T18:17:06.112729Z 97 paul kubrickfooter.jpg file 2008-11-20T16:30:41.000000Z b92131b91f6b17f3dae54b37b5acde5d 2008-10-28T18:17:06.112729Z 97 paul has-props kubrickbgwide.jpg file 2008-11-20T16:30:41.000000Z 49ea932ba2ae3783de988f7409c1e2ee 2008-10-28T18:17:06.112729Z 97 paul has-props 6wordpress/wp-content/themes/default/images/.svn/format8 Lwordpress/wp-content/themes/default/images/.svn/prop-base/audio.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Uwordpress/wp-content/themes/default/images/.svn/prop-base/kubrickbgcolor.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Twordpress/wp-content/themes/default/images/.svn/prop-base/kubrickbg-ltr.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Twordpress/wp-content/themes/default/images/.svn/prop-base/kubrickbg-rtl.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Twordpress/wp-content/themes/default/images/.svn/prop-base/kubrickbgwide.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Twordpress/wp-content/themes/default/images/.svn/prop-base/kubrickfooter.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Twordpress/wp-content/themes/default/images/.svn/prop-base/kubrickheader.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Lwordpress/wp-content/themes/default/images/.svn/text-base/audio.jpg.svn-base?JFIFddDuckyPAdobed      `` !1Aaq"Q2R#bBr$!1AQaq2R3r4 ?꯼e,x bY[-40]|ͻOCјfe7S~-oX{\bҗwݵ2^Kys-̗k%4fbI?(JI^~:GET ,glBF"tc?G]\7Њ, ;h]u8F貀:E~Qn]kq\Ik%C"hJNQy=oZF\=E=6?}_>u_Z5Tǁ #EE>`$҆-ŽB.),bAuc!2)Xo ftWңs(8סivI2XMO u-/퍒ɐz8 tˣe}K?>*Ϲ%#hBzBp,1VZIn awFCO"g'ǡVrpkF.bccAaTuY^\p"`kHǾv/X?Yvׯ(4+qF/aTws[k]C$`y{ RHLEO3e'r`,箶2uLn 4YVCgI32XXK.~7-0cu;]ow٭-yn4\fVz}-g2`46TDe{^d}Y$VTPզ82lڞe-kR]YHzB;箄-EPcJ)]]6\e-+HZUpvBAۡ;GBBzܨP >ru2[TV|i4 ;8Ao*#jUe`{U O\lhƁVRc,||WTi?ī|<nWW}80Cvf9cJ[x#xkDzaVe8- ;K xܛ5$[2nݸ} ר6Bߞcfw@φTGsᢨGsᢨGsᢨZqOcywXO%(,LQԏ0 68.+ӚZH7 S]^SQA$@ˍ^b3rlOfp2㗫ۻO |GgA)} &H Z&a@-NwƾٶQwordpress/wp-content/themes/default/images/.svn/text-base/header-img.php.svn-basejarray('r1', 'g1', 'b1'), 'lower'=>array('r2', 'g2', 'b2')); foreach ( $vars as $var => $subvars ) { if ( isset($_GET[$var]) ) { foreach ( $subvars as $index => $subvar ) { $length = strlen($_GET[$var]) / 3; $v = substr($_GET[$var], $index * $length, $length); if ( $length == 1 ) $v = '' . $v . $v; $$subvar = hexdec( $v ); if ( $$subvar < 0 || $$subvar > 255 ) $default = true; } } else { $default = true; } } if ( $default ) list ( $r1, $g1, $b1, $r2, $g2, $b2 ) = array ( 105, 174, 231, 65, 128, 182 ); // Create the image $im = imagecreatefromjpeg($img); // Get the background color, define the rectangle height $white = imagecolorat( $im, 15, 15 ); $h = 182; // Define the boundaries of the rounded edges ( y => array ( x1, x2 ) ) $corners = array( 0 => array ( 25, 734 ), 1 => array ( 23, 736 ), 2 => array ( 22, 737 ), 3 => array ( 21, 738 ), 4 => array ( 21, 738 ), 177 => array ( 21, 738 ), 178 => array ( 21, 738 ), 179 => array ( 22, 737 ), 180 => array ( 23, 736 ), 181 => array ( 25, 734 ), ); // Blank out the blue thing for ( $i = 0; $i < $h; $i++ ) { $x1 = 19; $x2 = 740; imageline( $im, $x1, 18 + $i, $x2, 18 + $i, $white ); } // Draw a new color thing for ( $i = 0; $i < $h; $i++ ) { $x1 = 20; $x2 = 739; $r = ( $r2 - $r1 != 0 ) ? $r1 + ( $r2 - $r1 ) * ( $i / $h ) : $r1; $g = ( $g2 - $g1 != 0 ) ? $g1 + ( $g2 - $g1 ) * ( $i / $h ) : $g1; $b = ( $b2 - $b1 != 0 ) ? $b1 + ( $b2 - $b1 ) * ( $i / $h ) : $b1; $color = imagecolorallocate( $im, $r, $g, $b ); if ( array_key_exists($i, $corners) ) { imageline( $im, $x1, 18 + $i, $x2, 18 + $i, $white ); list ( $x1, $x2 ) = $corners[$i]; } imageline( $im, $x1, 18 + $i, $x2, 18 + $i, $color ); } //die; header("Content-Type: image/jpeg"); imagejpeg($im, '', 92); imagedestroy($im); ?> Uwordpress/wp-content/themes/default/images/.svn/text-base/kubrickbgcolor.jpg.svn-base,JFIFddDucky<&Adobed  *       <<o```` ????!?!?! I$I$I$I$I$I$I$I$???ٶTwordpress/wp-content/themes/default/images/.svn/text-base/kubrickbg-ltr.jpg.svn-baseJFIFddDucky<&Adobed x       (`3q`@`1q Br L)*k0 2r7RrD Ԝu'$@I7R{?m?m?v mpHv mpHv ?!4` =@(#F4` =@(#F4` =@(/?!?! I$I$I$I$I$I$I$I$I$I$I$HI$I$I$I$I$I$I$I$I$I$I$@I$I$I$I$I$I$I$I I$I$I$I$I$I$I$I$I$I$II$I$I$$I$I$I$I$I$I$I$H$I$I$I$?`>,`>,`>,`>,`>,??ٶTwordpress/wp-content/themes/default/images/.svn/text-base/kubrickbg-rtl.jpg.svn-baseyJFIFddC      C ( }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?!} Io]n?Jՠ ( ( ( ( ( ( ~P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@dx@R[(*_} Io]n?Jՠ ( ( ( ( ( ( ~P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@dx@R[(*_} Io]n?Jՠ ( ( ( ( ( ( ~P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@dx@R[(*_} Io]n?Jՠ ( ( ( ( ( ( ~P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@dx@R[(*_} Io]n?Jՠ ( ( ( ( ( ( ~P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@dx@R[(*_ٶTwordpress/wp-content/themes/default/images/.svn/text-base/kubrickbgwide.jpg.svn-baseJFIFddDucky<&Adobed q       (`3q``1 M`  SXB@! T7Z2D ֌u$@h7Z;?m?m?v mpHv mpHv ?!qakGƼqa??!?! I$I$I$I$I$I$I$I$I$I$I$HI$I$I$I$I$I$I$I$I$I$I$@I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$I$I$?k??>??89Ǟ=s}q}\s}\yg}~?_/xx矷8y珧oXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQaEXQ}}?!϶~g> U|UUUUUUUUUUU_UUUUUUUU|UUUUUUUUUUUUUUUUUUUUU_1}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUdg,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUg,?gUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYKg,oUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYzKgهUc+UUUUUUWªUU_ UUUW¯UU_ Wª?~S3[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ Mϯ?!>??!>? I$I$I$I$I$I$I$I$I$I$I$IA  I$I$I$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$I$I$?{Ǐ?,l|l>6)}8X@HX~l+|l1-rw[p?"?ǣqـ @ @ @ @ @ @ @ @ @ @( @ @qcϏF?Eьb??>??>?ٶTwordpress/wp-content/themes/default/images/.svn/text-base/kubrickheader.jpg.svn-baseJFIFddDuckyFAdobed    UѓӤq2s6!1Q"ABt%RB1!Aq ??EU5%*`%.{@z4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}sh.GJ]͠:O攻@u)w6=?Rmz4\iKQҗ}shꩪKsYzU_#}7XaُQK咻O{ 6[,m\GW~M~xv`Tac`dnTb]UKm-][O{ݠO[1/iҰiWz5 ޿y[eg4?+?fGHMs~e- i՝öV5cɺ|^^wWljLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S#-w!ƶ5Ld d|^^5xƩLLkp3it)yzn[m2n2>Ry/MkcTͦMЦGZ5CWljɺK]漽7jS67B)kח ^5f&S'Msr~e,սò򱭏2na{WQw Kpn^m1a_~J?3?jמ٨&cIw ݖB{fϭx/[W`:}p220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 _/Mu߶jSx}y{w횏>` v?;bx/v[ >c>zt`:}p00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L{>S}yPu߶jOvS``````````````````````_POT]w횏>` f?;bx/v[ >c8tO3tN$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@Z}E_pL{>S}yQ߶jO@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$Eǹ7/]fϢ$™w ݖB{fϭL"-]7nS}yL}>CSI {_R}O'Tw횏>` f?;bx/v[ >c0t}O3 N$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@\-}K?pL{>SxyS߶jOyɢ@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$A$Ϲ/O]fϢ$™w ݖB{fϭJ$]1lS}yL}>AS& _Sܓ>O'Umw횏>` f?;bx/v[ >c'tO3L$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@^}OrL>RyV5߶j`*V?;bx/v[ >ctjSx}yM{}>s)C0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 `WtL{>RyX5߶jԦ}pVS&``````````````````````kUDϹ/畗]fϢ$ʕw ݖB{fϭxM?DĬx6J .N۶Ym]l~NM?/Wh\<\;ÿeo]vmo-,??gA``````````````````````}a\{.aܲׯ^j,m?z#m+?~G]& (_mn޽n%K,#l_4?+QU_\=GE0LFeٶ-wordpress/wp-content/themes/default/index.php

    Not Found

    Sorry, but you are looking for something that isn't here.

    -wordpress/wp-content/themes/default/links.php

    Links:

    ,wordpress/wp-content/themes/default/page.phph

    Read the rest of this page »

    '); ?> '

    Pages: ', 'after' => '

    ', 'next_or_number' => 'number')); ?>
    ', '

    '); ?>
    +wordpress/wp-content/themes/default/rtl.cssd/* Based on Arabic (RTL) version of Kubrick theme, converted by Serdal (Serdal.com) */ .narrowcolumn, .alignleft, .widecolumn .smallattachment { float: right; } .alignright, #commentform #submit { float: left; } #page, #wp-calendar #prev a { text-align: right; } body, #commentform p { font-family: Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } small { font-family: Tahoma, Arial, Helvetica, Sans-Serif; } .commentlist li, #commentform input, #commentform textarea { font: 0.9em Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } #sidebar { font: 1em Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } #wp-calendar caption { font: bold 1.3em Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } #header { margin: 0 1px 0 0; } .narrowcolumn { padding: 0 45px 20px 0; } .widecolumn { margin: 5px 150px 0 0; } .widecolumn .smallattachment { margin: 5px 0px 5px 5px; } .postmetadata { clear: right; } img.alignright { margin: 0 7px 2px 0; } img.alignleft { margin: 0 0 2px 7px; } .entry ol { padding: 0 35px 0 0; } #sidebar ul ul, #sidebar ul ol { margin: 5px 10px 0 0; } #sidebar ul ul ul, #sidebar ul ol { margin: 0 10px 0 0; } #commentform input { margin: 5px 0 1px 5px; } .commentlist p { margin: 10px 0 10px 5px; } #sidebar { margin-right: 545px; } #wp-calendar #prev a, html>body .entry ul { padding-right: 10px; } html>body .entry li { margin: 7px 10px 8px 0; } html>body .entry ul { margin-right: 0px; padding: 0 30px 0 0; } blockquote { margin: 15px 10px 0 30px; padding-right: 20px; border-right: 5px solid #ddd; } #wp-calendar #next a { padding-left: 10px; text-align: left; } 2wordpress/wp-content/themes/default/screenshot.png)pPNG  IHDR,ExgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEYID`Qe8z̸㺶Ǻ]ت莳ùa^`Nh씚¤g˧ʳ簣zәzoýcMǾ줾}slóΤX~}FOсoj^lGddw&~Y3 LB~9sΙ%l/8 X lP9|,'@GTK1@MB)} P Yh7 ,x>S"<8_ X X/uˀe X_ퟝ`ík2`Օ``0`86`]?{0`rX/u𳳺aXW 'ts~g̅ |P<-O}~~ۇkuo{tԹ}|٧7n<5 йm+™)mϝ;?1H8=4wp0 ;嫯/ݠ|~@sP_ k抵92:OfLYӣz~΄ר1dQguez^IEz_VݷU@ul͑s|T,z~y_ ʳ,~7fŹKuBh$@ANPvwo.>(:=r NZɣ|`VE|yk`\Uk` ^,|M  ܀\GӳLWw e  ̵ UT&/f' \v_Y$zi\;V̀ `Ujf^ՙ۬jYXGiy6bL;͊i{l b wpv68v\>n{ȭ(6:xq|3\fbX o=)Ο^'+uᛇէw^BX8l; @t^itN̫vga ͅ.>µםΓ_w./,,?y89~p7;pO<^;;:,8>~hεZί:ξ_g3vuܯι3_;Nc3t~yx8tېeAܡε|sZB /`9D;_g;xgy ݛU=v,;_: vW~XdW^zÝ;7g`oW/v~Y]xΣW77yzUyn޹pǏ=sMK_ Ûp[}q^M2$~࡞N/{%X7pX4`>4`]?{0`#\u=ggO֗2`_?`2`]K0U`I_ \i:y\.dSXx5.5o ˥}`2` X,֏ Bau/f Xcc8t9a`&?, e8Nfd]p>KRKY>²Qhw%"Zͧ>{\$ 2+/}%iGkՍ jAՏI:WZw6hDoDgvjfej]^Z_˕:IT Ia=։|x~oyPA4{p^dA:!ӝ5ܝrgD~- WªJ&Di1eE$!o BEـ ;%H[R"HhjRGL_ ʦ2{P@ &K9x}<)h~&|օ7`]gCzQu7l@m2 "*]ɀ!,od+I3~΃~?a[GLQ>j,)#o9:`16?ٯl#mLކ" XRշr<⌞/(p9$ X ”%XR#3`!h8G?hؒګV.FPGMƴQ>,0̶[~ic@a ~,}ڲFg|n%1l(e[+a*6gP2mJSt"FLXڨ`gk>.? I'QǪ:-F_ xT+B*miN sVNP&h>c4Fҹ1U@(A!4?#;^Q.Т$M(4.J-7>^-<펇sJF: 4<09EB2 Q;jQ$[lY(LŢDl+iT kgE܉q^mq#U-k ?o4Ň@E!»K Kn+^&TkV? Rt'UBv~H3z RF'xoyjPVFŶJ|FeV2'$̟tͤ0UcRꬉ2^hWe9m]Kd哐EKHLf1גh^GKMF>Ȕ$3xd&l;L*sעO*x D.i5ro՟&ְ0Mlgdrg?f]u(F~P㠴wYf q"*f?,'di$Q}_x-,)k$\nGϗ~;TWz0ỳo >A+Ѱ˛0jE>*cb d%@%sbn&ZRh);Fd·-:ZlBne#^߳⾾o0fb$YBf0dmP`@ݓ@1/m}5Չ92`e"GԀBjEuif&`Dj}ҬrMDq5'ЮzC?fCڀe2`Ori Xk)Nxh8WUf Xǩq!W }Sz9$z9\\6]ގM*ˁ*3=~\ rOqy8Gx_S>ea>?K|HlX Qdr-\Z&&hGLn 11[`Km 47~~MN rpMjc]yiDKJ懰@"}:2^bOO55":5 ai  L.<,~ @oDDHY`pF:[KV|zKp1'hFj~O`rVBO V_8N |<1cr*_h;x{cTL<p}z3vȯcEXTΗ4N „4[x?&)Fws -ģno3}kF h>`}_Oـ&%Biɯ\} & < h]Pe:Xjp9B }[i%R m|kQ%pe|"C^vh.+3]: >A+sN)uEMbX#^;]raI t eUMQ+ l0]˕\wԼlW2R@̖6I#\ܽpME(kd۵d1Ԫ..pr?[ղ~Gu^pߟEF*O' D8oE wԊ%SٲӠbBkۛGiz?FT3#JkYQƎpF-' S.&yj0KVvCqrѹ=;ngbSvXzocJkأy[+ zqp7TTm(ԕhrAte[FKmyHJpiP*Q6>F'yRpD8cжB+u<WÒkάs|i>+DrW7LY-)дJuc@(aڦ=Ss fˉL.5ǣoIsߣ!D0AX0G14)*Oc^rN& >;#:߃GFܒki+ D=!2srOr-b}jHqwQ}v/m,Os̘2VJW/PE&B2Ztef-sCgm<;FYpJ?Y eD1yʄGt #kF'5 X ֵG%rCV\u]M&]فhbP3UFeak7E!edΆ +M-xD1ʅ-Lf(\ @@b#qчmm}/Y%[.?Z4iNi$9˸Niϛ鸹h2BQk"6QKD)ɍְ`~--:HBzok,JQO ch!B>\ύMWQ|iLS&K-5Z9)ZfJm k,a2/Hh~Ų4WߢTZ"T,W*Qxdo41שBn?#[ 8آcd-ҥְϷk;(x;[:߈l QiJiYervTĠq M[J|&'?.{8h@f$+c1{uqknDAhY鸖 ,6[ZkJKdh&6ؔMFeUɥY$͉mW43fHR)fNůDYۀ|dS*YԸjQZܴ, Om$/~oSp=l. ,;:0Jx͔hLzT7{"Qjο`qՍfJ~ A5j&f{ $s%`^Kt<mFݠa>YY鋵JK~6n"#BL'FcZFUpX>pphq%'|oB){o7\MRSM_.j{Ze;ן^Vh҃#Rb:v15Tr f4XE[=m;bFroK45[N$mȠE* Y*P"m\UtHhqTM^B3}rnτ f$Kq̛Z2 @Mp2phqU"K~J|=K}wkh53rm;3ELj`Yk[.^Bp 389j?l5H2V٥[kW_5x05WSXXDlIdQD`vYc #Uְpª/<a*DqD~ !z=VR%.`\L<wGؐ/=z^wI;1 wkMs[/Z%٨޾dm-D\o*YɨWk8fG+ IHeUeؕ2?nQakX8` ^HUbX1C-G g\-blT̊' Q"1v#Sô-w}az۳\A][ef5?2h>o+tkџvN=Ӎ-z%צ2 4137sdqeϲ` #"[:20;h5ve5wKa RHeOktsH.Xbm; >xE4+]DJV[}IBG(?,Vstn ȲffY}d0^%(Qc[4!K=p6lTr*5ܪM5W~kuE٥i6!hfѰow)5Ef"Lgę%F8l+5["7,ٚF_G!t[Q3$;ԶMÙ-:LNh$e˲퓒gN_iŅ'0X:3ჹ_1MZ'l .yKg\WBO/ok/M>sWYz[]KCnUcP5Q{<5{T1٢x+ o5I{l_wQ#k-BHi7GU|I~#&1tXl'9+-IENDB`2wordpress/wp-content/themes/default/searchform.php
    .wordpress/wp-content/themes/default/search.php

    Search Results

    No posts found. Try a different search?

    /wordpress/wp-content/themes/default/sidebar.php g .wordpress/wp-content/themes/default/single.php V

    Read the rest of this entry »

    '); ?> '

    Pages: ', 'after' => '

    ', 'next_or_number' => 'number')); ?>

    Sorry, no posts matched your criteria.

    -wordpress/wp-content/themes/default/style.css#^/* Theme Name: WordPress Default Theme URI: http://wordpress.org/ Description: The default WordPress theme based on the famous Kubrick. Version: 1.6 Author: Michael Heilemann Author URI: http://binarybonsai.com/ Kubrick v1.5 http://binarybonsai.com/kubrick/ This theme was designed and built by Michael Heilemann, whose blog you will find at http://binarybonsai.com/ The CSS, XHTML and design is released under GPL: http://www.opensource.org/licenses/gpl-license.php */ /* Begin Typography & Colors */ body { font-size: 62.5%; /* Resets 1em to 10px */ font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; background: #d5d6d7 url('images/kubrickbgcolor.jpg'); color: #333; text-align: center; } #page { background-color: white; border: 1px solid #959596; text-align: left; } #header { background: #73a0c5 url('images/kubrickheader.jpg') no-repeat bottom center; } #headerimg { margin: 7px 9px 0; height: 192px; width: 740px; } #content { font-size: 1.2em } .widecolumn .entry p { font-size: 1.05em; } .narrowcolumn .entry, .widecolumn .entry { line-height: 1.4em; } .widecolumn { line-height: 1.6em; } .narrowcolumn .postmetadata { text-align: center; } .alt { background-color: #f8f8f8; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; } #footer { background: #eee url('images/kubrickfooter.jpg') no-repeat top; border: none; } small { font-family: Arial, Helvetica, Sans-Serif; font-size: 0.9em; line-height: 1.5em; } h1, h2, h3 { font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; font-weight: bold; } h1 { font-size: 4em; text-align: center; } #headerimg .description { font-size: 1.2em; text-align: center; } h2 { font-size: 1.6em; } h2.pagetitle { font-size: 1.6em; } #sidebar h2 { font-family: 'Lucida Grande', Verdana, Sans-Serif; font-size: 1.2em; } h3 { font-size: 1.3em; } h1, h1 a, h1 a:hover, h1 a:visited, #headerimg .description { text-decoration: none; color: white; } h2, h2 a, h2 a:visited, h3, h3 a, h3 a:visited { color: #333; } h2, h2 a, h2 a:hover, h2 a:visited, h3, h3 a, h3 a:hover, h3 a:visited, #sidebar h2, #wp-calendar caption, cite { text-decoration: none; } .entry p a:visited { color: #b85b5a; } .commentlist li, #commentform input, #commentform textarea { font: 0.9em 'Lucida Grande', Verdana, Arial, Sans-Serif; } .commentlist li { font-weight: bold; } .commentlist cite, .commentlist cite a { font-weight: bold; font-style: normal; font-size: 1.1em; } .commentlist p { font-weight: normal; line-height: 1.5em; text-transform: none; } #commentform p { font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; } .commentmetadata { font-weight: normal; } #sidebar { font: 1em 'Lucida Grande', Verdana, Arial, Sans-Serif; } small, #sidebar ul ul li, #sidebar ul ol li, .nocomments, .postmetadata, blockquote, strike { color: #777; } code { font: 1.1em 'Courier New', Courier, Fixed; } acronym, abbr, span.caps { font-size: 0.9em; letter-spacing: .07em; } a, h2 a:hover, h3 a:hover { color: #06c; text-decoration: none; } a:hover { color: #147; text-decoration: underline; } #wp-calendar #prev a, #wp-calendar #next a { font-size: 9pt; } #wp-calendar a { text-decoration: none; } #wp-calendar caption { font: bold 1.3em 'Lucida Grande', Verdana, Arial, Sans-Serif; text-align: center; } #wp-calendar th { font-style: normal; text-transform: capitalize; } /* End Typography & Colors */ /* Begin Structure */ body { margin: 0 0 20px 0; padding: 0; } #page { background-color: white; margin: 20px auto; padding: 0; width: 760px; border: 1px solid #959596; } #header { background-color: #73a0c5; margin: 0 0 0 1px; padding: 0; height: 200px; width: 758px; } #headerimg { margin: 0; height: 200px; width: 100%; } .narrowcolumn { float: left; padding: 0 0 20px 45px; margin: 0px 0 0; width: 450px; } .widecolumn { padding: 10px 0 20px 0; margin: 5px 0 0 150px; width: 450px; } .post { margin: 0 0 40px; text-align: justify; } .post hr { display: block; } .widecolumn .post { margin: 0; } .narrowcolumn .postmetadata { padding-top: 5px; } .widecolumn .postmetadata { margin: 30px 0; } .widecolumn .smallattachment { text-align: center; float: left; width: 128px; margin: 5px 5px 5px 0px; } .widecolumn .attachment { text-align: center; margin: 5px 0px; } .postmetadata { clear: left; } #footer { padding: 0; margin: 0 auto; width: 760px; clear: both; } #footer p { margin: 0; padding: 20px 0; text-align: center; } /* End Structure */ /* Begin Headers */ h1 { padding-top: 70px; margin: 0; } h2 { margin: 30px 0 0; } h2.pagetitle { margin-top: 30px; text-align: center; } #sidebar h2 { margin: 5px 0 0; padding: 0; } h3 { padding: 0; margin: 30px 0 0; } h3.comments { padding: 0; margin: 40px auto 20px ; } /* End Headers */ /* Begin Images */ p img { padding: 0; max-width: 100%; } /* Using 'class="alignright"' on an image will (who would've thought?!) align the image to the right. And using 'class="centered', will of course center the image. This is much better than using align="center", being much more futureproof (and valid) */ img.centered { display: block; margin-left: auto; margin-right: auto; } img.alignright { padding: 4px; margin: 0 0 2px 7px; display: inline; } img.alignleft { padding: 4px; margin: 0 7px 2px 0; display: inline; } .alignright { float: right; } .alignleft { float: left } /* End Images */ /* Begin Lists Special stylized non-IE bullets Do not work in Internet Explorer, which merely default to normal bullets. */ html>body .entry ul { margin-left: 0px; padding: 0 0 0 30px; list-style: none; padding-left: 10px; text-indent: -10px; } html>body .entry li { margin: 7px 0 8px 10px; } .entry ul li:before, #sidebar ul ul li:before { content: "\00BB \0020"; } .entry ol { padding: 0 0 0 35px; margin: 0; } .entry ol li { margin: 0; padding: 0; } .postmetadata ul, .postmetadata li { display: inline; list-style-type: none; list-style-image: none; } #sidebar ul, #sidebar ul ol { margin: 0; padding: 0; } #sidebar ul li { list-style-type: none; list-style-image: none; margin-bottom: 15px; } #sidebar ul p, #sidebar ul select { margin: 5px 0 8px; } #sidebar ul ul, #sidebar ul ol { margin: 5px 0 0 10px; } #sidebar ul ul ul, #sidebar ul ol { margin: 0 0 0 10px; } ol li, #sidebar ul ol li { list-style: decimal outside; } #sidebar ul ul li, #sidebar ul ol li { margin: 3px 0 0; padding: 0; } /* End Entry Lists */ /* Begin Form Elements */ #searchform { margin: 10px auto; padding: 5px 3px; text-align: center; } #sidebar #searchform #s { width: 108px; padding: 2px; } #sidebar #searchsubmit { padding: 1px; } .entry form { /* This is mainly for password protected posts, makes them look better. */ text-align:center; } select { width: 130px; } #commentform input { width: 170px; padding: 2px; margin: 5px 5px 1px 0; } #commentform textarea { width: 100%; padding: 2px; } #commentform #submit { margin: 0; float: right; } /* End Form Elements */ /* Begin Comments*/ .alt { margin: 0; padding: 10px; } .commentlist { padding: 0; text-align: justify; } .commentlist li { margin: 15px 0 3px; padding: 5px 10px 3px; list-style: none; } .commentlist p { margin: 10px 5px 10px 0; } #commentform p { margin: 5px 0; } .nocomments { text-align: center; margin: 0; padding: 0; } .commentmetadata { margin: 0; display: block; } /* End Comments */ /* Begin Sidebar */ #sidebar { padding: 20px 0 10px 0; margin-left: 545px; width: 190px; } #sidebar form { margin: 0; } /* End Sidebar */ /* Begin Calendar */ #wp-calendar { empty-cells: show; margin: 10px auto 0; width: 155px; } #wp-calendar #next a { padding-right: 10px; text-align: right; } #wp-calendar #prev a { padding-left: 10px; text-align: left; } #wp-calendar a { display: block; } #wp-calendar caption { text-align: center; width: 100%; } #wp-calendar td { padding: 3px 0; text-align: center; } #wp-calendar td.pad:hover { /* Doesn't work in IE */ background-color: #fff; } /* End Calendar */ /* Begin Various Tags & Classes */ acronym, abbr, span.caps { cursor: help; } acronym, abbr { border-bottom: 1px dashed #999; } blockquote { margin: 15px 30px 0 10px; padding-left: 20px; border-left: 5px solid #ddd; } blockquote cite { margin: 5px 0 0; display: block; } .center { text-align: center; } hr { display: none; } a img { border: none; } .navigation { display: block; text-align: center; margin-top: 10px; margin-bottom: 60px; } /* End Various Tags & Classes*/ /* "Daisy, Daisy, give me your answer do. I'm half crazy all for the love of you. It won't be a stylish marriage, I can't afford a carriage. But you'll look sweet upon the seat of a bicycle built for two." */ 0wordpress/wp-content/themes/default/.svn/entries 8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/themes/default svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 searchform.php file 2008-11-20T16:30:41.000000Z 421868b40cf642d7cc459f5fc5f6d65c 2008-10-28T18:17:06.112729Z 97 paul footer.php file 2008-11-20T16:30:41.000000Z 93f1326a3c1a303f126814a45ce8b648 2008-10-28T18:17:06.112729Z 97 paul style.css file 2008-11-20T16:30:41.000000Z 36b82ca45a48f71402d4267aed5a9e83 2008-10-28T18:17:06.112729Z 97 paul rtl.css file 2008-11-20T16:30:41.000000Z 3fc099e3ba26c1e394b206ded76dc8de 2008-10-28T18:17:06.112729Z 97 paul archives.php file 2008-11-20T16:30:41.000000Z c261c42107894c1936b5de18e1d9b7d5 2008-10-28T18:17:06.112729Z 97 paul search.php file 2008-11-20T16:30:41.000000Z 68a4d89620eac538a4746576df8d11c0 2008-10-28T18:17:06.112729Z 97 paul index.php file 2008-11-20T16:30:41.000000Z 29dc54c3dcfa0c35e0a83a6b58aaa68c 2008-10-28T18:17:06.112729Z 97 paul 404.php file 2008-11-20T16:30:41.000000Z d307d54d7e504a538ace60e048fb9ae9 2008-10-28T18:17:06.112729Z 97 paul functions.php file 2008-11-20T16:30:41.000000Z 37352b72c24188badd034edd3c306db9 2008-10-28T18:17:06.112729Z 97 paul sidebar.php file 2008-11-20T16:30:41.000000Z 921a5e381ac173d96d65421e138c2cd5 2008-10-28T18:17:06.112729Z 97 paul screenshot.png file 2008-11-20T16:30:41.000000Z a4f53fe2cca5d931ce3bf413156dcf52 2008-10-28T18:17:06.112729Z 97 paul has-props page.php file 2008-11-20T16:30:41.000000Z 1137a01393518e9973851508a9206dfa 2008-10-28T18:17:06.112729Z 97 paul images dir links.php file 2008-11-20T16:30:41.000000Z 585df781b818864ff210700ab671919b 2008-10-28T18:17:06.112729Z 97 paul single.php file 2008-11-20T16:30:41.000000Z 8caf7d62763fdecf99ddd6f923b77498 2008-10-28T18:17:06.112729Z 97 paul archive.php file 2008-11-20T16:30:41.000000Z 31ae3879140f2cfc60df45b076131367 2008-10-28T18:17:06.112729Z 97 paul comments.php file 2008-11-20T16:30:41.000000Z de6ff6a83aff6ba36937a48df70f14a0 2008-10-28T18:17:06.112729Z 97 paul comments-popup.php file 2008-11-20T16:30:41.000000Z 90b826e812b5d61c10aa5fd302f0b158 2008-10-28T18:17:06.112729Z 97 paul header.php file 2008-11-20T16:30:41.000000Z db7579651d5e5db11bd84c65c526668d 2008-10-28T18:17:06.112729Z 97 paul attachment.php file 2008-11-20T16:30:41.000000Z c02bc18b807d206cfec90042069bd170 2008-10-28T18:17:06.112729Z 97 paul /wordpress/wp-content/themes/default/.svn/format8 Jwordpress/wp-content/themes/default/.svn/prop-base/screenshot.png.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Cwordpress/wp-content/themes/default/.svn/text-base/404.php.svn-base

    Error 404 - Not Found

    Gwordpress/wp-content/themes/default/.svn/text-base/archive.php.svn-base

    Archive for the ‘’ Category

    Archive for

    Archive for

    Archive for

    Author Archive

    Blog Archives

    Not Found

    Hwordpress/wp-content/themes/default/.svn/text-base/archives.php.svn-base`

    Archives by Month:

    Archives by Subject:

    Jwordpress/wp-content/themes/default/.svn/text-base/attachment.php.svn-base A
    ID, true, array(450, 800)); // This also populates the iconsize for the next line ?> ID); $classname = ($_post->iconsize[0] <= 128 ? 'small' : '') . 'attachment'; // This lets us style narrow icons specially ?>

    post_parent); ?> »


    guid); ?>

    Read the rest of this entry »

    '); ?> '

    Pages: ', 'after' => '

    ', 'next_or_number' => 'number')); ?>

    Sorry, no attachments matched your criteria.

    Hwordpress/wp-content/themes/default/.svn/text-base/comments.php.svn-basepost_password)) { // if there's a password if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie ?>

    This post is password protected. Enter the password to view comments.

    to “

    1. id="comment-"> Says: comment_approved == '0') : ?> Your comment is awaiting moderation.
    comment_status) : ?>

    Comments are closed.

    comment_status) : ?>

    Leave a Reply

    You must be logged in to post a comment.

    Logged in as . Logout »

    ID); ?>
    Nwordpress/wp-content/themes/default/.svn/text-base/comments-popup.php.svn-base$ <?php echo get_option('blogname'); ?> - Comments on <?php the_title(); ?>

    Comments

    RSS feed for comments on this post.

    ping_status) { ?>

    The URL to TrackBack this entry is:

    post_password) && $_COOKIE['wp-postpass_'. COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie echo(get_the_password_form()); } else { ?>
    1. by @

    No comments yet.

    comment_status) { ?>

    Leave a comment

    Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed:

    Logged in as . Logout »

    " />


    ID); ?>

    Sorry, the comment form is closed at this time.

    Powered by Wordpress

    Fwordpress/wp-content/themes/default/.svn/text-base/footer.php.svn-base
    Iwordpress/wp-content/themes/default/.svn/text-base/functions.php.svn-baseBd '
  • ', 'after_widget' => '
  • ', 'before_title' => '

    ', 'after_title' => '

    ', )); function kubrick_head() { $head = "\n"; if ( '' != $output ) echo $head . $output . $foot; } add_action('wp_head', 'kubrick_head'); function kubrick_header_image() { return apply_filters('kubrick_header_image', get_option('kubrick_header_image')); } function kubrick_upper_color() { if (strpos($url = kubrick_header_image_url(), 'header-img.php?') != false) { parse_str(substr($url, strpos($url, '?') + 1), $q); return $q['upper']; } else return '69aee7'; } function kubrick_lower_color() { if (strpos($url = kubrick_header_image_url(), 'header-img.php?') != false) { parse_str(substr($url, strpos($url, '?') + 1), $q); return $q['lower']; } else return '4180b6'; } function kubrick_header_image_url() { if ( $image = kubrick_header_image() ) $url = get_template_directory_uri() . '/images/' . $image; else $url = get_template_directory_uri() . '/images/kubrickheader.jpg'; return $url; } function kubrick_header_color() { return apply_filters('kubrick_header_color', get_option('kubrick_header_color')); } function kubrick_header_color_string() { $color = kubrick_header_color(); if ( false == $color ) return 'white'; return $color; } function kubrick_header_display() { return apply_filters('kubrick_header_display', get_option('kubrick_header_display')); } function kubrick_header_display_string() { $display = kubrick_header_display(); return $display ? $display : 'inline'; } add_action('admin_menu', 'kubrick_add_theme_page'); function kubrick_add_theme_page() { if ( $_GET['page'] == basename(__FILE__) ) { if ( 'save' == $_REQUEST['action'] ) { check_admin_referer('kubrick-header'); if ( isset($_REQUEST['njform']) ) { if ( isset($_REQUEST['defaults']) ) { delete_option('kubrick_header_image'); delete_option('kubrick_header_color'); delete_option('kubrick_header_display'); } else { if ( '' == $_REQUEST['njfontcolor'] ) delete_option('kubrick_header_color'); else { $fontcolor = preg_replace('/^.*(#[0-9a-fA-F]{6})?.*$/', '$1', $_REQUEST['njfontcolor']); update_option('kubrick_header_color', $fontcolor); } if ( preg_match('/[0-9A-F]{6}|[0-9A-F]{3}/i', $_REQUEST['njuppercolor'], $uc) && preg_match('/[0-9A-F]{6}|[0-9A-F]{3}/i', $_REQUEST['njlowercolor'], $lc) ) { $uc = ( strlen($uc[0]) == 3 ) ? $uc[0]{0}.$uc[0]{0}.$uc[0]{1}.$uc[0]{1}.$uc[0]{2}.$uc[0]{2} : $uc[0]; $lc = ( strlen($lc[0]) == 3 ) ? $lc[0]{0}.$lc[0]{0}.$lc[0]{1}.$lc[0]{1}.$lc[0]{2}.$lc[0]{2} : $lc[0]; update_option('kubrick_header_image', "header-img.php?upper=$uc&lower=$lc"); } if ( isset($_REQUEST['toggledisplay']) ) { if ( false == get_option('kubrick_header_display') ) update_option('kubrick_header_display', 'none'); else delete_option('kubrick_header_display'); } } } else { if ( isset($_REQUEST['headerimage']) ) { check_admin_referer('kubrick-header'); if ( '' == $_REQUEST['headerimage'] ) delete_option('kubrick_header_image'); else { $headerimage = preg_replace('/^.*?(header-img.php\?upper=[0-9a-fA-F]{6}&lower=[0-9a-fA-F]{6})?.*$/', '$1', $_REQUEST['headerimage']); update_option('kubrick_header_image', $headerimage); } } if ( isset($_REQUEST['fontcolor']) ) { check_admin_referer('kubrick-header'); if ( '' == $_REQUEST['fontcolor'] ) delete_option('kubrick_header_color'); else { $fontcolor = preg_replace('/^.*?(#[0-9a-fA-F]{6})?.*$/', '$1', $_REQUEST['fontcolor']); update_option('kubrick_header_color', $fontcolor); } } if ( isset($_REQUEST['fontdisplay']) ) { check_admin_referer('kubrick-header'); if ( '' == $_REQUEST['fontdisplay'] || 'inline' == $_REQUEST['fontdisplay'] ) delete_option('kubrick_header_display'); else update_option('kubrick_header_display', 'none'); } } //print_r($_REQUEST); wp_redirect("themes.php?page=functions.php&saved=true"); die; } add_action('admin_head', 'kubrick_theme_page_head'); } add_theme_page(__('Customize Header'), __('Header Image and Color'), 'edit_themes', basename(__FILE__), 'kubrick_theme_page'); } function kubrick_theme_page_head() { ?>

    '.__('Options saved.').'

    '; ?>


    red', '#FF0000', 'rgb(255, 0, 0)'); ?>
    #FF0000', '#F00'); ?>
    #FF0000', '#F00'); ?>

    Fwordpress/wp-content/themes/default/.svn/text-base/header.php.svn-baseg > <?php bloginfo('name'); ?> <?php if ( is_single() ) { ?> » Blog Archive <?php } ?> <?php wp_title(); ?>

    Ewordpress/wp-content/themes/default/.svn/text-base/index.php.svn-base

    Not Found

    Sorry, but you are looking for something that isn't here.

    Ewordpress/wp-content/themes/default/.svn/text-base/links.php.svn-base

    Links:

    Dwordpress/wp-content/themes/default/.svn/text-base/page.php.svn-baseh

    Read the rest of this page »

    '); ?> '

    Pages: ', 'after' => '

    ', 'next_or_number' => 'number')); ?>
    ', '

    '); ?>
    Cwordpress/wp-content/themes/default/.svn/text-base/rtl.css.svn-based/* Based on Arabic (RTL) version of Kubrick theme, converted by Serdal (Serdal.com) */ .narrowcolumn, .alignleft, .widecolumn .smallattachment { float: right; } .alignright, #commentform #submit { float: left; } #page, #wp-calendar #prev a { text-align: right; } body, #commentform p { font-family: Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } small { font-family: Tahoma, Arial, Helvetica, Sans-Serif; } .commentlist li, #commentform input, #commentform textarea { font: 0.9em Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } #sidebar { font: 1em Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } #wp-calendar caption { font: bold 1.3em Tahoma, 'Lucida Grande', Verdana, Arial, Sans-Serif; } #header { margin: 0 1px 0 0; } .narrowcolumn { padding: 0 45px 20px 0; } .widecolumn { margin: 5px 150px 0 0; } .widecolumn .smallattachment { margin: 5px 0px 5px 5px; } .postmetadata { clear: right; } img.alignright { margin: 0 7px 2px 0; } img.alignleft { margin: 0 0 2px 7px; } .entry ol { padding: 0 35px 0 0; } #sidebar ul ul, #sidebar ul ol { margin: 5px 10px 0 0; } #sidebar ul ul ul, #sidebar ul ol { margin: 0 10px 0 0; } #commentform input { margin: 5px 0 1px 5px; } .commentlist p { margin: 10px 0 10px 5px; } #sidebar { margin-right: 545px; } #wp-calendar #prev a, html>body .entry ul { padding-right: 10px; } html>body .entry li { margin: 7px 10px 8px 0; } html>body .entry ul { margin-right: 0px; padding: 0 30px 0 0; } blockquote { margin: 15px 10px 0 30px; padding-right: 20px; border-right: 5px solid #ddd; } #wp-calendar #next a { padding-left: 10px; text-align: left; } Jwordpress/wp-content/themes/default/.svn/text-base/screenshot.png.svn-base)pPNG  IHDR,ExgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEYID`Qe8z̸㺶Ǻ]ت莳ùa^`Nh씚¤g˧ʳ簣zәzoýcMǾ줾}slóΤX~}FOсoj^lGddw&~Y3 LB~9sΙ%l/8 X lP9|,'@GTK1@MB)} P Yh7 ,x>S"<8_ X X/uˀe X_ퟝ`ík2`Օ``0`86`]?{0`rX/u𳳺aXW 'ts~g̅ |P<-O}~~ۇkuo{tԹ}|٧7n<5 йm+™)mϝ;?1H8=4wp0 ;嫯/ݠ|~@sP_ k抵92:OfLYӣz~΄ר1dQguez^IEz_VݷU@ul͑s|T,z~y_ ʳ,~7fŹKuBh$@ANPvwo.>(:=r NZɣ|`VE|yk`\Uk` ^,|M  ܀\GӳLWw e  ̵ UT&/f' \v_Y$zi\;V̀ `Ujf^ՙ۬jYXGiy6bL;͊i{l b wpv68v\>n{ȭ(6:xq|3\fbX o=)Ο^'+uᛇէw^BX8l; @t^itN̫vga ͅ.>µםΓ_w./,,?y89~p7;pO<^;;:,8>~hεZί:ξ_g3vuܯι3_;Nc3t~yx8tېeAܡε|sZB /`9D;_g;xgy ݛU=v,;_: vW~XdW^zÝ;7g`oW/v~Y]xΣW77yzUyn޹pǏ=sMK_ Ûp[}q^M2$~࡞N/{%X7pX4`>4`]?{0`#\u=ggO֗2`_?`2`]K0U`I_ \i:y\.dSXx5.5o ˥}`2` X,֏ Bau/f Xcc8t9a`&?, e8Nfd]p>KRKY>²Qhw%"Zͧ>{\$ 2+/}%iGkՍ jAՏI:WZw6hDoDgvjfej]^Z_˕:IT Ia=։|x~oyPA4{p^dA:!ӝ5ܝrgD~- WªJ&Di1eE$!o BEـ ;%H[R"HhjRGL_ ʦ2{P@ &K9x}<)h~&|օ7`]gCzQu7l@m2 "*]ɀ!,od+I3~΃~?a[GLQ>j,)#o9:`16?ٯl#mLކ" XRշr<⌞/(p9$ X ”%XR#3`!h8G?hؒګV.FPGMƴQ>,0̶[~ic@a ~,}ڲFg|n%1l(e[+a*6gP2mJSt"FLXڨ`gk>.? I'QǪ:-F_ xT+B*miN sVNP&h>c4Fҹ1U@(A!4?#;^Q.Т$M(4.J-7>^-<펇sJF: 4<09EB2 Q;jQ$[lY(LŢDl+iT kgE܉q^mq#U-k ?o4Ň@E!»K Kn+^&TkV? Rt'UBv~H3z RF'xoyjPVFŶJ|FeV2'$̟tͤ0UcRꬉ2^hWe9m]Kd哐EKHLf1גh^GKMF>Ȕ$3xd&l;L*sעO*x D.i5ro՟&ְ0Mlgdrg?f]u(F~P㠴wYf q"*f?,'di$Q}_x-,)k$\nGϗ~;TWz0ỳo >A+Ѱ˛0jE>*cb d%@%sbn&ZRh);Fd·-:ZlBne#^߳⾾o0fb$YBf0dmP`@ݓ@1/m}5Չ92`e"GԀBjEuif&`Dj}ҬrMDq5'ЮzC?fCڀe2`Ori Xk)Nxh8WUf Xǩq!W }Sz9$z9\\6]ގM*ˁ*3=~\ rOqy8Gx_S>ea>?K|HlX Qdr-\Z&&hGLn 11[`Km 47~~MN rpMjc]yiDKJ懰@"}:2^bOO55":5 ai  L.<,~ @oDDHY`pF:[KV|zKp1'hFj~O`rVBO V_8N |<1cr*_h;x{cTL<p}z3vȯcEXTΗ4N „4[x?&)Fws -ģno3}kF h>`}_Oـ&%Biɯ\} & < h]Pe:Xjp9B }[i%R m|kQ%pe|"C^vh.+3]: >A+sN)uEMbX#^;]raI t eUMQ+ l0]˕\wԼlW2R@̖6I#\ܽpME(kd۵d1Ԫ..pr?[ղ~Gu^pߟEF*O' D8oE wԊ%SٲӠbBkۛGiz?FT3#JkYQƎpF-' S.&yj0KVvCqrѹ=;ngbSvXzocJkأy[+ zqp7TTm(ԕhrAte[FKmyHJpiP*Q6>F'yRpD8cжB+u<WÒkάs|i>+DrW7LY-)дJuc@(aڦ=Ss fˉL.5ǣoIsߣ!D0AX0G14)*Oc^rN& >;#:߃GFܒki+ D=!2srOr-b}jHqwQ}v/m,Os̘2VJW/PE&B2Ztef-sCgm<;FYpJ?Y eD1yʄGt #kF'5 X ֵG%rCV\u]M&]فhbP3UFeak7E!edΆ +M-xD1ʅ-Lf(\ @@b#qчmm}/Y%[.?Z4iNi$9˸Niϛ鸹h2BQk"6QKD)ɍְ`~--:HBzok,JQO ch!B>\ύMWQ|iLS&K-5Z9)ZfJm k,a2/Hh~Ų4WߢTZ"T,W*Qxdo41שBn?#[ 8آcd-ҥְϷk;(x;[:߈l QiJiYervTĠq M[J|&'?.{8h@f$+c1{uqknDAhY鸖 ,6[ZkJKdh&6ؔMFeUɥY$͉mW43fHR)fNůDYۀ|dS*YԸjQZܴ, Om$/~oSp=l. ,;:0Jx͔hLzT7{"Qjο`qՍfJ~ A5j&f{ $s%`^Kt<mFݠa>YY鋵JK~6n"#BL'FcZFUpX>pphq%'|oB){o7\MRSM_.j{Ze;ן^Vh҃#Rb:v15Tr f4XE[=m;bFroK45[N$mȠE* Y*P"m\UtHhqTM^B3}rnτ f$Kq̛Z2 @Mp2phqU"K~J|=K}wkh53rm;3ELj`Yk[.^Bp 389j?l5H2V٥[kW_5x05WSXXDlIdQD`vYc #Uְpª/<a*DqD~ !z=VR%.`\L<wGؐ/=z^wI;1 wkMs[/Z%٨޾dm-D\o*YɨWk8fG+ IHeUeؕ2?nQakX8` ^HUbX1C-G g\-blT̊' Q"1v#Sô-w}az۳\A][ef5?2h>o+tkџvN=Ӎ-z%צ2 4137sdqeϲ` #"[:20;h5ve5wKa RHeOktsH.Xbm; >xE4+]DJV[}IBG(?,Vstn ȲffY}d0^%(Qc[4!K=p6lTr*5ܪM5W~kuE٥i6!hfѰow)5Ef"Lgę%F8l+5["7,ٚF_G!t[Q3$;ԶMÙ-:LNh$e˲퓒gN_iŅ'0X:3ჹ_1MZ'l .yKg\WBO/ok/M>sWYz[]KCnUcP5Q{<5{T1٢x+ o5I{l_wQ#k-BHi7GU|I~#&1tXl'9+-IENDB`Jwordpress/wp-content/themes/default/.svn/text-base/searchform.php.svn-base
    Fwordpress/wp-content/themes/default/.svn/text-base/search.php.svn-base

    Search Results

    No posts found. Try a different search?

    Gwordpress/wp-content/themes/default/.svn/text-base/sidebar.php.svn-base g Fwordpress/wp-content/themes/default/.svn/text-base/single.php.svn-base V

    Read the rest of this entry »

    '); ?> '

    Pages: ', 'after' => '

    ', 'next_or_number' => 'number')); ?>

    Sorry, no posts matched your criteria.

    Ewordpress/wp-content/themes/default/.svn/text-base/style.css.svn-base#^/* Theme Name: WordPress Default Theme URI: http://wordpress.org/ Description: The default WordPress theme based on the famous Kubrick. Version: 1.6 Author: Michael Heilemann Author URI: http://binarybonsai.com/ Kubrick v1.5 http://binarybonsai.com/kubrick/ This theme was designed and built by Michael Heilemann, whose blog you will find at http://binarybonsai.com/ The CSS, XHTML and design is released under GPL: http://www.opensource.org/licenses/gpl-license.php */ /* Begin Typography & Colors */ body { font-size: 62.5%; /* Resets 1em to 10px */ font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; background: #d5d6d7 url('images/kubrickbgcolor.jpg'); color: #333; text-align: center; } #page { background-color: white; border: 1px solid #959596; text-align: left; } #header { background: #73a0c5 url('images/kubrickheader.jpg') no-repeat bottom center; } #headerimg { margin: 7px 9px 0; height: 192px; width: 740px; } #content { font-size: 1.2em } .widecolumn .entry p { font-size: 1.05em; } .narrowcolumn .entry, .widecolumn .entry { line-height: 1.4em; } .widecolumn { line-height: 1.6em; } .narrowcolumn .postmetadata { text-align: center; } .alt { background-color: #f8f8f8; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; } #footer { background: #eee url('images/kubrickfooter.jpg') no-repeat top; border: none; } small { font-family: Arial, Helvetica, Sans-Serif; font-size: 0.9em; line-height: 1.5em; } h1, h2, h3 { font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif; font-weight: bold; } h1 { font-size: 4em; text-align: center; } #headerimg .description { font-size: 1.2em; text-align: center; } h2 { font-size: 1.6em; } h2.pagetitle { font-size: 1.6em; } #sidebar h2 { font-family: 'Lucida Grande', Verdana, Sans-Serif; font-size: 1.2em; } h3 { font-size: 1.3em; } h1, h1 a, h1 a:hover, h1 a:visited, #headerimg .description { text-decoration: none; color: white; } h2, h2 a, h2 a:visited, h3, h3 a, h3 a:visited { color: #333; } h2, h2 a, h2 a:hover, h2 a:visited, h3, h3 a, h3 a:hover, h3 a:visited, #sidebar h2, #wp-calendar caption, cite { text-decoration: none; } .entry p a:visited { color: #b85b5a; } .commentlist li, #commentform input, #commentform textarea { font: 0.9em 'Lucida Grande', Verdana, Arial, Sans-Serif; } .commentlist li { font-weight: bold; } .commentlist cite, .commentlist cite a { font-weight: bold; font-style: normal; font-size: 1.1em; } .commentlist p { font-weight: normal; line-height: 1.5em; text-transform: none; } #commentform p { font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif; } .commentmetadata { font-weight: normal; } #sidebar { font: 1em 'Lucida Grande', Verdana, Arial, Sans-Serif; } small, #sidebar ul ul li, #sidebar ul ol li, .nocomments, .postmetadata, blockquote, strike { color: #777; } code { font: 1.1em 'Courier New', Courier, Fixed; } acronym, abbr, span.caps { font-size: 0.9em; letter-spacing: .07em; } a, h2 a:hover, h3 a:hover { color: #06c; text-decoration: none; } a:hover { color: #147; text-decoration: underline; } #wp-calendar #prev a, #wp-calendar #next a { font-size: 9pt; } #wp-calendar a { text-decoration: none; } #wp-calendar caption { font: bold 1.3em 'Lucida Grande', Verdana, Arial, Sans-Serif; text-align: center; } #wp-calendar th { font-style: normal; text-transform: capitalize; } /* End Typography & Colors */ /* Begin Structure */ body { margin: 0 0 20px 0; padding: 0; } #page { background-color: white; margin: 20px auto; padding: 0; width: 760px; border: 1px solid #959596; } #header { background-color: #73a0c5; margin: 0 0 0 1px; padding: 0; height: 200px; width: 758px; } #headerimg { margin: 0; height: 200px; width: 100%; } .narrowcolumn { float: left; padding: 0 0 20px 45px; margin: 0px 0 0; width: 450px; } .widecolumn { padding: 10px 0 20px 0; margin: 5px 0 0 150px; width: 450px; } .post { margin: 0 0 40px; text-align: justify; } .post hr { display: block; } .widecolumn .post { margin: 0; } .narrowcolumn .postmetadata { padding-top: 5px; } .widecolumn .postmetadata { margin: 30px 0; } .widecolumn .smallattachment { text-align: center; float: left; width: 128px; margin: 5px 5px 5px 0px; } .widecolumn .attachment { text-align: center; margin: 5px 0px; } .postmetadata { clear: left; } #footer { padding: 0; margin: 0 auto; width: 760px; clear: both; } #footer p { margin: 0; padding: 20px 0; text-align: center; } /* End Structure */ /* Begin Headers */ h1 { padding-top: 70px; margin: 0; } h2 { margin: 30px 0 0; } h2.pagetitle { margin-top: 30px; text-align: center; } #sidebar h2 { margin: 5px 0 0; padding: 0; } h3 { padding: 0; margin: 30px 0 0; } h3.comments { padding: 0; margin: 40px auto 20px ; } /* End Headers */ /* Begin Images */ p img { padding: 0; max-width: 100%; } /* Using 'class="alignright"' on an image will (who would've thought?!) align the image to the right. And using 'class="centered', will of course center the image. This is much better than using align="center", being much more futureproof (and valid) */ img.centered { display: block; margin-left: auto; margin-right: auto; } img.alignright { padding: 4px; margin: 0 0 2px 7px; display: inline; } img.alignleft { padding: 4px; margin: 0 7px 2px 0; display: inline; } .alignright { float: right; } .alignleft { float: left } /* End Images */ /* Begin Lists Special stylized non-IE bullets Do not work in Internet Explorer, which merely default to normal bullets. */ html>body .entry ul { margin-left: 0px; padding: 0 0 0 30px; list-style: none; padding-left: 10px; text-indent: -10px; } html>body .entry li { margin: 7px 0 8px 10px; } .entry ul li:before, #sidebar ul ul li:before { content: "\00BB \0020"; } .entry ol { padding: 0 0 0 35px; margin: 0; } .entry ol li { margin: 0; padding: 0; } .postmetadata ul, .postmetadata li { display: inline; list-style-type: none; list-style-image: none; } #sidebar ul, #sidebar ul ol { margin: 0; padding: 0; } #sidebar ul li { list-style-type: none; list-style-image: none; margin-bottom: 15px; } #sidebar ul p, #sidebar ul select { margin: 5px 0 8px; } #sidebar ul ul, #sidebar ul ol { margin: 5px 0 0 10px; } #sidebar ul ul ul, #sidebar ul ol { margin: 0 0 0 10px; } ol li, #sidebar ul ol li { list-style: decimal outside; } #sidebar ul ul li, #sidebar ul ol li { margin: 3px 0 0; padding: 0; } /* End Entry Lists */ /* Begin Form Elements */ #searchform { margin: 10px auto; padding: 5px 3px; text-align: center; } #sidebar #searchform #s { width: 108px; padding: 2px; } #sidebar #searchsubmit { padding: 1px; } .entry form { /* This is mainly for password protected posts, makes them look better. */ text-align:center; } select { width: 130px; } #commentform input { width: 170px; padding: 2px; margin: 5px 5px 1px 0; } #commentform textarea { width: 100%; padding: 2px; } #commentform #submit { margin: 0; float: right; } /* End Form Elements */ /* Begin Comments*/ .alt { margin: 0; padding: 10px; } .commentlist { padding: 0; text-align: justify; } .commentlist li { margin: 15px 0 3px; padding: 5px 10px 3px; list-style: none; } .commentlist p { margin: 10px 5px 10px 0; } #commentform p { margin: 5px 0; } .nocomments { text-align: center; margin: 0; padding: 0; } .commentmetadata { margin: 0; display: block; } /* End Comments */ /* Begin Sidebar */ #sidebar { padding: 20px 0 10px 0; margin-left: 545px; width: 190px; } #sidebar form { margin: 0; } /* End Sidebar */ /* Begin Calendar */ #wp-calendar { empty-cells: show; margin: 10px auto 0; width: 155px; } #wp-calendar #next a { padding-right: 10px; text-align: right; } #wp-calendar #prev a { padding-left: 10px; text-align: left; } #wp-calendar a { display: block; } #wp-calendar caption { text-align: center; width: 100%; } #wp-calendar td { padding: 3px 0; text-align: center; } #wp-calendar td.pad:hover { /* Doesn't work in IE */ background-color: #fff; } /* End Calendar */ /* Begin Various Tags & Classes */ acronym, abbr, span.caps { cursor: help; } acronym, abbr { border-bottom: 1px dashed #999; } blockquote { margin: 15px 30px 0 10px; padding-left: 20px; border-left: 5px solid #ddd; } blockquote cite { margin: 5px 0 0; display: block; } .center { text-align: center; } hr { display: none; } a img { border: none; } .navigation { display: block; text-align: center; margin-top: 10px; margin-bottom: 60px; } /* End Various Tags & Classes*/ /* "Daisy, Daisy, give me your answer do. I'm half crazy all for the love of you. It won't be a stylish marriage, I can't afford a carriage. But you'll look sweet upon the seat of a bicycle built for two." */ (wordpress/wp-content/themes/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/themes svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 classic dir default dir 'wordpress/wp-content/themes/.svn/format8 .wordpress/wp-content/uploads/2007/10/audio.jpg?JFIFddDuckyPAdobed      `` !1Aaq"Q2R#bBr$!1AQaq2R3r4 ?꯼e,x bY[-40]|ͻOCјfe7S~-oX{\bҗwݵ2^Kys-̗k%4fbI?(JI^~:GET ,glBF"tc?G]\7Њ, ;h]u8F貀:E~Qn]kq\Ik%C"hJNQy=oZF\=E=6?}_>u_Z5Tǁ #EE>`$҆-ŽB.),bAuc!2)Xo ftWңs(8סivI2XMO u-/퍒ɐz8 tˣe}K?>*Ϲ%#hBzBp,1VZIn awFCO"g'ǡVrpkF.bccAaTuY^\p"`kHǾv/X?Yvׯ(4+qF/aTws[k]C$`y{ RHLEO3e'r`,箶2uLn 4YVCgI32XXK.~7-0cu;]ow٭-yn4\fVz}-g2`46TDe{^d}Y$VTPզ82lڞe-kR]YHzB;箄-EPcJ)]]6\e-+HZUpvBAۡ;GBBzܨP >ru2[TV|i4 ;8Ao*#jUe`{U O\lhƁVRc,||WTi?ī|<nWW}80Cvf9cJ[x#xkDzaVe8- ;K xܛ5$[2nݸ} ר6Bߞcfw@φTGsᢨGsᢨGsᢨZqOcywXO%(,LQԏ0 68.+ӚZH7 S]^SQA$@ˍ^b3rlOfp2㗫ۻO |GgA)} &H Z&a@-Nwƾٶ-wordpress/wp-content/uploads/2007/10/f351.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ-wordpress/wp-content/uploads/2007/10/f352.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ-wordpress/wp-content/uploads/2007/10/f353.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ-wordpress/wp-content/uploads/2007/10/f354.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ-wordpress/wp-content/uploads/2007/10/f355.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ-wordpress/wp-content/uploads/2007/10/f356.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ-wordpress/wp-content/uploads/2007/10/f357.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ,wordpress/wp-content/uploads/2007/10/f35.JPG%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶ.wordpress/wp-content/uploads/2007/10/fight.jpgNTJFIFddDucky3Adobed     "!!!"&&&&&&&&&&   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!1AQaq"2RBbr#3S$CcsD%TdE!1AQa"2 ?ܸdq΁ F h וVOPO. 5 9ύP4R8%Q8T*D1g@F*.杴4(u`J\遂N|( j hf()\Z}AG&"$b~T} +~X/cVU?նsF=\bQbu-K%^Zp,e^w]g6n.틞bsHv)Vaqn5FS7|kZ٭'l鍡uSW@<(J|( ;ֈx@::WPt;jxʊGur4JBD2m#/w:@9QL.UЊ_iyPddxZZNM"";E(ONT* ʀN0`P@` 9 :nW/atȀ 'dkk޺E̝^'Pe^5\mlN`u*5sP4@ ͹/6Wی[1y4@z%|3ynMݨin$bjbve%+ncNwOiLi,|. 6Ae3ftMsmɃHio}o+Ƀ9"-c2v~%--46fآ[(H{vJxs k{Ko MqTkU-F݋ֈl1yLUwdKը<@p8uN~!/ƁL>ՕPj ' jܔ NC@}PEQS,GxE1X0M묁,iǝQkl9T4Pq}}@AjXxւ,Zj'*GӶ P-E28g֪u@5A'@&IP\>9t>g둷ﯚwݼw4FpPo8K[ykaˏsu˝}M)mlakb~AaΞ̺6W~c7vۓ6G`a:Tg_-k-(R8-J j7[sfvښpӎ(*l]>b{_ip5E(p{HT@Wˏ\/=FAi r/zV>Ysb,/o.ݼ{Abkɖ:Վd-ilk<X?ykW|T;uۘ!VZ㟩?|c-q^k@稷*Ƌ[[\;cPxi:iU CCFX!("=M-HJT ځoZϺxrˆ1ax{($1{)e4H  xwqa{cUՄ(ʠ=4 0jA5p1M\@ǟȫ h,H0nϴF7KZEk\[iĥ:E/̏F>+0p4e@|nlQ$UDD ׾ŋw=w5̉#Dn!<O׃;OMCZ]^=]- 55\k^ѳvö`۰F]W| IAV3=}iÄ9dl5?gCއk^y6m=sF6`^*;+5ZoI5r#s!Π7 Xzvˈv[9$u{K'$vv]"g5??8YnW\x4!@q5/6ۺi|Rޅ K#kQ+iv`yQh'ۅjٱJ5啃{닑N]dQi[6+>=L12#Demf^c΅IcJʝubõK,^t"=A9egFGwcf n^kGD5qVu\6xRz!6`ܵg5۟Pu˧4rt;!%Û)2S ZTX9QSk! P!ÍQOiFF)A-80g#4 7 Eh%qP0ʊmf9'1ΚjQ5Q Ph9ޢbvyLl21M#\pi]8|ksb7d&o!#=\1$1@~["p c1SG?7mn gkdMG+#vK\6K]cV$`qWͲ{nbME|n5-cte{<-F.(+}nקQu3(c\.6-<6S>t֤qYOFv,9\];&񩋯E;n m21z|#VNXU{Vk`jŹ{@J(nAZ5Gy3# 8;" oi"{ݝh8]+$zƂsH,y3uh#2G52$|š~ qHĵ$0 Fk0ˋ-v2y!p !NRgT|jTgAa}iwӠh<\h-}ԝ1i-4S|`!xsJzMSWj SDpҲ`ʈ>':0 E^T @( C@MC8uумMV Κ#MSCM "SqTO<耴'(P-)tW4"SB, ]/Sa?f/ :+t|1*yY 5}ݤ[}".*xrIkg~^/$kuFY5k]D9Ie}b1UN$S]{HA{0)I< ci1)!65<* NG.*9Sq\ҿ5'錞Q83@A}ɚT[[CWA$I%@9I'Ff+VM7\XzZa9l^R.=jTEF_mLxjVoѮʈ59hS7wz4k))ulgCMXzpP( ΚoLyPԩZHrqT#UdL%^ >M׻%<spPsj'JfpV6'KQx;ϢYnyүc 1]gXcWKl0}87`FsLS9{w> s׹tj$c)nW੊& KLb0p)HƁ|сj{5=D>KHi-Hʧcd򛤲ݳGa^и;jtbo|0:+٢`0bOyﻔR70###^}]6tqB4/eOXWevMF$e6X\8Keڳ\)$w]knf1 HLk>29Ui87nLfӍ])hF**C 9QeǕuXcʀU8P h;(hNYT`5/aT$S@@{(ST Қ"@ϝ44.bڈzhi"H~ =Í44{'tv/^`F54Kkvo:O~bc~ug7:U/^ըMԞf7cv$I&}EY{ <J8#r5ˮ,juؚ>i9ir֛v{W4[1 F q:[s& Q=.2 bVy'<cb/nnُjGxbFqTjJ?;Rzϼhh[\tM/D7Rnj[FNr;!q)jMu'}SAvUz0a#P4:jO릨D^u4hxP(€+E (8Dюu`')q\{j)@cAzcU sP({x4CցJ(CD$P @.+@ (Qhu,1vv AFcȜk #Ϙ!g H+]rZ08 )WS[ۙ":Fji:T󫉫leLZ-0sAŮ!) új־R^8 #@zDnn]@.\-  #PIƺsݟ7_[˽Li4o{Z=}:Ċ *{I5rD}nVAk@SPRP~ڪ} {4*(˅p @.=RRNXupPbZE1p PiA`{zh˥PH{j()Ҁ@Ǿ}T4 e( 0\(#@FBpH Fgr r1ql~Sjμ};u7pюY&{\t8U9j ({ڳ/#KYf쥾pu1V(vꛩcmu6kIg̑kC5C]h|e/'Ϝc64412_}o(5`GT "yU gh'x1E0%PD AP>(ƅU*^ P* -14^"=Ɗ\zD0M@SQN@{Π3B*8ƀ43΁)P1@ƒosEm< `tn~<<\+n%fH̑N'hv ל.}U~kEnN~XdM15Zۛ@[Yl ,>,YYX,wci.e VnH7)s uV}c_s l8O)U>5:Mֆʟ}t甴'VМw YP%sFF=8aA%ÕE,^,(#ˆG/xPR }=C ?m = QO#G@PNAykƊ4 ."D=\xP W@P * z#@.4@NT?A@ *%ƃw1]\67M{^]px?4'_ˬKnu3gxe* #~ma<@빈s ZZRm2>F\g! iwp'LGڄ8Rj3ϲi(~ڲbX=u0q.ZU@ύ~pÏ P)E{脜3@.r@@&&t)A>ڊ>˥'9$?CAi<***@Åh_(5C^\(%^9O *ʀ\jU΀Z gc.Ss^Ŷ!D!c+XF/[=s{rx*\UŚڄpkzM WBhK&=i3CZCxR|F$>aWILޏi7IeV&A.GIj2$שk2UI$s8ͫqʴIDžW ZT"/@ \!NÅTRΨXQZ9P5 <cǾY*eU @3}Sj p=gTK!YS}t}hasAk@P=_0jG=ݴ qP!΁Tr sr ƒlV_) ZrA_Q0Vl<=#< d{B+Zƴ⺛k]SӍ*1py$ds=s]h-[E#UX]%ĪÀ̩DuP :C:Ҁ9U@@sU:",*W((Ǿ 0P(_3/ UP  k@{&Z Q@5@rCR:9qxP4 @ih"B}U@Ntr΁>#:N30hqDiT.+F 0\(yRO3AwoS+#)634p7]tU<\AG"cJϻ^_>\׹dj.ò=KXZ_ 9[4Fiŧv/<(Tv-G}P0ƀ(=`8I"b;yP(r;4cpct 8:RT{:)i @mP2@!I@i]YSCϥ0Qqt-Oz8c@|j#c$k\bK |ym.-nftKZA ^^ys'dkap *ckm#wyo5|+nXe>UnzdbIq+AZ'?mk./]=yz=}M ~ҵzf.Yi T1f@·>=k]m9g@b(bN|:TEƀTf( 0,P3D ;AP}(1^A@d80}Z;{(z2Je OW5@s:9xSq׈?]1t.=q4tOYL4e:pjmR3) X7E&0J&t9P1ukUf(>{+//,כY+!k^惥è4FVcA&G7çIHTi-uܶә485 Gx;$ jó[ -#q V.7L6LPDb8UD5}5܂|a8묬.sB{ƈIywP1(04BXiI@9SFE®&=)꾩Z_Sk}OdLUiyk^4Z%JqJNSQ.z'*ת{1=WduUص b{tĵN|\M}pNh{)_D& DٕSFyphS :\ЩƥY_.ըI7N3ZX*Z#h*ۭ3{ 2gfTs5k {dj*Ӈ* 5tĚJ;h$eQ`yЮ /`ӎH`'k<'pGi=0F]j"S T1Ʃ|)=q4\_Okyr8SV)7+8JxfI5i+?P9B ?፩򾖤WAƚO /Y&:Gexzg?D$t,Ȝ A/21A0435I^{ZfzD'gΫw-ǧ2ck5$m_'\ԑyDC/ĵϸiZs}=8 X=Zq#k<}=W՜FM׳I5 Ђ+h㐂O9(OޟpvUuWWmcѱ@[ -ՇmbkS jVi =Ʊ{Hqmt`kBƥꘙbQ)Y7tp[IH1η)cPZ M'.[ KY:vO{,F@s"\|R 㵶aloO&$zq₷woQk6x$)d6Ago?_Y0>2*=x֙CW@Z:[3#:-NBӆ4B_]T4@Ҩ\=v4bL=ϰL]WyY\ < hqFa*YeX׀ wā^ < s)÷*T$'5 PAibԏz 2 WV}͠O85}w Vc?YDm#uВY]ms%Xw&dB<Šֹ%i>~ Js$6D^a0:6pS*-T쒖X\>눉w$td/w F O6wcikLnusFc)A.ISO+9G湘;}QIkWHwPT3N2Q dD(b(9P&Gg΂&7\$_34=\Emj\.¥<+sy^ZhmO*.sX)SLjԬ$ymk4AJyHM1 Ͷby}®ͺǧ$`|͓TLX[hSWM^ k\ۉ8ڸ$v |rVTl:]Bs*Uf6 lGO io{fGfu$h‰[]}~]2B;@'W.2+<qJo΋gGח+񩆇`]=4rǶ4$LF&r ֚UѻMy]hC@ic$M+}OvpYg?Qor7&.fɶj./^a@?uznEo.#LOwy5kmj\'O}][bADik"qC„sBi$eR֖F'Myሦ?N54Lmt%Dٵ`$!ڰqիǝjD#Ak\I`+HRG#}Z#(|#R+; Q.փ3UӨcTW[CP0h |xՂrِ;,:4V4>F("oXL-oDVw/%x"zYQ'Nu Tc<w7k@ Tƨ} ޤ_E(8$壜O0))5ZYY!^=Qon!q#B4˽)gF'ʚ)J1ӡW&Zh=7ozuI)t(lcL_]ex=Y!Ţ79v^k9e5`8ux/:hB"FX4<*Βۜ6l餅F0D.5EvR0l:Mǘak%""ԕ6.xǶ1pVHd8-K<4}(lv/u{Ugn$k?؟ϯC+0{HkC2qtJӎ_i5A+ϭʚi쩪ߚ{籙C-xcb5iBׇOo98Ē\s=k{{ Ǵ | w;ۤm"#<[k6:7PtY)4g?(k߀dqWhj nwPi%˞ֿݽ s0|h! 9U[cI iq rALy[ӯ0c^ևk潊 [h2/y$Jkпief|Ak#PjTSwc冗kh ,FDS^]_.Cj>1uU8@u5D*Bh C:hޅ-&M9;Q\a"i{A X4Κ+?s#!HAeȚ{PKyqm7W:+K r&8psֲK}19~&;4tbL 5mvRONlP~{nj{͗$[Ś.QMuc]WElDGs$AϚI\TfTR?Y6[+͉ApKI %kʰ6E!dI :G"F@o{k#,V?󄤎*<4?'нG6\ױڊ2Pi𿳁[m :h\-/zz۔L1C`CZݫba g7CATW 75W#u8Zюhttl%-c%W{I uc"kXֱjҺwR*Ijۏ_} Ensm2log5'AS6GF7L[8WI_q;x!fdcM/?.k Ω%r"=XǯmO-c$5iLu4`h  ?0 GZϮJ? )d~Pnqoi򄯟x{MvՄ}f\ie1A~-xk{J7=YfRV˖?N_LNj60pU_ϓlVŐDfZp 0׈:MT)P-8USL8L-'LGIi 4Ӆ4e9|3FɡE#Z=6PE*} mK)Svl ~q}+~@X=ԑe͸<ߛg61yVW}TNFI.?2>H J/ʯʳ?x6+scxc~Yn6__z~w)8t]:pam_J{ ݻqY̋-ZSV`*.51}۴n#|R L{`p9CPح64\H xUAގ[}_ie'!ֹ<`n|i*-5 \ kPF`[[欯'jbf5[hCIkS}/eea&mNk$ROx 4ן[ӵn;[o}k5—qOHE3tRBxQ>c~&g1O^'Ф.؈I]QVSٖW6hvcxqh8wRAW\f-n7_Xl-7m ~/>c̮M8Fܘ-wYE#/k$`{A{P" Zkn$| TU8^;-nkk/.bm{[i{@VU kuMr`+*givHD]Vj\xI Q0O^+ "c$7JI\mzJzc_k]jժM)&\6Yp ϏUGvM k[pn0\Z!W]!w9CH^AO^_ $ϔsI1@{ IrZi Qt{~~O:煡Tr Q@)OiPCO֖<EPRZEkP%4"0ƚ Z{)aiIJj`NczW]p%4aT0Ңt Κ`EΛS#=oPrD^FGzKU\ǹ[[׵D-⍤_W;κβ=w*#^Z(@+gu5 Miuo~)\7!ko`yg.Ckv*@AQXᾉlPk{Asf288>T-6wsvɬu7Vձd$B]%͠Y\8(fPrPzom_ N<C Zr;mlqfuJUwMkvy \O|0^c媧egeob;F|sS/,}E;0r8+yw*i51}wQI}}^LM.QS[՞Xs5&#\h[ovikw#QY--/s?9κ4d& hhυ{?ΰa&4C@'( j(P~!!D8"bQΆ3n{fݺIm[Eu 1/!Ye|G[қnϽLvkk kZj +\;] 0F51uMๅzRPmr巃Sk+7sƱrz׳ܢb6v̓YSt=Mw՛%os5iV{o Gj7-$/g }64 ƌ^ {{a CbF4dmK5%)w5.@\)7z6ޣ|XAEµ#-gջ;Is Rն /qE?8h_|؇ןw鍬lcpGay]sd`h;Mz?T!i@:Քڀ9[ZMfLQVG$ Y& ƴy{z fqMbulU-'Ĭ]gtVfNqE8 &fxnL5*N\5=3zBMEI)Zb.$V^0W GusՋ(ZU))UY||~--F 7s#:侪0P( D Fʦ%SP:U @#H:N^c*nK{9dr#b?k7ĸtZ\ړ;|j~qcws6{U?8IzQ_n!2WB@$?$}ú*~Pm)!V: bOҴ^m?(~1oT=目]̫>rXDgJXC% y28Ӕd^G{5aM ٶxCeoXc?+sbO1r ]'ẍ܌޽ ?J6`p{:z.8OΌ@¯8Z4qEȚ pC p 88L4 d2{ifDSL4=Q/(jyaWI8榘i:c7*ayp\TAfY3jxwq77'mbԩ9 cТp8}ʵl9̘Ξ11JՌʸ4du XObt.@H+XuÃgxU VB4gRZsʋ#:Ikr&F#uT!++Q*+3gbgOTt܀57 Ξ이K܉WֳD]XT (ZMG#HjFxcI yWIXK֦%9\j#˜rcQt0\MDP.D( Ez$ESjCj:N 5cj+trjA8G ND5 &ύ\0+COZPqg‚ ƨa.4(= xS 8LXh2%1tiyS]axDv*Oo#L\僧'21S0cAa#HcJA'K@`{^3/*b E U+ WC-XbV:C0 zR_Wu8 KKȼ4ܝ"LEl$A_uJb<Xdq+Z$XJ}95ۚ#[ k)7 1\8g¥#|53iEDOm9:d`\%?ׄ^Rբx)ã2.!V'blԁyyyW]~accaè?i1(j>SXct}EVbP1êTmt4rϓtx~ʹsKsBaZDqiz15Xaмot)FH%5O"Fxsx4CǺ|_Z S9O$.`_ZA{O1Ȝ1)5kC+n3YKκ2AW&] _ʠEWZ=VXXёtTCÊ{@εPRǕT TRwٶ1wordpress/wp-content/uploads/2007/10/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/uploads/2007/10 svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 f353.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props audio.jpg file 2008-11-20T16:30:43.000000Z 9e02a249556a063953ae1cf1c8719a98 2008-10-28T18:17:06.112729Z 97 paul has-props f354.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props fight.jpg file 2008-11-20T16:30:43.000000Z 46e8fc646e4f4ce977efc6f0b4466797 2008-10-28T18:17:06.112729Z 97 paul has-props f355.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props f356.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props f357.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props f35.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props f351.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props f352.JPG file 2008-11-20T16:30:43.000000Z fecdfd4e91fbafea2fe1d8d277d0cef6 2008-10-28T18:17:06.112729Z 97 paul has-props 0wordpress/wp-content/uploads/2007/10/.svn/format8 Fwordpress/wp-content/uploads/2007/10/.svn/prop-base/audio.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f351.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f352.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f353.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f354.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f355.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f356.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-content/uploads/2007/10/.svn/prop-base/f357.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Dwordpress/wp-content/uploads/2007/10/.svn/prop-base/f35.JPG.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Fwordpress/wp-content/uploads/2007/10/.svn/prop-base/fight.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Fwordpress/wp-content/uploads/2007/10/.svn/text-base/audio.jpg.svn-base?JFIFddDuckyPAdobed      `` !1Aaq"Q2R#bBr$!1AQaq2R3r4 ?꯼e,x bY[-40]|ͻOCјfe7S~-oX{\bҗwݵ2^Kys-̗k%4fbI?(JI^~:GET ,glBF"tc?G]\7Њ, ;h]u8F貀:E~Qn]kq\Ik%C"hJNQy=oZF\=E=6?}_>u_Z5Tǁ #EE>`$҆-ŽB.),bAuc!2)Xo ftWңs(8סivI2XMO u-/퍒ɐz8 tˣe}K?>*Ϲ%#hBzBp,1VZIn awFCO"g'ǡVrpkF.bccAaTuY^\p"`kHǾv/X?Yvׯ(4+qF/aTws[k]C$`y{ RHLEO3e'r`,箶2uLn 4YVCgI32XXK.~7-0cu;]ow٭-yn4\fVz}-g2`46TDe{^d}Y$VTPզ82lڞe-kR]YHzB;箄-EPcJ)]]6\e-+HZUpvBAۡ;GBBzܨP >ru2[TV|i4 ;8Ao*#jUe`{U O\lhƁVRc,||WTi?ī|<nWW}80Cvf9cJ[x#xkDzaVe8- ;K xܛ5$[2nݸ} ר6Bߞcfw@φTGsᢨGsᢨGsᢨZqOcywXO%(,LQԏ0 68.+ӚZH7 S]^SQA$@ˍ^b3rlOfp2㗫ۻO |GgA)} &H Z&a@-NwƾٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f351.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f352.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f353.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f354.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f355.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f356.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶEwordpress/wp-content/uploads/2007/10/.svn/text-base/f357.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶDwordpress/wp-content/uploads/2007/10/.svn/text-base/f35.JPG.svn-base%JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?K yy&r`O/kg4lRZnyh%&hrvsRX;QqrxZH\|_+Y9[(ET1c9 &c'_ȌzRp+XيbOj6U:w8欔jo}(XgdzBST(YHRb?ZA՝R拋PcLhVJqN*ly|QEcse*}ls(V6Qp_aeYI6QKQp_e.Slm RlhNb T)6qXe*mlbjrlbJnʰVe;r.)EVIfNbzRm;( v{Ryuke7m;O.RwSgo4mQobMe m}mlC6̚sDS4}m҄p6ihXm*mlb*}mBQF.;Sm"2:qXe4X#M;6JՍiV+V6lqXVmX)M)Ei S+N_e1QEmQ6h ҋMh[Jv'?E5GWm^X`f??I-Y*Uh)o3y` lWu_겘t2y~UF@nuClf^{\v:yWWSx%T:?Jf)}B8'6!Ӯ- n܇M:u%/N+ HB󇷆 gϴx%q6vC}+[HQ?}t9?* mJg|GַXXQtQj/=hV6qX= ;_e&ڰc#&QE+$ҰHK3W2X+v"p { O%{7lӽy*{X:0ZJ$S?LL,E+[#(JN8EU) Uk}jZn."jrݴ+m+S+NbOj*rSn@$֤:5̂0y:s*aF#SԼA{M`,z Y*YnzzV5b;404pئ>X[=C5K0pI 6?[2`#= 5Et=(:AiCEqa _Md2h-TGK=-` (ܯHH}=Mn[ i32y-yk&=G)_2teTΣgq$V+a 6JqUr1T<Q떞$QD_bhd# 9/,5W_-w!,\ G+ЅE$yϚ:=+MM r Ď3޺e=9)+t$Vgȼ?{2|3nz`I 2I[xXo)){տΤcI{c{ˉnn1gsܚo`J=IA^,;R/fzxZΓ[[*+AG-zkEcn]Ҟobji\E]EY1ښRVREVM+VSJSJV QEP^j6op9S*z+GvK!Ԙ[z `C{żW43FFÕa'YSiȽ'C޸Pq;CFs9{oj1`1I`+7FIS S|93麱ShN'ag<zi[)[3ٸ5dA> űձGx<ڼSܰG!{YnLy9Q7tSFgc4ru| 3⴬5 (obo6kxJ,n&MF'9J:5oC΁(r2Pjho'M3 ]urz$asXWu /EFd pw.rPGܦ6 E+(ە=3v̭8= uBrjGV4S#Ӽcq{5 NQ=7xUϭunt9+gSPY~XG)x3H6Ig.2vykEf,a6` I+g#A(ũ{w:lRm1F(mqSm+EޓQRm`4?J6v+V9pz.RUNimKmar`*]bͿu5պ;cƹ-O0i,%Vn"1]1֢Pį+)Z: "WBVx;H,?Oʹe 4Xˢ`ױk>,$1FH^)PcyeJiEdSS95tyI0r x?囯mrr b~Fvʥu-W1;OH.ZgJ-J([V"Υ/$3?$L\+5*QǜϦ&4]:QAb^GQ^y43XM S.46|6c9ʆ+5SG43`XO1TdtĒ؎2zH0Tnc"U8dUŦȕ7c B{@n ܏].ggªe`犢xMv4%U:w`g663_;cTXV穀cIBv}DApD@ߩNjpyGXvF?j߆<%kIciyҰ"OJh+Z-N6+LmЎ/i&َn/6~> IyjsME?wTw?cEiM-ٗX>yՂf6)yF!*X(e^KtM^GʓȤc#OQM&3TQ ^]}IYK.G2swzU=!\t52-X&q$:]6OI5`^#GɎ7s65y3U'=+yȴaFK6w- Bp=FzfMo-'imlWK*j)]ѵk-n#?*+}Mz05`` pMWLR唜dqELVcb$"Lg*=5Ic7BPR`=?dӼK`m5ulʸD}U#[hI CI?z1v`GZw]^hlme >~UOj]ܚĩKs~jōG@FmC EݓWлK)\^+G#"Se"#b?{N+Zo5U \,W6 VG^7Y\x;01uyG,ۼ۸ʺA/Z~~"_ٲ 33G*7ӐG;8K9OR]X`M75(siyqeldxL u`k|юJ=ڧI ;/XLߏfU8Ǧ*B7󅹁.7HlȈXp}%CAСV  I1JnEnXpEa_=Լ=p5\q |Y;~{yF.ESɞ~Ts>񕧈 c _,J67>=*mҍҋ6V6J(tizw9JָYXij4qҝsFAN!}`ԴryWbÑR 0ҝE 4؉+/Y ^E\3􏹐cRhF-""X(1S2ոmMNxuB#Iu(.wecګlз#+ְ#u*zJtֆ&6ջV90EVY؃{Tm",QaOFL,F~eeeVV*@>fT˻z+h7ei1h62y꽍u[Ep&@˜P}G*HtTñOdzc伃tqK1~,BQ&  թmC+J 4r șI?zj}$oDQ:HOCO#Xi j[w,N$֍wQꧪFOE!rɃ)Qc S* ZH3JEg95inrj$KޑPU]վer֓9%֧\ű"~ᎵO1H\sţ*ӔTĪAQŮ3ӚV#U17>pqX9"<*JgiEIҕ;;>0VRʟ(p_fO8}T$zwhgoUCΧ.dёjDCRyd08{ݑS,H^ÓL8'TϲF8=))1" 8RsVȦ4bFGz'ԗͺ,Y1ש化21h+Wa'hP8jv%ҹXj/kzg?*x$h_^wA<-K$?ҴLϒKB+WhM,^3EG1I0%.h% u4d2}i4}hZLњvFM.hwp֙+ qbhSM(c4Xcgǐ֊(y(sIETҙ g41E8=77;';G9 Yy TG( QE2(QE1ERREf((aZ(4QE4Q@ 3E%Q@ŒE њ(bQEٶFwordpress/wp-content/uploads/2007/10/.svn/text-base/fight.jpg.svn-baseNTJFIFddDucky3Adobed     "!!!"&&&&&&&&&&   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!1AQaq"2RBbr#3S$CcsD%TdE!1AQa"2 ?ܸdq΁ F h וVOPO. 5 9ύP4R8%Q8T*D1g@F*.杴4(u`J\遂N|( j hf()\Z}AG&"$b~T} +~X/cVU?նsF=\bQbu-K%^Zp,e^w]g6n.틞bsHv)Vaqn5FS7|kZ٭'l鍡uSW@<(J|( ;ֈx@::WPt;jxʊGur4JBD2m#/w:@9QL.UЊ_iyPddxZZNM"";E(ONT* ʀN0`P@` 9 :nW/atȀ 'dkk޺E̝^'Pe^5\mlN`u*5sP4@ ͹/6Wی[1y4@z%|3ynMݨin$bjbve%+ncNwOiLi,|. 6Ae3ftMsmɃHio}o+Ƀ9"-c2v~%--46fآ[(H{vJxs k{Ko MqTkU-F݋ֈl1yLUwdKը<@p8uN~!/ƁL>ՕPj ' jܔ NC@}PEQS,GxE1X0M묁,iǝQkl9T4Pq}}@AjXxւ,Zj'*GӶ P-E28g֪u@5A'@&IP\>9t>g둷ﯚwݼw4FpPo8K[ykaˏsu˝}M)mlakb~AaΞ̺6W~c7vۓ6G`a:Tg_-k-(R8-J j7[sfvښpӎ(*l]>b{_ip5E(p{HT@Wˏ\/=FAi r/zV>Ysb,/o.ݼ{Abkɖ:Վd-ilk<X?ykW|T;uۘ!VZ㟩?|c-q^k@稷*Ƌ[[\;cPxi:iU CCFX!("=M-HJT ځoZϺxrˆ1ax{($1{)e4H  xwqa{cUՄ(ʠ=4 0jA5p1M\@ǟȫ h,H0nϴF7KZEk\[iĥ:E/̏F>+0p4e@|nlQ$UDD ׾ŋw=w5̉#Dn!<O׃;OMCZ]^=]- 55\k^ѳvö`۰F]W| IAV3=}iÄ9dl5?gCއk^y6m=sF6`^*;+5ZoI5r#s!Π7 Xzvˈv[9$u{K'$vv]"g5??8YnW\x4!@q5/6ۺi|Rޅ K#kQ+iv`yQh'ۅjٱJ5啃{닑N]dQi[6+>=L12#Demf^c΅IcJʝubõK,^t"=A9egFGwcf n^kGD5qVu\6xRz!6`ܵg5۟Pu˧4rt;!%Û)2S ZTX9QSk! P!ÍQOiFF)A-80g#4 7 Eh%qP0ʊmf9'1ΚjQ5Q Ph9ޢbvyLl21M#\pi]8|ksb7d&o!#=\1$1@~["p c1SG?7mn gkdMG+#vK\6K]cV$`qWͲ{nbME|n5-cte{<-F.(+}nקQu3(c\.6-<6S>t֤qYOFv,9\];&񩋯E;n m21z|#VNXU{Vk`jŹ{@J(nAZ5Gy3# 8;" oi"{ݝh8]+$zƂsH,y3uh#2G52$|š~ qHĵ$0 Fk0ˋ-v2y!p !NRgT|jTgAa}iwӠh<\h-}ԝ1i-4S|`!xsJzMSWj SDpҲ`ʈ>':0 E^T @( C@MC8uумMV Κ#MSCM "SqTO<耴'(P-)tW4"SB, ]/Sa?f/ :+t|1*yY 5}ݤ[}".*xrIkg~^/$kuFY5k]D9Ie}b1UN$S]{HA{0)I< ci1)!65<* NG.*9Sq\ҿ5'錞Q83@A}ɚT[[CWA$I%@9I'Ff+VM7\XzZa9l^R.=jTEF_mLxjVoѮʈ59hS7wz4k))ulgCMXzpP( ΚoLyPԩZHrqT#UdL%^ >M׻%<spPsj'JfpV6'KQx;ϢYnyүc 1]gXcWKl0}87`FsLS9{w> s׹tj$c)nW੊& KLb0p)HƁ|сj{5=D>KHi-Hʧcd򛤲ݳGa^и;jtbo|0:+٢`0bOyﻔR70###^}]6tqB4/eOXWevMF$e6X\8Keڳ\)$w]knf1 HLk>29Ui87nLfӍ])hF**C 9QeǕuXcʀU8P h;(hNYT`5/aT$S@@{(ST Қ"@ϝ44.bڈzhi"H~ =Í44{'tv/^`F54Kkvo:O~bc~ug7:U/^ըMԞf7cv$I&}EY{ <J8#r5ˮ,juؚ>i9ir֛v{W4[1 F q:[s& Q=.2 bVy'<cb/nnُjGxbFqTjJ?;Rzϼhh[\tM/D7Rnj[FNr;!q)jMu'}SAvUz0a#P4:jO릨D^u4hxP(€+E (8Dюu`')q\{j)@cAzcU sP({x4CցJ(CD$P @.+@ (Qhu,1vv AFcȜk #Ϙ!g H+]rZ08 )WS[ۙ":Fji:T󫉫leLZ-0sAŮ!) új־R^8 #@zDnn]@.\-  #PIƺsݟ7_[˽Li4o{Z=}:Ċ *{I5rD}nVAk@SPRP~ڪ} {4*(˅p @.=RRNXupPbZE1p PiA`{zh˥PH{j()Ҁ@Ǿ}T4 e( 0\(#@FBpH Fgr r1ql~Sjμ};u7pюY&{\t8U9j ({ڳ/#KYf쥾pu1V(vꛩcmu6kIg̑kC5C]h|e/'Ϝc64412_}o(5`GT "yU gh'x1E0%PD AP>(ƅU*^ P* -14^"=Ɗ\zD0M@SQN@{Π3B*8ƀ43΁)P1@ƒosEm< `tn~<<\+n%fH̑N'hv ל.}U~kEnN~XdM15Zۛ@[Yl ,>,YYX,wci.e VnH7)s uV}c_s l8O)U>5:Mֆʟ}t甴'VМw YP%sFF=8aA%ÕE,^,(#ˆG/xPR }=C ?m = QO#G@PNAykƊ4 ."D=\xP W@P * z#@.4@NT?A@ *%ƃw1]\67M{^]px?4'_ˬKnu3gxe* #~ma<@빈s ZZRm2>F\g! iwp'LGڄ8Rj3ϲi(~ڲbX=u0q.ZU@ύ~pÏ P)E{脜3@.r@@&&t)A>ڊ>˥'9$?CAi<***@Åh_(5C^\(%^9O *ʀ\jU΀Z gc.Ss^Ŷ!D!c+XF/[=s{rx*\UŚڄpkzM WBhK&=i3CZCxR|F$>aWILޏi7IeV&A.GIj2$שk2UI$s8ͫqʴIDžW ZT"/@ \!NÅTRΨXQZ9P5 <cǾY*eU @3}Sj p=gTK!YS}t}hasAk@P=_0jG=ݴ qP!΁Tr sr ƒlV_) ZrA_Q0Vl<=#< d{B+Zƴ⺛k]SӍ*1py$ds=s]h-[E#UX]%ĪÀ̩DuP :C:Ҁ9U@@sU:",*W((Ǿ 0P(_3/ UP  k@{&Z Q@5@rCR:9qxP4 @ih"B}U@Ntr΁>#:N30hqDiT.+F 0\(yRO3AwoS+#)634p7]tU<\AG"cJϻ^_>\׹dj.ò=KXZ_ 9[4Fiŧv/<(Tv-G}P0ƀ(=`8I"b;yP(r;4cpct 8:RT{:)i @mP2@!I@i]YSCϥ0Qqt-Oz8c@|j#c$k\bK |ym.-nftKZA ^^ys'dkap *ckm#wyo5|+nXe>UnzdbIq+AZ'?mk./]=yz=}M ~ҵzf.Yi T1f@·>=k]m9g@b(bN|:TEƀTf( 0,P3D ;AP}(1^A@d80}Z;{(z2Je OW5@s:9xSq׈?]1t.=q4tOYL4e:pjmR3) X7E&0J&t9P1ukUf(>{+//,כY+!k^惥è4FVcA&G7çIHTi-uܶә485 Gx;$ jó[ -#q V.7L6LPDb8UD5}5܂|a8묬.sB{ƈIywP1(04BXiI@9SFE®&=)꾩Z_Sk}OdLUiyk^4Z%JqJNSQ.z'*ת{1=WduUص b{tĵN|\M}pNh{)_D& DٕSFyphS :\ЩƥY_.ըI7N3ZX*Z#h*ۭ3{ 2gfTs5k {dj*Ӈ* 5tĚJ;h$eQ`yЮ /`ӎH`'k<'pGi=0F]j"S T1Ʃ|)=q4\_Okyr8SV)7+8JxfI5i+?P9B ?፩򾖤WAƚO /Y&:Gexzg?D$t,Ȝ A/21A0435I^{ZfzD'gΫw-ǧ2ck5$m_'\ԑyDC/ĵϸiZs}=8 X=Zq#k<}=W՜FM׳I5 Ђ+h㐂O9(OޟpvUuWWmcѱ@[ -ՇmbkS jVi =Ʊ{Hqmt`kBƥꘙbQ)Y7tp[IH1η)cPZ M'.[ KY:vO{,F@s"\|R 㵶aloO&$zq₷woQk6x$)d6Ago?_Y0>2*=x֙CW@Z:[3#:-NBӆ4B_]T4@Ҩ\=v4bL=ϰL]WyY\ < hqFa*YeX׀ wā^ < s)÷*T$'5 PAibԏz 2 WV}͠O85}w Vc?YDm#uВY]ms%Xw&dB<Šֹ%i>~ Js$6D^a0:6pS*-T쒖X\>눉w$td/w F O6wcikLnusFc)A.ISO+9G湘;}QIkWHwPT3N2Q dD(b(9P&Gg΂&7\$_34=\Emj\.¥<+sy^ZhmO*.sX)SLjԬ$ymk4AJyHM1 Ͷby}®ͺǧ$`|͓TLX[hSWM^ k\ۉ8ڸ$v |rVTl:]Bs*Uf6 lGO io{fGfu$h‰[]}~]2B;@'W.2+<qJo΋gGח+񩆇`]=4rǶ4$LF&r ֚UѻMy]hC@ic$M+}OvpYg?Qor7&.fɶj./^a@?uznEo.#LOwy5kmj\'O}][bADik"qC„sBi$eR֖F'Myሦ?N54Lmt%Dٵ`$!ڰqիǝjD#Ak\I`+HRG#}Z#(|#R+; Q.փ3UӨcTW[CP0h |xՂrِ;,:4V4>F("oXL-oDVw/%x"zYQ'Nu Tc<w7k@ Tƨ} ޤ_E(8$壜O0))5ZYY!^=Qon!q#B4˽)gF'ʚ)J1ӡW&Zh=7ozuI)t(lcL_]ex=Y!Ţ79v^k9e5`8ux/:hB"FX4<*Βۜ6l餅F0D.5EvR0l:Mǘak%""ԕ6.xǶ1pVHd8-K<4}(lv/u{Ugn$k?؟ϯC+0{HkC2qtJӎ_i5A+ϭʚi쩪ߚ{籙C-xcb5iBׇOo98Ē\s=k{{ Ǵ | w;ۤm"#<[k6:7PtY)4g?(k߀dqWhj nwPi%˞ֿݽ s0|h! 9U[cI iq rALy[ӯ0c^ևk潊 [h2/y$Jkпief|Ak#PjTSwc冗kh ,FDS^]_.Cj>1uU8@u5D*Bh C:hޅ-&M9;Q\a"i{A X4Κ+?s#!HAeȚ{PKyqm7W:+K r&8psֲK}19~&;4tbL 5mvRONlP~{nj{͗$[Ś.QMuc]WElDGs$AϚI\TfTR?Y6[+͉ApKI %kʰ6E!dI :G"F@o{k#,V?󄤎*<4?'нG6\ױڊ2Pi𿳁[m :h\-/zz۔L1C`CZݫba g7CATW 75W#u8Zюhttl%-c%W{I uc"kXֱjҺwR*Ijۏ_} Ensm2log5'AS6GF7L[8WI_q;x!fdcM/?.k Ω%r"=XǯmO-c$5iLu4`h  ?0 GZϮJ? )d~Pnqoi򄯟x{MvՄ}f\ie1A~-xk{J7=YfRV˖?N_LNj60pU_ϓlVŐDfZp 0׈:MT)P-8USL8L-'LGIi 4Ӆ4e9|3FɡE#Z=6PE*} mK)Svl ~q}+~@X=ԑe͸<ߛg61yVW}TNFI.?2>H J/ʯʳ?x6+scxc~Yn6__z~w)8t]:pam_J{ ݻqY̋-ZSV`*.51}۴n#|R L{`p9CPح64\H xUAގ[}_ie'!ֹ<`n|i*-5 \ kPF`[[欯'jbf5[hCIkS}/eea&mNk$ROx 4ן[ӵn;[o}k5—qOHE3tRBxQ>c~&g1O^'Ф.؈I]QVSٖW6hvcxqh8wRAW\f-n7_Xl-7m ~/>c̮M8Fܘ-wYE#/k$`{A{P" Zkn$| TU8^;-nkk/.bm{[i{@VU kuMr`+*givHD]Vj\xI Q0O^+ "c$7JI\mzJzc_k]jժM)&\6Yp ϏUGvM k[pn0\Z!W]!w9CH^AO^_ $ϔsI1@{ IrZi Qt{~~O:煡Tr Q@)OiPCO֖<EPRZEkP%4"0ƚ Z{)aiIJj`NczW]p%4aT0Ңt Κ`EΛS#=oPrD^FGzKU\ǹ[[׵D-⍤_W;κβ=w*#^Z(@+gu5 Miuo~)\7!ko`yg.Ckv*@AQXᾉlPk{Asf288>T-6wsvɬu7Vձd$B]%͠Y\8(fPrPzom_ N<C Zr;mlqfuJUwMkvy \O|0^c媧egeob;F|sS/,}E;0r8+yw*i51}wQI}}^LM.QS[՞Xs5&#\h[ovikw#QY--/s?9κ4d& hhυ{?ΰa&4C@'( j(P~!!D8"bQΆ3n{fݺIm[Eu 1/!Ye|G[қnϽLvkk kZj +\;] 0F51uMๅzRPmr巃Sk+7sƱrz׳ܢb6v̓YSt=Mw՛%os5iV{o Gj7-$/g }64 ƌ^ {{a CbF4dmK5%)w5.@\)7z6ޣ|XAEµ#-gջ;Is Rն /qE?8h_|؇ןw鍬lcpGay]sd`h;Mz?T!i@:Քڀ9[ZMfLQVG$ Y& ƴy{z fqMbulU-'Ĭ]gtVfNqE8 &fxnL5*N\5=3zBMEI)Zb.$V^0W GusՋ(ZU))UY||~--F 7s#:侪0P( D Fʦ%SP:U @#H:N^c*nK{9dr#b?k7ĸtZ\ړ;|j~qcws6{U?8IzQ_n!2WB@$?$}ú*~Pm)!V: bOҴ^m?(~1oT=目]̫>rXDgJXC% y28Ӕd^G{5aM ٶxCeoXc?+sbO1r ]'ẍ܌޽ ?J6`p{:z.8OΌ@¯8Z4qEȚ pC p 88L4 d2{ifDSL4=Q/(jyaWI8榘i:c7*ayp\TAfY3jxwq77'mbԩ9 cТp8}ʵl9̘Ξ11JՌʸ4du XObt.@H+XuÃgxU VB4gRZsʋ#:Ikr&F#uT!++Q*+3gbgOTt܀57 Ξ이K܉WֳD]XT (ZMG#HjFxcI yWIXK֦%9\j#˜rcQt0\MDP.D( Ez$ESjCj:N 5cj+trjA8G ND5 &ύ\0+COZPqg‚ ƨa.4(= xS 8LXh2%1tiyS]axDv*Oo#L\僧'21S0cAa#HcJA'K@`{^3/*b E U+ WC-XbV:C0 zR_Wu8 KKȼ4ܝ"LEl$A_uJb<Xdq+Z$XJ}95ۚ#[ k)7 1\8g¥#|53iEDOm9:d`\%?ׄ^Rբx)ã2.!V'blԁyyyW]~accaè?i1(j>SXct}EVbP1êTmt4rϓtx~ʹsKsBaZDqiz15Xaмot)FH%5O"Fxsx4CǺ|_Z S9O$.`_ZA{O1Ȝ1)5kC+n3YKκ2AW&] _ʠEWZ=VXXёtTCÊ{@εPRǕT TRwٶ.wordpress/wp-content/uploads/2007/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/uploads/2007 svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 10 dir -wordpress/wp-content/uploads/2007/.svn/format8 )wordpress/wp-content/uploads/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-content/uploads svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 2007 dir (wordpress/wp-content/uploads/.svn/format8 wordpress/wp-cron.phpQ time() ) exit; update_option('doing_cron', time() + 30); $crons = _get_cron_array(); $keys = array_keys($crons); if (!is_array($crons) || $keys[0] > time()) return; foreach ($crons as $timestamp => $cronhooks) { if ($timestamp > time()) break; foreach ($cronhooks as $hook => $keys) { foreach ($keys as $key => $args) { $schedule = $args['schedule']; if ($schedule != false) { $new_args = array($timestamp, $schedule, $hook, $args['args']); call_user_func_array('wp_reschedule_event', $new_args); } wp_unschedule_event($timestamp, $hook, $args['args']); do_action_ref_array($hook, $args['args']); } } } update_option('doing_cron', 0); ?> wordpress/wp-feed.phpx )wordpress/wp-includes/author-template.phpdisplay_name); } // Using echo = false is deprecated. Use get_the_author instead. function the_author($deprecated = '', $deprecated_echo = true) { if ( $deprecated_echo ) echo get_the_author(); return get_the_author(); } function get_the_author_description() { global $authordata; return $authordata->description; } function the_author_description() { echo get_the_author_description(); } function get_the_author_login() { global $authordata; return $authordata->user_login; } function the_author_login() { echo get_the_author_login(); } function get_the_author_firstname() { global $authordata; return $authordata->first_name; } function the_author_firstname() { echo get_the_author_firstname(); } function get_the_author_lastname() { global $authordata; return $authordata->last_name; } function the_author_lastname() { echo get_the_author_lastname(); } function get_the_author_nickname() { global $authordata; return $authordata->nickname; } function the_author_nickname() { echo get_the_author_nickname(); } function get_the_author_ID() { global $authordata; return $authordata->ID; } function the_author_ID() { echo get_the_author_id(); } function get_the_author_email() { global $authordata; return $authordata->user_email; } function the_author_email() { echo apply_filters('the_author_email', get_the_author_email() ); } function get_the_author_url() { global $authordata; return $authordata->user_url; } function the_author_url() { echo get_the_author_url(); } function the_author_link() { if (get_the_author_url()) { echo '' . get_the_author() . ''; } else { the_author(); } } function get_the_author_icq() { global $authordata; return $authordata->icq; } function the_author_icq() { echo get_the_author_icq(); } function get_the_author_aim() { global $authordata; return str_replace(' ', '+', $authordata->aim); } function the_author_aim() { echo get_the_author_aim(); } function get_the_author_yim() { global $authordata; return $authordata->yim; } function the_author_yim() { echo get_the_author_yim(); } function get_the_author_msn() { global $authordata; return $authordata->msn; } function the_author_msn() { echo get_the_author_msn(); } function get_the_author_posts() { global $post; $posts = get_usernumposts($post->post_author); return $posts; } function the_author_posts() { echo get_the_author_posts(); } /* the_author_posts_link() requires no get_, use get_author_posts_url() */ function the_author_posts_link($deprecated = '') { global $authordata; echo '' . get_the_author() . ''; } function get_author_posts_url($author_id, $author_nicename = '') { global $wpdb, $wp_rewrite, $post, $cache_userdata; $auth_ID = (int) $author_id; $link = $wp_rewrite->get_author_permastruct(); if ( empty($link) ) { $file = get_option('home') . '/'; $link = $file . '?author=' . $auth_ID; } else { if ( '' == $author_nicename ) { $user = get_userdata($author_id); if ( !empty($user->user_nicename) ) $author_nicename = $user->user_nicename; } $link = str_replace('%author%', $author_nicename, $link); $link = get_option('home') . trailingslashit($link); } $link = apply_filters('author_link', $link, $author_id, $author_nicename); return $link; } // Get author's preferred display name function get_author_name( $auth_id ) { $authordata = get_userdata( $auth_id ); return $authordata->display_name; } function wp_list_authors($args = '') { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('optioncount' => false, 'exclude_admin' => true, 'show_fullname' => false, 'hide_empty' => true, 'feed' => '', 'feed_image' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); // TODO: Move select to get_authors(). $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users " . ($exclude_admin ? "WHERE user_login <> 'admin' " : '') . "ORDER BY display_name"); $author_count = array(); foreach ((array) $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_status = 'publish' GROUP BY post_author") as $row) { $author_count[$row->post_author] = $row->count; } foreach ( (array) $authors as $author ) { $author = get_userdata( $author->ID ); $posts = (isset($author_count[$author->ID])) ? $author_count[$author->ID] : 0; $name = $author->nickname; if ( $show_fullname && ($author->first_name != '' && $author->last_name != '') ) $name = "$author->first_name $author->last_name"; if ( !($posts == 0 && $hide_empty) ) echo "
  • "; if ( $posts == 0 ) { if ( !$hide_empty ) $link = $name; } else { $link = 'display_name)) . '">' . $name . ''; if ( (! empty($feed_image)) || (! empty($feed)) ) { $link .= ' '; if (empty($feed_image)) $link .= '('; $link .= ''; else $link .= $name; $link .= ''; if ( empty($feed_image) ) $link .= ')'; } if ( $optioncount ) $link .= ' ('. $posts . ')'; } if ( !($posts == 0 && $hide_empty) ) echo "$link
  • "; } } ?>"wordpress/wp-includes/bookmark.phpget_row("SELECT * FROM $wpdb->links WHERE link_id = '$bookmark_id'"); $link->link_category = wp_get_link_cats($bookmark_id); if ( $output == OBJECT ) { return $link; } elseif ( $output == ARRAY_A ) { return get_object_vars($link); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($link)); } else { return $link; } } // Deprecate function get_link($bookmark_id, $output = OBJECT) { return get_bookmark($bookmark_id, $output); } function get_bookmarks($args = '') { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => '', 'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'include' => '', 'exclude' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $key = md5( serialize( $r ) ); if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) if ( isset( $cache[ $key ] ) ) return apply_filters('get_bookmarks', $cache[ $key ], $r ); $inclusions = ''; if ( !empty($include) ) { $exclude = ''; //ignore exclude, category, and category_name params if using include $category = ''; $category_name = ''; $inclinks = preg_split('/[\s,]+/',$include); if ( count($inclinks) ) { foreach ( $inclinks as $inclink ) { if (empty($inclusions)) $inclusions = ' AND ( link_id = ' . intval($inclink) . ' '; else $inclusions .= ' OR link_id = ' . intval($inclink) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $exclusions = ''; if ( !empty($exclude) ) { $exlinks = preg_split('/[\s,]+/',$exclude); if ( count($exlinks) ) { foreach ( $exlinks as $exlink ) { if (empty($exclusions)) $exclusions = ' AND ( link_id <> ' . intval($exlink) . ' '; else $exclusions .= ' AND link_id <> ' . intval($exlink) . ' '; } } } if (!empty($exclusions)) $exclusions .= ')'; if ( ! empty($category_name) ) { if ( $cat_id = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$category_name'") ) // LIMIT 1 $category = $cat_id; } $category_query = ''; $join = ''; if ( !empty($category) ) { $incategories = preg_split('/[\s,]+/',$category); if ( count($incategories) ) { foreach ( $incategories as $incat ) { if (empty($category_query)) $category_query = ' AND ( category_id = ' . intval($incat) . ' '; else $category_query .= ' OR category_id = ' . intval($incat) . ' '; } } } if (!empty($category_query)) { $category_query .= ')'; $join = " LEFT JOIN $wpdb->link2cat ON ($wpdb->links.link_id = $wpdb->link2cat.link_id) "; } if (get_option('links_recently_updated_time')) { $recently_updated_test = ", CASE WHEN dateadd('minute'," . get_option('links_recently_updated_time') . " , stringdate(link_updated)) >= now() THEN 1 ELSE 0 END as recently_updated "; // $recently_updated_test = ", 0 as recently_updated, now() "; } else { $recently_updated_test = ''; } if ($show_updated) { $get_updated = ", UNIX_TIMESTAMP(link_updated) AS link_updated_f "; } $orderby = strtolower($orderby); $length = ''; switch ($orderby) { case 'length': $length = ", CHAR_LENGTH(link_name) AS length"; break; case 'rand': $orderby = 'rand()'; break; default: $orderby = "link_" . $orderby; } if ( 'link_id' == $orderby ) $orderby = "$wpdb->links.link_id"; $visible = ''; if ( $hide_invisible ) $visible = "AND link_visible = 'Y'"; $query = "SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query"; $query .= " $exclusions $inclusions"; $query .= " ORDER BY $orderby $order"; // if ($limit != -1) // $query .= " LIMIT $limit"; $results = $wpdb->get_results($query); $cache[ $key ] = $results; wp_cache_add( 'get_bookmarks', $cache, 'bookmark' ); return apply_filters('get_bookmarks', $results, $r); } function delete_get_bookmark_cache() { wp_cache_delete( 'get_bookmarks', 'bookmark' ); } add_action( 'add_link', 'delete_get_bookmark_cache' ); add_action( 'edit_link', 'delete_get_bookmark_cache' ); add_action( 'delete_link', 'delete_get_bookmark_cache' ); ?>+wordpress/wp-includes/bookmark-template.php-'; if ( !isset($between) ) $between = ' '; if ( !isset($show_images) ) $show_images = true; if ( !isset($orderby) ) $orderby = 'name'; if ( !isset($show_description) ) $show_description = true; if ( !isset($show_rating) ) $show_rating = false; if ( !isset($limit) ) $limit = -1; if ( !isset($show_updated) ) $show_updated = 1; if ( !isset($echo) ) $echo = true; return get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated, $echo); } // end wp_get_links /** function get_links() ** Gets the links associated with category n. ** Parameters: ** category (default -1) - The category to use. If no category supplied ** uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and its description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description', or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined . ** show_rating (default false) - show rating stars/chars ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp ** echo (default true) - whether to echo the results, or return them instead */ function get_links($category = -1, $before = '', $after = '
    ', $between = ' ', $show_images = true, $orderby = 'name', $show_description = true, $show_rating = false, $limit = -1, $show_updated = 1, $echo = true) { global $wpdb; $order = 'ASC'; if ( substr($orderby, 0, 1) == '_' ) { $order = 'DESC'; $orderby = substr($orderby, 1); } if ( $category == -1 ) //get_bookmarks uses '' to signify all categories $category = ''; $results = get_bookmarks("category=$category&orderby=$orderby&order=$order&show_updated=$show_updated&limit=$limit"); if ( !$results ) return; $output = ''; foreach ( (array) $results as $row ) { if ( !isset($row->recently_updated) ) $row->recently_updated = false; $output .= $before; if ( $show_updated && $row->recently_updated ) $output .= get_option('links_recently_updated_prepend'); $the_link = '#'; if ( !empty($row->link_url) ) $the_link = clean_url($row->link_url); $rel = $row->link_rel; if ( '' != $rel ) $rel = ' rel="' . $rel . '"'; $desc = attribute_escape($row->link_description); $name = attribute_escape($row->link_name); $title = $desc; if ( $show_updated ) if (substr($row->link_updated_f, 0, 2) != '00') $title .= ' ('.__('Last updated') . ' ' . date(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * 3600)) . ')'; if ( '' != $title ) $title = ' title="' . $title . '"'; $alt = ' alt="' . $name . '"'; $target = $row->link_target; if ( '' != $target ) $target = ' target="' . $target . '"'; $output .= ''; if ( $row->link_image != null && $show_images ) { if ( strpos($row->link_image, 'http') != false ) $output .= "link_image\" $alt $title />"; else // If it's a relative path $output .= "link_image\" $alt $title />"; } else { $output .= $name; } $output .= ''; if ( $show_updated && $row->recently_updated ) $output .= get_option('links_recently_updated_append'); if ( $show_description && '' != $desc ) $output .= $between . $desc; if ($show_rating) { $output .= $between . get_linkrating($row); } $output .= "$after\n"; } // end while if ( !$echo ) return $output; echo $output; } function get_linkrating($link) { return apply_filters('link_rating', $link->link_rating); } /** function get_linkcatname() ** Gets the name of category n. ** Parameters: id (default 0) - The category to get. If no category supplied ** uses 0 */ function get_linkcatname($id = 0) { $id = (int) $id; if ( empty($id) ) return ''; $cats = wp_get_link_cats($id); if ( empty($cats) || ! is_array($cats) ) return ''; $cat_id = (int) $cats[0]; // Take the first cat. $cat = get_category($cat_id); return $cat->cat_name; } /** function links_popup_script() ** This function contributed by Fullo -- http://sprite.csr.unibo.it/fullo/ ** Show the link to the links popup and the number of links ** Parameters: ** text (default Links) - the text of the link ** width (default 400) - the width of the popup window ** height (default 400) - the height of the popup window ** file (default linkspopup.php) - the page to open in the popup window ** count (default true) - the number of links in the db */ function links_popup_script($text = 'Links', $width=400, $height=400, $file='links.all.php', $count = true) { if ( $count ) $counts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links"); $javascript = ""; $javascript .= $text; if ( $count ) $javascript .= " ($counts)"; $javascript .= "\n\n"; echo $javascript; } /* * function get_links_list() * * added by Dougal * * Output a list of all links, listed by category, using the * settings in $wpdb->linkcategories and output it as a nested * HTML unordered list. * * Parameters: * order (default 'name') - Sort link categories by 'name' or 'id' * hide_if_empty (default true) - Supress listing empty link categories */ function get_links_list($order = 'name', $hide_if_empty = 'obsolete') { $order = strtolower($order); // Handle link category sorting $direction = 'ASC'; if ( '_' == substr($order,0,1) ) { $direction = 'DESC'; $order = substr($order,1); } if ( !isset($direction) ) $direction = ''; $cats = get_categories("type=link&orderby=$order&order=$direction&hierarchical=0"); // Display each category if ( $cats ) { foreach ( (array) $cats as $cat ) { // Handle each category. // Display the category name echo '
  • ' . $cat->cat_name . "

    \n\t
      \n"; // Call get_links() with all the appropriate params get_links($cat->cat_ID, '
    • ', "
    • ", "\n", true, 'name', false); // Close the last category echo "\n\t
    \n
  • \n"; } } } function _walk_bookmarks($bookmarks, $args = '' ) { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_updated' => 0, 'show_description' => 0, 'show_images' => 1, 'before' => '
  • ', 'after' => '
  • ', 'between' => "\n"); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); foreach ( (array) $bookmarks as $bookmark ) { if ( !isset($bookmark->recently_updated) ) $bookmark->recently_updated = false; $output .= $before; if ( $show_updated && $bookmark->recently_updated ) $output .= get_option('links_recently_updated_prepend'); $the_link = '#'; if ( !empty($bookmark->link_url) ) $the_link = clean_url($bookmark->link_url); $rel = $bookmark->link_rel; if ( '' != $rel ) $rel = ' rel="' . $rel . '"'; $desc = attribute_escape(apply_filters('link_description', $bookmark->link_description)); $name = attribute_escape(apply_filters('link_title', $bookmark->link_name)); $title = $desc; if ( $show_updated ) if ( '00' != substr($bookmark->link_updated_f, 0, 2) ) { $title .= ' '; $title .= sprintf(__('Last updated: %s'), date(get_option('links_updated_date_format'), $bookmark->link_updated_f + (get_option('gmt_offset') * 3600))); $title .= ')'; } if ( '' != $title ) $title = ' title="' . $title . '"'; $alt = ' alt="' . $name . '"'; $target = $bookmark->link_target; if ( '' != $target ) $target = ' target="' . $target . '"'; $output .= ''; if ( $bookmark->link_image != null && $show_images ) { if ( strpos($bookmark->link_image, 'http') != false ) $output .= "link_image\" $alt $title />"; else // If it's a relative path $output .= "link_image\" $alt $title />"; } else { $output .= $name; } $output .= ''; if ( $show_updated && $bookmark->recently_updated ) $output .= get_option('links_recently_updated_append'); if ( $show_description && '' != $desc ) $output .= $between . $desc; if ($show_rating) { $output .= $between . get_linkrating($bookmark); } $output .= "$after\n"; } // end while return $output; } function wp_list_bookmarks($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => '', 'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'echo' => 1, 'categorize' => 1, 'title_li' => __('Bookmarks'), 'title_before' => '

    ', 'title_after' => '

    ', 'category_orderby' => 'name', 'category_order' => 'ASC', 'class' => 'linkcat', 'category_before' => '
  • ', 'category_after' => '
  • '); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $output = ''; if ( $categorize ) { //Split the bookmarks into ul's for each category $cats = get_categories("type=link&category_name=$category_name&include=$category&orderby=$category_orderby&order=$category_order&hierarchical=0"); foreach ( (array) $cats as $cat ) { $params = array_merge($r, array('category'=>$cat->cat_ID)); $bookmarks = get_bookmarks($params); if ( empty($bookmarks) ) continue; $output .= str_replace(array('%id', '%class'), array("linkcat-$cat->cat_ID", $class), $category_before); $catname = apply_filters( "link_category", $cat->cat_name ); $output .= "$title_before$catname$title_after\n\t
      \n"; $output .= _walk_bookmarks($bookmarks, $r); $output .= "\n\t
    \n$category_after\n"; } } else { //output one single list using title_li for the title $bookmarks = get_bookmarks($r); if ( !empty($bookmarks) ) { if ( !empty( $title_li ) ){ $output .= str_replace(array('%id', '%class'), array("linkcat-$category", $class), $category_before); $output .= "$title_before$title_li$title_after\n\t
      \n"; $output .= _walk_bookmarks($bookmarks, $r); $output .= "\n\t
    \n$category_after\n"; } else { $output .= _walk_bookmarks($bookmarks, $r); } } } if ( !$echo ) return $output; echo $output; } ?> wordpress/wp-includes/cache.php)qadd($key, $data, $flag, $expire); } function wp_cache_close() { global $wp_object_cache; if ( ! isset($wp_object_cache) ) return; return $wp_object_cache->save(); } function wp_cache_delete($id, $flag = '') { global $wp_object_cache; return $wp_object_cache->delete($id, $flag); } function wp_cache_flush() { global $wp_object_cache; return $wp_object_cache->flush(); } function wp_cache_get($id, $flag = '') { global $wp_object_cache; return $wp_object_cache->get($id, $flag); } function wp_cache_init() { $GLOBALS['wp_object_cache'] =& new WP_Object_Cache(); } function wp_cache_replace($key, $data, $flag = '', $expire = 0) { global $wp_object_cache; $data = unserialize(serialize($data)); return $wp_object_cache->replace($key, $data, $flag, $expire); } function wp_cache_set($key, $data, $flag = '', $expire = 0) { global $wp_object_cache; $data = unserialize(serialize($data)); return $wp_object_cache->set($key, $data, $flag, $expire); } define('CACHE_SERIAL_HEADER', ""); class WP_Object_Cache { var $cache_dir; var $cache_enabled = false; var $expiration_time = 900; var $flock_filename = 'wp_object_cache.lock'; var $mutex; var $cache = array (); var $dirty_objects = array (); var $non_existant_objects = array (); var $global_groups = array ('users', 'userlogins', 'usermeta'); var $blog_id; var $cold_cache_hits = 0; var $warm_cache_hits = 0; var $cache_misses = 0; var $secret = ''; function acquire_lock() { // Acquire a write lock. $this->mutex = @fopen($this->cache_dir.$this->flock_filename, 'w'); if ( false == $this->mutex) return false; flock($this->mutex, LOCK_EX); return true; } function add($id, $data, $group = 'default', $expire = '') { if (empty ($group)) $group = 'default'; if (false != $this->get($id, $group, false)) return false; return $this->set($id, $data, $group, $expire); } function delete($id, $group = 'default', $force = false) { if (empty ($group)) $group = 'default'; if (!$force && false == $this->get($id, $group, false)) return false; unset ($this->cache[$group][$id]); $this->non_existant_objects[$group][$id] = true; $this->dirty_objects[$group][] = $id; return true; } function flush() { if ( !$this->cache_enabled ) return true; if ( ! $this->acquire_lock() ) return false; $this->rm_cache_dir(); $this->cache = array (); $this->dirty_objects = array (); $this->non_existant_objects = array (); $this->release_lock(); return true; } function get($id, $group = 'default', $count_hits = true) { if (empty ($group)) $group = 'default'; if (isset ($this->cache[$group][$id])) { if ($count_hits) $this->warm_cache_hits += 1; return $this->cache[$group][$id]; } if (isset ($this->non_existant_objects[$group][$id])) return false; // If caching is not enabled, we have to fall back to pulling from the DB. if (!$this->cache_enabled) { if (!isset ($this->cache[$group])) $this->load_group_from_db($group); if (isset ($this->cache[$group][$id])) { $this->cold_cache_hits += 1; return $this->cache[$group][$id]; } $this->non_existant_objects[$group][$id] = true; $this->cache_misses += 1; return false; } $cache_file = $this->cache_dir.$this->get_group_dir($group)."/".$this->hash($id).'.php'; if (!file_exists($cache_file)) { $this->non_existant_objects[$group][$id] = true; $this->cache_misses += 1; return false; } // If the object has expired, remove it from the cache and return false to force // a refresh. $now = time(); if ((filemtime($cache_file) + $this->expiration_time) <= $now) { $this->cache_misses += 1; $this->delete($id, $group, true); return false; } $this->cache[$group][$id] = unserialize(base64_decode(substr(@ file_get_contents($cache_file), strlen(CACHE_SERIAL_HEADER), -strlen(CACHE_SERIAL_FOOTER)))); if (false == $this->cache[$group][$id]) $this->cache[$group][$id] = ''; $this->cold_cache_hits += 1; return $this->cache[$group][$id]; } function get_group_dir($group) { if (false != array_search($group, $this->global_groups)) return $group; return "{$this->blog_id}/$group"; } function hash($data) { if ( function_exists('hash_hmac') ) { return hash_hmac('md5', $data, $this->secret); } else { return md5($data . $this->secret); } } function load_group_from_db($group) { global $wpdb; if ('category' == $group) { $this->cache['category'] = array (); if ($dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories")) { foreach ($dogs as $catt) $this->cache['category'][$catt->cat_ID] = $catt; } } } function make_group_dir($group, $perms) { $group_dir = $this->get_group_dir($group); $make_dir = ''; foreach (split('/', $group_dir) as $subdir) { $make_dir .= "$subdir/"; if (!file_exists($this->cache_dir.$make_dir)) { if (! @ mkdir($this->cache_dir.$make_dir)) break; @ chmod($this->cache_dir.$make_dir, $perms); } if (!file_exists($this->cache_dir.$make_dir."index.php")) { $file_perms = $perms & 0000666; @ touch($this->cache_dir.$make_dir."index.php"); @ chmod($this->cache_dir.$make_dir."index.php", $file_perms); } } return $this->cache_dir."$group_dir/"; } function rm_cache_dir() { $dir = $this->cache_dir; $dir = rtrim($dir, DIRECTORY_SEPARATOR); $top_dir = $dir; $stack = array($dir); $index = 0; while ($index < count($stack)) { # Get indexed directory from stack $dir = $stack[$index]; $dh = @ opendir($dir); if (!$dh) return false; while (($file = @ readdir($dh)) != false) { if ($file == '.' or $file == '..') continue; if (@ is_dir($dir . DIRECTORY_SEPARATOR . $file)) $stack[] = $dir . DIRECTORY_SEPARATOR . $file; else if (@ is_file($dir . DIRECTORY_SEPARATOR . $file)) @ unlink($dir . DIRECTORY_SEPARATOR . $file); } $index++; } $stack = array_reverse($stack); // Last added dirs are deepest foreach($stack as $dir) { if ( $dir != $top_dir) @ rmdir($dir); } } function release_lock() { // Release write lock. flock($this->mutex, LOCK_UN); fclose($this->mutex); } function replace($id, $data, $group = 'default', $expire = '') { if (empty ($group)) $group = 'default'; if (false == $this->get($id, $group, false)) return false; return $this->set($id, $data, $group, $expire); } function set($id, $data, $group = 'default', $expire = '') { if (empty ($group)) $group = 'default'; if (NULL == $data) $data = ''; $this->cache[$group][$id] = $data; unset ($this->non_existant_objects[$group][$id]); $this->dirty_objects[$group][] = $id; return true; } function save() { //$this->stats(); if (!$this->cache_enabled) return true; if (empty ($this->dirty_objects)) return true; // Give the new dirs the same perms as wp-content. $stat = stat(ABSPATH.'wp-content'); $dir_perms = $stat['mode'] & 0007777; // Get the permission bits. $file_perms = $dir_perms & 0000666; // Remove execute bits for files. // Make the base cache dir. if (!file_exists($this->cache_dir)) { if (! @ mkdir($this->cache_dir)) return false; @ chmod($this->cache_dir, $dir_perms); } if (!file_exists($this->cache_dir."index.php")) { @ touch($this->cache_dir."index.php"); @ chmod($this->cache_dir."index.php", $file_perms); } if ( ! $this->acquire_lock() ) return false; // Loop over dirty objects and save them. $errors = 0; foreach ($this->dirty_objects as $group => $ids) { $group_dir = $this->make_group_dir($group, $dir_perms); $ids = array_unique($ids); foreach ($ids as $id) { $cache_file = $group_dir.$this->hash($id).'.php'; // Remove the cache file if the key is not set. if (!isset ($this->cache[$group][$id])) { if (file_exists($cache_file)) @ unlink($cache_file); continue; } $temp_file = tempnam($group_dir, 'tmp'); $serial = CACHE_SERIAL_HEADER.base64_encode(serialize($this->cache[$group][$id])).CACHE_SERIAL_FOOTER; $fd = @fopen($temp_file, 'w'); if ( false == $fd ) { $errors++; continue; } fputs($fd, $serial); fclose($fd); if (!@ rename($temp_file, $cache_file)) { if (!@ copy($temp_file, $cache_file)) $errors++; @ unlink($temp_file); } @ chmod($cache_file, $file_perms); } } $this->dirty_objects = array(); $this->release_lock(); if ( $errors ) return false; return true; } function stats() { echo "

    "; echo "Cold Cache Hits: {$this->cold_cache_hits}
    "; echo "Warm Cache Hits: {$this->warm_cache_hits}
    "; echo "Cache Misses: {$this->cache_misses}
    "; echo "

    "; foreach ($this->cache as $group => $cache) { echo "

    "; echo "Group: $group
    "; echo "Cache:"; echo "

    ";
    			print_r($cache);
    			echo "
    "; if (isset ($this->dirty_objects[$group])) { echo "Dirty Objects:"; echo "
    ";
    				print_r(array_unique($this->dirty_objects[$group]));
    				echo "
    "; echo "

    "; } } } function WP_Object_Cache() { return $this->__construct(); } function __construct() { global $blog_id; register_shutdown_function(array(&$this, "__destruct")); if (defined('DISABLE_CACHE')) return; if ( ! defined('ENABLE_CACHE') ) return; // Disable the persistent cache if safe_mode is on. if ( ini_get('safe_mode') && ! defined('ENABLE_CACHE') ) return; if (defined('CACHE_PATH')) $this->cache_dir = CACHE_PATH; else // Using the correct separator eliminates some cache flush errors on Windows $this->cache_dir = ABSPATH.'wp-content'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR; if (is_writable($this->cache_dir) && is_dir($this->cache_dir)) { $this->cache_enabled = true; } else { if (is_writable(ABSPATH.'wp-content')) { $this->cache_enabled = true; } } if (defined('CACHE_EXPIRATION_TIME')) $this->expiration_time = CACHE_EXPIRATION_TIME; if ( defined('WP_SECRET') ) $this->secret = WP_SECRET; else $this->secret = DB_PASSWORD . DB_USER . DB_NAME . DB_HOST . ABSPATH; $this->blog_id = $this->hash($blog_id); } function __destruct() { $this->save(); return true; } } ?> &wordpress/wp-includes/capabilities.php1_init(); } function _init () { global $wpdb; global $wp_user_roles; $this->role_key = $wpdb->prefix . 'user_roles'; if ( ! empty($wp_user_roles) ) { $this->roles = $wp_user_roles; $this->use_db = false; } else { $this->roles = get_option($this->role_key); } if ( empty($this->roles) ) return; $this->role_objects = array(); $this->role_names = array(); foreach ($this->roles as $role => $data) { $this->role_objects[$role] = new WP_Role($role, $this->roles[$role]['capabilities']); $this->role_names[$role] = $this->roles[$role]['name']; } } function add_role($role, $display_name, $capabilities = '') { if ( isset($this->roles[$role]) ) return; $this->roles[$role] = array( 'name' => $display_name, 'capabilities' => $capabilities); if ( $this->use_db ) update_option($this->role_key, $this->roles); $this->role_objects[$role] = new WP_Role($role, $capabilities); $this->role_names[$role] = $display_name; return $this->role_objects[$role]; } function remove_role($role) { if ( ! isset($this->role_objects[$role]) ) return; unset($this->role_objects[$role]); unset($this->role_names[$role]); unset($this->roles[$role]); if ( $this->use_db ) update_option($this->role_key, $this->roles); } function add_cap($role, $cap, $grant = true) { $this->roles[$role]['capabilities'][$cap] = $grant; if ( $this->use_db ) update_option($this->role_key, $this->roles); } function remove_cap($role, $cap) { unset($this->roles[$role]['capabilities'][$cap]); if ( $this->use_db ) update_option($this->role_key, $this->roles); } function &get_role($role) { if ( isset($this->role_objects[$role]) ) return $this->role_objects[$role]; else return null; } function get_names() { return $this->role_names; } function is_role($role) { return isset($this->role_names[$role]); } } class WP_Role { var $name; var $capabilities; function WP_Role($role, $capabilities) { $this->name = $role; $this->capabilities = $capabilities; } function add_cap($cap, $grant = true) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); $this->capabilities[$cap] = $grant; $wp_roles->add_cap($this->name, $cap, $grant); } function remove_cap($cap) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); unset($this->capabilities[$cap]); $wp_roles->remove_cap($this->name, $cap); } function has_cap($cap) { $capabilities = apply_filters('role_has_cap', $this->capabilities, $cap, $this->name); if ( !empty($capabilities[$cap]) ) return $capabilities[$cap]; else return false; } } class WP_User { var $data; var $ID = 0; var $id = 0; // Deprecated, use $ID instead. var $caps = array(); var $cap_key; var $roles = array(); var $allcaps = array(); function WP_User($id, $name = '') { global $wpdb; if ( empty($id) && empty($name) ) return; if ( ! is_numeric($id) ) { $name = $id; $id = 0; } if ( ! empty($id) ) $this->data = get_userdata($id); else $this->data = get_userdatabylogin($name); if ( empty($this->data->ID) ) return; foreach (get_object_vars($this->data) as $key => $value) { $this->{$key} = $value; } $this->id = $this->ID; $this->_init_caps(); } function _init_caps() { global $wpdb; $this->cap_key = $wpdb->prefix . 'capabilities'; $this->caps = &$this->{$this->cap_key}; if ( ! is_array($this->caps) ) $this->caps = array(); $this->get_role_caps(); } function get_role_caps() { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); //Filter out caps that are not role names and assign to $this->roles if(is_array($this->caps)) $this->roles = array_filter(array_keys($this->caps), array(&$wp_roles, 'is_role')); //Build $allcaps from role caps, overlay user's $caps $this->allcaps = array(); foreach( (array) $this->roles as $role) { $role = $wp_roles->get_role($role); $this->allcaps = array_merge($this->allcaps, $role->capabilities); } $this->allcaps = array_merge($this->allcaps, $this->caps); } function add_role($role) { $this->caps[$role] = true; update_usermeta($this->ID, $this->cap_key, $this->caps); $this->get_role_caps(); $this->update_user_level_from_caps(); } function remove_role($role) { if ( empty($this->roles[$role]) || (count($this->roles) <= 1) ) return; unset($this->caps[$role]); update_usermeta($this->ID, $this->cap_key, $this->caps); $this->get_role_caps(); } function set_role($role) { foreach($this->roles as $oldrole) unset($this->caps[$oldrole]); if ( !empty($role) ) { $this->caps[$role] = true; $this->roles = array($role => true); } else { $this->roles = false; } update_usermeta($this->ID, $this->cap_key, $this->caps); $this->get_role_caps(); $this->update_user_level_from_caps(); } function level_reduction($max, $item) { if(preg_match('/^level_(10|[0-9])$/i', $item, $matches)) { $level = intval($matches[1]); return max($max, $level); } else { return $max; } } function update_user_level_from_caps() { global $wpdb; $this->user_level = array_reduce(array_keys($this->allcaps), array(&$this, 'level_reduction'), 0); update_usermeta($this->ID, $wpdb->prefix.'user_level', $this->user_level); } function add_cap($cap, $grant = true) { $this->caps[$cap] = $grant; printf ("ADD_CAP [" . $this->cap_key ."]\n"); update_usermeta($this->ID, $this->cap_key, $this->caps); } function remove_cap($cap) { if ( empty($this->caps[$cap]) ) return; unset($this->caps[$cap]); update_usermeta($this->ID, $this->cap_key, $this->caps); } function remove_all_caps() { global $wpdb; $this->caps = array(); update_usermeta($this->ID, $this->cap_key, ''); update_usermeta($this->ID, $wpdb->prefix.'user_level', ''); $this->get_role_caps(); } //has_cap(capability_or_role_name) or //has_cap('edit_post', post_id) function has_cap($cap) { if ( is_numeric($cap) ) $cap = $this->translate_level_to_cap($cap); $args = array_slice(func_get_args(), 1); $args = array_merge(array($cap, $this->ID), $args); $caps = call_user_func_array('map_meta_cap', $args); // Must have ALL requested caps $capabilities = apply_filters('user_has_cap', $this->allcaps, $caps, $args); foreach ($caps as $cap) { //echo "Checking cap $cap
    "; if(empty($capabilities[$cap]) || !$capabilities[$cap]) return false; } return true; } function translate_level_to_cap($level) { return 'level_' . $level; } } // Map meta capabilities to primitive capabilities. function map_meta_cap($cap, $user_id) { $args = array_slice(func_get_args(), 2); $caps = array(); switch ($cap) { case 'delete_user': $caps[] = 'delete_users'; break; case 'edit_user': $caps[] = 'edit_users'; break; case 'delete_post': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $post = get_post($args[0]); if ( 'page' == $post->post_type ) { $args = array_merge(array('delete_page', $user_id), $args); return call_user_func_array('map_meta_cap', $args); } $post_author_data = get_userdata($post->post_author); //echo "current user id : $user_id, post author id: " . $post_author_data->ID . "
    "; // If the user is the author... if ($user_id == $post_author_data->ID) { // If the post is published... if ($post->post_status == 'publish') $caps[] = 'delete_published_posts'; else // If the post is draft... $caps[] = 'delete_posts'; } else { // The user is trying to edit someone else's post. $caps[] = 'delete_others_posts'; // The post is published, extra cap required. if ($post->post_status == 'publish') $caps[] = 'delete_published_posts'; else if ($post->post_status == 'private') $caps[] = 'delete_private_posts'; } break; case 'delete_page': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $page = get_page($args[0]); $page_author_data = get_userdata($page->post_author); //echo "current user id : $user_id, page author id: " . $page_author_data->ID . "
    "; // If the user is the author... if ($user_id == $page_author_data->ID) { // If the page is published... if ($page->post_status == 'publish') $caps[] = 'delete_published_pages'; else // If the page is draft... $caps[] = 'delete_pages'; } else { // The user is trying to edit someone else's page. $caps[] = 'delete_others_pages'; // The page is published, extra cap required. if ($page->post_status == 'publish') $caps[] = 'delete_published_pages'; else if ($page->post_status == 'private') $caps[] = 'delete_private_pages'; } break; // edit_post breaks down to edit_posts, edit_published_posts, or // edit_others_posts case 'edit_post': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $post = get_post($args[0]); if ( 'page' == $post->post_type ) { $args = array_merge(array('edit_page', $user_id), $args); return call_user_func_array('map_meta_cap', $args); } $post_author_data = get_userdata($post->post_author); //echo "current user id : $user_id, post author id: " . $post_author_data->ID . "
    "; // If the user is the author... if ($user_id == $post_author_data->ID) { // If the post is published... if ($post->post_status == 'publish') $caps[] = 'edit_published_posts'; else // If the post is draft... $caps[] = 'edit_posts'; } else { // The user is trying to edit someone else's post. $caps[] = 'edit_others_posts'; // The post is published, extra cap required. if ($post->post_status == 'publish') $caps[] = 'edit_published_posts'; else if ($post->post_status == 'private') $caps[] = 'edit_private_posts'; } break; case 'edit_page': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $page = get_page($args[0]); $page_author_data = get_userdata($page->post_author); //echo "current user id : $user_id, page author id: " . $page_author_data->ID . "
    "; // If the user is the author... if ($user_id == $page_author_data->ID) { // If the page is published... if ($page->post_status == 'publish') $caps[] = 'edit_published_pages'; else // If the page is draft... $caps[] = 'edit_pages'; } else { // The user is trying to edit someone else's page. $caps[] = 'edit_others_pages'; // The page is published, extra cap required. if ($page->post_status == 'publish') $caps[] = 'edit_published_pages'; else if ($page->post_status == 'private') $caps[] = 'edit_private_pages'; } break; case 'read_post': $post = get_post($args[0]); if ( 'page' == $post->post_type ) { $args = array_merge(array('read_page', $user_id), $args); return call_user_func_array('map_meta_cap', $args); } if ( 'private' != $post->post_status ) { $caps[] = 'read'; break; } $author_data = get_userdata($user_id); $post_author_data = get_userdata($post->post_author); if ($user_id == $post_author_data->ID) $caps[] = 'read'; else $caps[] = 'read_private_posts'; break; case 'read_page': $page = get_page($args[0]); if ( 'private' != $page->post_status ) { $caps[] = 'read'; break; } $author_data = get_userdata($user_id); $page_author_data = get_userdata($page->post_author); if ($user_id == $page_author_data->ID) $caps[] = 'read'; else $caps[] = 'read_private_pages'; break; default: // If no meta caps match, return the original cap. $caps[] = $cap; } return $caps; } // Capability checking wrapper around the global $current_user object. function current_user_can($capability) { $current_user = wp_get_current_user(); $args = array_slice(func_get_args(), 1); $args = array_merge(array($capability), $args); if ( empty($current_user) ) return false; return call_user_func_array(array(&$current_user, 'has_cap'), $args); } // Convenience wrappers around $wp_roles. function get_role($role) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); return $wp_roles->get_role($role); } function add_role($role, $display_name, $capabilities = '') { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); return $wp_roles->add_role($role, $display_name, $capabilities); } function remove_role($role) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); return $wp_roles->remove_role($role); } ?> "wordpress/wp-includes/category.php(get_col("SELECT cat_ID FROM $wpdb->categories"); wp_cache_add('all_category_ids', $cat_ids, 'category'); } return $cat_ids; } function &get_categories($args = '') { global $wpdb, $category_links; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('type' => 'post', 'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => true, 'include_last_update_time' => false, 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'number' => '', 'pad_counts' => false); $r = array_merge($defaults, $r); if ( 'count' == $r['orderby'] ) $r['orderby'] = 'category_count'; else $r['orderby'] = "cat_" . $r['orderby']; // restricts order by to cat_ID and cat_name fields $r['number'] = (int) $r['number']; extract($r, EXTR_SKIP); $key = md5( serialize( $r ) ); if ( $cache = wp_cache_get( 'get_categories', 'category' ) ) if ( isset( $cache[ $key ] ) ) return apply_filters('get_categories', $cache[$key], $r); $where = 'cat_ID > 0'; $inclusions = ''; if ( !empty($include) ) { $child_of = 0; //ignore child_of and exclude params if using include $exclude = ''; $incategories = preg_split('/[\s,]+/',$include); if ( count($incategories) ) { foreach ( $incategories as $incat ) { if (empty($inclusions)) $inclusions = ' AND ( cat_ID = ' . intval($incat) . ' '; else $inclusions .= ' OR cat_ID = ' . intval($incat) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $where .= $inclusions; $exclusions = ''; if ( !empty($exclude) ) { $excategories = preg_split('/[\s,]+/',$exclude); if ( count($excategories) ) { foreach ( $excategories as $excat ) { if (empty($exclusions)) $exclusions = ' AND ( cat_ID <> ' . intval($excat) . ' '; else $exclusions .= ' AND cat_ID <> ' . intval($excat) . ' '; // TODO: Exclude children of excluded cats? Note: children are getting excluded } } } if (!empty($exclusions)) $exclusions .= ')'; $exclusions = apply_filters('list_cats_exclusions', $exclusions, $r ); $where .= $exclusions; if ( $hide_empty && !$hierarchical ) { if ( 'link' == $type ) $where .= ' AND link_count > 0'; else $where .= ' AND category_count > 0'; } // if ( !empty($number) ) // $number = 'LIMIT ' . $number; // else $number = ''; $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories WHERE $where ORDER BY $orderby $order $number"); if ( empty($categories) ) return array(); // TODO: Integrate this into the main query. if ( $include_last_update_time ) { $stamps = $wpdb->get_results("SELECT category_id, UNIX_TIMESTAMP( MAX(post_date) ) AS ts FROM $wpdb->posts, $wpdb->post2cat, $wpdb->categories WHERE post_status = 'publish' AND post_id = ID AND $where GROUP BY category_id"); global $cat_stamps; foreach ($stamps as $stamp) $cat_stamps[$stamp->category_id] = $stamp->ts; function stamp_cat($cat) { global $cat_stamps; $cat->last_update_timestamp = $cat_stamps[$cat->cat_ID]; return $cat; } $categories = array_map('stamp_cat', $categories); unset($cat_stamps); } if ( $child_of || $hierarchical ) { $children = _get_category_hierarchy(); if ( ! empty($children) ) $categories = & _get_cat_children($child_of, $categories); } // Update category counts to include children. if ( $pad_counts ) _pad_category_counts($type, $categories); // Make sure we show empty categories that have children. if ( $hierarchical && $hide_empty ) { foreach ( $categories as $k => $category ) { if ( ! $category->{'link' == $type ? 'link_count' : 'category_count'} ) { $children = _get_cat_children($category->cat_ID, $categories); foreach ( $children as $child ) if ( $child->{'link' == $type ? 'link_count' : 'category_count'} ) continue 2; // It really is empty unset($categories[$k]); } } } reset ( $categories ); $cache[ $key ] = $categories; wp_cache_add( 'get_categories', $cache, 'category' ); $categories = apply_filters('get_categories', $categories, $r); return $categories; } // Retrieves category data given a category ID or category object. // Handles category caching. function &get_category(&$category, $output = OBJECT) { global $wpdb; if ( empty($category) ) return null; if ( is_object($category) ) { wp_cache_add($category->cat_ID, $category, 'category'); $_category = $category; } else { $category = (int) $category; if ( ! $_category = wp_cache_get($category, 'category') ) { $_category = $wpdb->get_row("SELECT * FROM $wpdb->categories WHERE cat_ID = " . $category ); // LIMIT 1 wp_cache_add($category, $_category, 'category'); } } $_category = apply_filters('get_category', $_category); if ( $output == OBJECT ) { return $_category; } elseif ( $output == ARRAY_A ) { return get_object_vars($_category); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_category)); } else { return $_category; } } function get_category_by_path($category_path, $full_match = true, $output = OBJECT) { global $wpdb; $category_path = rawurlencode(urldecode($category_path)); $category_path = str_replace('%2F', '/', $category_path); $category_path = str_replace('%20', ' ', $category_path); $category_paths = '/' . trim($category_path, '/'); $leaf_path = sanitize_title(basename($category_paths)); $category_paths = explode('/', $category_paths); $full_path = ''; foreach ( (array) $category_paths as $pathdir ) $full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title($pathdir); $categories = $wpdb->get_results("SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE category_nicename = '$leaf_path'"); if ( empty($categories) ) return NULL; foreach ($categories as $category) { $path = '/' . $leaf_path; $curcategory = $category; while ( ($curcategory->category_parent != 0) && ($curcategory->category_parent != $curcategory->cat_ID) ) { $curcategory = $wpdb->get_row("SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE cat_ID = " . $curcategory->category_parent); $path = '/' . $curcategory->category_nicename . $path; } if ( $path == $full_path ) return get_category($category->cat_ID, $output); } // If full matching is not required, return the first cat that matches the leaf. if ( ! $full_match ) return get_category($categories[0]->cat_ID, $output); return NULL; } // Get the ID of a category from its name function get_cat_ID($cat_name='General') { global $wpdb; $cid = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$cat_name'"); return $cid?$cid:1; // default to cat 1 } // Deprecate function get_catname($cat_ID) { return get_cat_name($cat_ID); } // Get the name of a category from its ID function get_cat_name($cat_id) { $cat_id = (int) $cat_id; $category = &get_category($cat_id); return $category->cat_name; } function cat_is_ancestor_of($cat1, $cat2) { if ( is_int($cat1) ) $cat1 = & get_category($cat1); if ( is_int($cat2) ) $cat2 = & get_category($cat2); if ( !$cat1->cat_ID || !$cat2->category_parent ) return false; if ( $cat2->category_parent == $cat1->cat_ID ) return true; return cat_is_ancestor_of($cat1, get_category($cat2->parent_category)); } // // Private // function &_get_cat_children($category_id, $categories) { if ( empty($categories) ) return array(); $category_list = array(); $has_children = _get_category_hierarchy(); if ( ( 0 != $category_id ) && ! isset($has_children[$category_id]) ) return array(); foreach ( $categories as $category ) { if ( $category->cat_ID == $category_id ) continue; if ( $category->category_parent == $category_id ) { $category_list[] = $category; if ( !isset($has_children[$category->cat_ID]) ) continue; if ( $children = _get_cat_children($category->cat_ID, $categories) ) $category_list = array_merge($category_list, $children); } } return $category_list; } // Recalculates link or post counts by including items from child categories // Assumes all relevant children are already in the $categories argument function _pad_category_counts($type, &$categories) { global $wpdb; // Set up some useful arrays foreach ( $categories as $key => $cat ) { $cats[$cat->cat_ID] = & $categories[$key]; $cat_IDs[] = $cat->cat_ID; } // Get the relevant post2cat or link2cat records and stick them in a lookup table if ( $type == 'post' ) { $results = $wpdb->get_results("SELECT post_id, category_id FROM $wpdb->post2cat LEFT JOIN $wpdb->posts ON post_id = ID WHERE category_id IN (".join(',', $cat_IDs).") AND post_type = 'post' AND post_status = 'publish'"); if ($results && count($results)) foreach ( $results as $row ) ++$cat_items[$row->category_id][$row->post_id]; } else { $results = $wpdb->get_results("SELECT $wpdb->link2cat.link_id, category_id FROM $wpdb->link2cat LEFT JOIN $wpdb->links USING (link_id) WHERE category_id IN (".join(',', $cat_IDs).") AND link_visible = 'Y'"); if ($results && count($results)) foreach ( $results as $row ) ++$cat_items[$row->category_id][$row->link_id]; } // Touch every ancestor's lookup row for each post in each category foreach ( $cat_IDs as $cat_ID ) { $child = $cat_ID; while ( $parent = $cats[$child]->category_parent ) { if ( !empty($cat_items[$cat_ID]) ) foreach ( $cat_items[$cat_ID] as $item_id => $touches ) ++$cat_items[$parent][$item_id]; $child = $parent; } } // Transfer the touched cells foreach ( (array) $cat_items as $id => $items ) if ( isset($cats[$id]) ) $cats[$id]->{'link' == $type ? 'link_count' : 'category_count'} = count($items); } function _get_category_hierarchy() { $children = get_option('category_children'); if ( is_array($children) ) return $children; $children = array(); $categories = get_categories('hide_empty=0&hierarchical=0'); foreach ( $categories as $cat ) { if ( $cat->category_parent > 0 ) $children[$cat->category_parent][] = $cat->cat_ID; } update_option('category_children', $children); return $children; } ?> +wordpress/wp-includes/category-template.php#category_parent == $id ) { $chain .= $before.$category->cat_ID.$after; $chain .= get_category_children($category->cat_ID, $before, $after); } } return $chain; } function get_category_link($category_id) { global $wp_rewrite; $catlink = $wp_rewrite->get_category_permastruct(); if ( empty($catlink) ) { $file = get_option('home') . '/'; $catlink = $file . '?cat=' . $category_id; } else { $category = &get_category($category_id); $category_nicename = $category->category_nicename; if ( $parent = $category->category_parent ) $category_nicename = get_category_parents($parent, false, '/', true) . $category_nicename; $catlink = str_replace('%category%', $category_nicename, $catlink); $catlink = get_option('home') . user_trailingslashit($catlink, 'category'); } return apply_filters('category_link', $catlink, $category_id); } function get_category_parents($id, $link = FALSE, $separator = '/', $nicename = FALSE){ $chain = ''; $parent = &get_category($id); if ( $nicename ) $name = $parent->category_nicename; else $name = $parent->cat_name; if ( $parent->category_parent && ($parent->category_parent != $parent->cat_ID) ) $chain .= get_category_parents($parent->category_parent, $link, $separator, $nicename); if ( $link ) $chain .= 'cat_name) . '">'.$name.'' . $separator; else $chain .= $name.$separator; return $chain; } function get_the_category($id = false) { global $post, $category_cache, $blog_id; $id = (int) $id; if ( !$id ) $id = (int) $post->ID; if ( !isset($category_cache[$blog_id][$id]) ) update_post_category_cache($id); $categories = $category_cache[$blog_id][$id]; if ( !empty($categories) ) usort($categories, '_get_the_category_usort'); else $categories = array(); return $categories; } function _get_the_category_usort($a, $b) { return strcmp($a->category_name, $b->category_name); } function _get_the_category_usort_by_ID($a, $b) { if ( $a->cat_ID > $b->cat_ID ) return 1; elseif ( $a->cat_ID < $b->cat_ID ) return -1; else return 0; } function get_the_category_by_ID($cat_ID) { $cat_ID = (int) $cat_ID; $category = &get_category($cat_ID); return $category->cat_name; } function get_the_category_list($separator = '', $parents='') { global $wp_rewrite; $categories = get_the_category(); if (empty($categories)) return apply_filters('the_category', __('Uncategorized'), $separator, $parents); $rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"'; $thelist = ''; if ( '' == $separator ) { $thelist .= ''; } else { $i = 0; foreach ( $categories as $category ) { if ( 0 < $i ) $thelist .= $separator . ' '; switch ( strtolower($parents) ) { case 'multiple': if ( $category->category_parent ) $thelist .= get_category_parents($category->category_parent, TRUE); $thelist .= 'cat_name) . '" ' . $rel . '>' . $category->cat_name.''; break; case 'single': $thelist .= 'cat_name) . '" ' . $rel . '>'; if ( $category->category_parent ) $thelist .= get_category_parents($category->category_parent, FALSE); $thelist .= "$category->cat_name"; break; case '': default: $thelist .= 'cat_name) . '" ' . $rel . '>' . $category->cat_name.''; } ++$i; } } return apply_filters('the_category', $thelist, $separator, $parents); } function in_category($category) { // Check if the current post is in the given category global $category_cache, $post, $blog_id; if ( isset( $category_cache[$blog_id][$post->ID][$category] ) ) return true; else return false; } function the_category($separator = '', $parents='') { echo get_the_category_list($separator, $parents); } function category_description($category = 0) { global $cat; if ( !$category ) $category = $cat; $category = & get_category($category); return apply_filters('category_description', $category->category_description, $category->cat_ID); } function wp_dropdown_categories($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_option_all' => '', 'show_option_none' => '', 'orderby' => 'ID', 'order' => 'ASC', 'show_last_update' => 0, 'show_count' => 0, 'hide_empty' => 1, 'child_of' => 0, 'exclude' => '', 'echo' => 1, 'selected' => 0, 'hierarchical' => 0, 'name' => 'cat', 'class' => 'postform'); $defaults['selected'] = ( is_category() ) ? get_query_var('cat') : 0; $r = array_merge($defaults, $r); $r['include_last_update_time'] = $r['show_last_update']; extract($r, EXTR_SKIP); $categories = get_categories($r); $output = ''; if ( ! empty($categories) ) { $output = "\n"; } $output = apply_filters('wp_dropdown_cats', $output); if ( $echo ) echo $output; return $output; } function wp_list_categories($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_option_all' => '', 'orderby' => 'name', 'order' => 'ASC', 'show_last_update' => 0, 'style' => 'list', 'show_count' => 0, 'hide_empty' => 1, 'use_desc_for_title' => 1, 'child_of' => 0, 'feed' => '', 'feed_image' => '', 'exclude' => '', 'hierarchical' => true, 'title_li' => __('Categories')); $r = array_merge($defaults, $r); if ( !isset($r['pad_counts']) && $r['show_count'] && $r['hierarchical'] ) $r['pad_counts'] = true; if ( isset($r['show_date']) ) $r['include_last_update_time'] = $r['show_date']; extract($r, EXTR_SKIP); $categories = get_categories($r); $output = ''; if ( $title_li && 'list' == $style ) $output = '
  • ' . $r['title_li'] . '
      '; if ( empty($categories) ) { if ( 'list' == $style ) $output .= '
    • ' . __("No categories") . '
    • '; else $output .= __("No categories"); } else { global $wp_query; if( !empty($show_option_all) ) if ('list' == $style ) $output .= '
    • ' . $show_option_all . '
    • '; else $output .= '' . $show_option_all . ''; if ( is_category() ) $r['current_category'] = $wp_query->get_queried_object_id(); if ( $hierarchical ) $depth = 0; // Walk the full depth. else $depth = -1; // Flat. $output .= walk_category_tree($categories, $depth, $r); } if ( $title_li && 'list' == $style ) $output .= '
  • '; echo apply_filters('wp_list_categories', $output); } // // Helper functions // function walk_category_tree() { $walker = new Walker_Category; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } function walk_category_dropdown_tree() { $walker = new Walker_CategoryDropdown; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } ?> !wordpress/wp-includes/classes.phpZDpublic_query_vars[] = $qv; } function parse_request($extra_query_vars = '') { global $wp_rewrite; $this->query_vars = array(); if ( is_array($extra_query_vars) ) $this->extra_query_vars = & $extra_query_vars; else if (! empty($extra_query_vars)) parse_str($extra_query_vars, $this->extra_query_vars); // Process PATH_INFO, REQUEST_URI, and 404 for permalinks. // Fetch the rewrite rules. $rewrite = $wp_rewrite->wp_rewrite_rules(); if (! empty($rewrite)) { // If we match a rewrite rule, this will be cleared. $error = '404'; $this->did_permalink = true; if ( isset($_SERVER['PATH_INFO']) ) $pathinfo = $_SERVER['PATH_INFO']; else $pathinfo = ''; $pathinfo_array = explode('?', $pathinfo); $pathinfo = str_replace("%", "%25", $pathinfo_array[0]); $req_uri = $_SERVER['REQUEST_URI']; $req_uri_array = explode('?', $req_uri); $req_uri = $req_uri_array[0]; $self = $_SERVER['PHP_SELF']; $home_path = parse_url(get_option('home')); if ( isset($home_path['path']) ) $home_path = $home_path['path']; else $home_path = ''; $home_path = trim($home_path, '/'); // Trim path info from the end and the leading home path from the // front. For path info requests, this leaves us with the requesting // filename, if any. For 404 requests, this leaves us with the // requested permalink. $req_uri = str_replace($pathinfo, '', rawurldecode($req_uri)); $req_uri = trim($req_uri, '/'); $req_uri = preg_replace("|^$home_path|", '', $req_uri); $req_uri = trim($req_uri, '/'); $pathinfo = trim($pathinfo, '/'); $pathinfo = preg_replace("|^$home_path|", '', $pathinfo); $pathinfo = trim($pathinfo, '/'); $self = trim($self, '/'); $self = preg_replace("|^$home_path|", '', $self); $self = str_replace($home_path, '', $self); $self = trim($self, '/'); // The requested permalink is in $pathinfo for path info requests and // $req_uri for other requests. if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) { $request = $pathinfo; } else { // If the request uri is the index, blank it out so that we don't try to match it against a rule. if ( $req_uri == $wp_rewrite->index ) $req_uri = ''; $request = $req_uri; } $this->request = $request; // Look for matches. $request_match = $request; foreach ($rewrite as $match => $query) { // If the requesting file is the anchor of the match, prepend it // to the path info. if ((! empty($req_uri)) && (strpos($match, $req_uri) == 0) && ($req_uri != $request)) { $request_match = $req_uri . '/' . $request; } if (preg_match("!^$match!", $request_match, $matches) || preg_match("!^$match!", urldecode($request_match), $matches)) { // Got a match. $this->matched_rule = $match; // Trim the query of everything up to the '?'. $query = preg_replace("!^.+\?!", '', $query); // Substitute the substring matches into the query. eval("\$query = \"$query\";"); $this->matched_query = $query; // Parse the query. parse_str($query, $perma_query_vars); // If we're processing a 404 request, clear the error var // since we found something. if (isset($_GET['error'])) unset($_GET['error']); if (isset($error)) unset($error); break; } } // If req_uri is empty or if it is a request for ourself, unset error. if (empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') != false) { if (isset($_GET['error'])) unset($_GET['error']); if (isset($error)) unset($error); if (isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') != false) unset($perma_query_vars); $this->did_permalink = false; } } $this->public_query_vars = apply_filters('query_vars', $this->public_query_vars); for ($i=0; $ipublic_query_vars); $i += 1) { $wpvar = $this->public_query_vars[$i]; if (isset($this->extra_query_vars[$wpvar])) $this->query_vars[$wpvar] = $this->extra_query_vars[$wpvar]; elseif (isset($GLOBALS[$wpvar])) $this->query_vars[$wpvar] = $GLOBALS[$wpvar]; elseif (!empty($_POST[$wpvar])) $this->query_vars[$wpvar] = $_POST[$wpvar]; elseif (!empty($_GET[$wpvar])) $this->query_vars[$wpvar] = $_GET[$wpvar]; elseif (!empty($perma_query_vars[$wpvar])) $this->query_vars[$wpvar] = $perma_query_vars[$wpvar]; if ( !empty( $this->query_vars[$wpvar] ) ) $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar]; } foreach ($this->private_query_vars as $var) { if (isset($this->extra_query_vars[$var])) $this->query_vars[$var] = $this->extra_query_vars[$var]; elseif (isset($GLOBALS[$var]) && '' != $GLOBALS[$var]) $this->query_vars[$var] = $GLOBALS[$var]; } if ( isset($error) ) $this->query_vars['error'] = $error; $this->query_vars = apply_filters('request', $this->query_vars); do_action_ref_array('parse_request', array(&$this)); } function send_headers() { @header('X-Pingback: '. get_bloginfo('pingback_url')); if ( is_user_logged_in() ) nocache_headers(); if ( !empty($this->query_vars['error']) && '404' == $this->query_vars['error'] ) { status_header( 404 ); if ( !is_user_logged_in() ) nocache_headers(); @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); } else if ( empty($this->query_vars['feed']) ) { @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); } else { // We're showing a feed, so WP is indeed the only thing that last changed if ( $this->query_vars['withcomments'] || ( !$this->query_vars['withoutcomments'] && ( $this->query_vars['p'] || $this->query_vars['name'] || $this->query_vars['page_id'] || $this->query_vars['pagename'] || $this->query_vars['attachment'] || $this->query_vars['attachment_id'] ) ) ) $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastcommentmodified('GMT'), 0).' GMT'; else $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; $wp_etag = '"' . md5($wp_last_modified) . '"'; @header("Last-Modified: $wp_last_modified"); @header("ETag: $wp_etag"); // Support for Conditional GET if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) $client_etag = stripslashes(stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])); else $client_etag = false; $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']); // If string is empty, return 0. If not, attempt to parse into a timestamp $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; // Make a timestamp for our most recent modification... $wp_modified_timestamp = strtotime($wp_last_modified); if ( ($client_last_modified && $client_etag) ? (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { status_header( 304 ); exit; } } do_action_ref_array('send_headers', array(&$this)); } function build_query_string() { $this->query_string = ''; foreach (array_keys($this->query_vars) as $wpvar) { if ( '' != $this->query_vars[$wpvar] ) { $this->query_string .= (strlen($this->query_string) < 1) ? '' : '&'; if ( !is_scalar($this->query_vars[$wpvar]) ) // Discard non-scalars. continue; $this->query_string .= $wpvar . '=' . rawurlencode($this->query_vars[$wpvar]); } } // query_string filter deprecated. Use request filter instead. global $wp_filter; if ( isset($wp_filter['query_string']) ) { // Don't bother filtering and parsing if no plugins are hooked in. $this->query_string = apply_filters('query_string', $this->query_string); parse_str($this->query_string, $this->query_vars); } } function register_globals() { global $wp_query; // Extract updated query vars back into global namespace. foreach ($wp_query->query_vars as $key => $value) { $GLOBALS[$key] = $value; } $GLOBALS['query_string'] = & $this->query_string; $GLOBALS['posts'] = & $wp_query->posts; $GLOBALS['post'] = & $wp_query->post; $GLOBALS['request'] = & $wp_query->request; if ( is_single() || is_page() ) { $GLOBALS['more'] = 1; $GLOBALS['single'] = 1; } } function init() { wp_get_current_user(); } function query_posts() { global $wp_the_query; $this->build_query_string(); $wp_the_query->query($this->query_vars); } function handle_404() { global $wp_query; // Issue a 404 if a permalink request doesn't match any posts. Don't // issue a 404 if one was already issued, if the request was a search, // or if the request was a regular query string request rather than a // permalink request. if ( (0 == count($wp_query->posts)) && !is_404() && !is_search() && ( $this->did_permalink || (!empty($_SERVER['QUERY_STRING']) && (false == strpos($_SERVER['REQUEST_URI'], '?'))) ) ) { $wp_query->set_404(); status_header( 404 ); nocache_headers(); } elseif( is_404() != true ) { status_header( 200 ); } } function main($query_args = '') { $this->init(); $this->parse_request($query_args); $this->send_headers(); $this->query_posts(); $this->handle_404(); $this->register_globals(); do_action_ref_array('wp', array(&$this)); } function WP() { // Empty. } } class WP_Error { var $errors = array(); var $error_data = array(); function WP_Error($code = '', $message = '', $data = '') { if ( empty($code) ) return; $this->errors[$code][] = $message; if ( ! empty($data) ) $this->error_data[$code] = $data; } function get_error_codes() { if ( empty($this->errors) ) return array(); return array_keys($this->errors); } function get_error_code() { $codes = $this->get_error_codes(); if ( empty($codes) ) return ''; return $codes[0]; } function get_error_messages($code = '') { // Return all messages if no code specified. if ( empty($code) ) { $all_messages = array(); foreach ( $this->errors as $code => $messages ) $all_messages = array_merge($all_messages, $messages); return $all_messages; } if ( isset($this->errors[$code]) ) return $this->errors[$code]; else return array(); } function get_error_message($code = '') { if ( empty($code) ) $code = $this->get_error_code(); $messages = $this->get_error_messages($code); if ( empty($messages) ) return ''; return $messages[0]; } function get_error_data($code = '') { if ( empty($code) ) $code = $this->get_error_code(); if ( isset($this->error_data[$code]) ) return $this->error_data[$code]; return null; } function add($code, $message, $data = '') { $this->errors[$code][] = $message; if ( ! empty($data) ) $this->error_data[$code] = $data; } function add_data($data, $code = '') { if ( empty($code) ) $code = $this->get_error_code(); $this->error_data[$code] = $data; } } function is_wp_error($thing) { if ( is_object($thing) && is_a($thing, 'WP_Error') ) return true; return false; } // A class for displaying various tree-like structures. Extend the Walker class to use it, see examples at the bottom class Walker { var $tree_type; var $db_fields; //abstract callbacks function start_lvl($output) { return $output; } function end_lvl($output) { return $output; } function start_el($output) { return $output; } function end_el($output) { return $output; } function walk($elements, $to_depth) { $args = array_slice(func_get_args(), 2); $parents = array(); $depth = 1; $previous_element = ''; $output = ''; //padding at the end $last_element->post_parent = 0; $last_element->post_id = 0; $elements[] = $last_element; $id_field = $this->db_fields['id']; $parent_field = $this->db_fields['parent']; $flat = ($to_depth == -1) ? true : false; foreach ( $elements as $element ) { // If flat, start and end the element and skip the level checks. if ( $flat) { // Start the element. if ( isset($element->$id_field) && $element->$id_field != 0 ) { $cb_args = array_merge( array($output, $element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'start_el'), $cb_args); } // End the element. if ( isset($element->$id_field) && $element->$id_field != 0 ) { $cb_args = array_merge( array($output, $element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } continue; } // Walk the tree. if ( !empty($previous_element) && ($element->$parent_field == $previous_element->$id_field) ) { // Previous element is my parent. Descend a level. array_unshift($parents, $previous_element); if ( !$to_depth || ($depth < $to_depth) ) { //only descend if we're below $to_depth $cb_args = array_merge( array($output, $depth), $args); $output = call_user_func_array(array(&$this, 'start_lvl'), $cb_args); } else if ( $to_depth && $depth == $to_depth ) { // If we've reached depth, end the previous element. $cb_args = array_merge( array($output, $previous_element, $depth), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } $depth++; //always do this so when we start the element further down, we know where we are } else if ( $element->$parent_field == $previous_element->$parent_field) { // On the same level as previous element. if ( !$to_depth || ($depth <= $to_depth) ) { $cb_args = array_merge( array($output, $previous_element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } } else if ( $depth > 1 ) { // Ascend one or more levels. if ( !$to_depth || ($depth <= $to_depth) ) { $cb_args = array_merge( array($output, $previous_element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } while ( $parent = array_shift($parents) ) { $depth--; if ( !$to_depth || ($depth < $to_depth) ) { $cb_args = array_merge( array($output, $depth), $args); $output = call_user_func_array(array(&$this, 'end_lvl'), $cb_args); $cb_args = array_merge( array($output, $parent, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } if ( $element->$parent_field == $parents[0]->$id_field ) { break; } } } else if ( !empty($previous_element) ) { // Close off previous element. if ( !$to_depth || ($depth <= $to_depth) ) { $cb_args = array_merge( array($output, $previous_element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } } // Start the element. if ( !$to_depth || ($depth <= $to_depth) ) { if ( $element->$id_field != 0 ) { $cb_args = array_merge( array($output, $element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'start_el'), $cb_args); } } $previous_element = $element; } return $output; } } class Walker_Page extends Walker { var $tree_type = 'page'; var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this function start_lvl($output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent
      \n"; return $output; } function end_lvl($output, $depth) { $indent = str_repeat("\t", $depth); $output .= "$indent
    \n"; return $output; } function start_el($output, $page, $depth, $current_page, $args) { if ( $depth ) $indent = str_repeat("\t", $depth); extract($args, EXTR_SKIP); $css_class = 'page_item'; $_current_page = get_page( $current_page ); if ( $page->ID == $current_page ) $css_class .= ' current_page_item'; elseif ( $_current_page && $page->ID == $_current_page->post_parent ) $css_class .= ' current_page_parent'; $output .= $indent . '
  • ' . apply_filters('the_title', $page->post_title) . ''; if ( !empty($show_date) ) { if ( 'modified' == $show_date ) $time = $page->post_modified; else $time = $page->post_date; $output .= " " . mysql2date($date_format, $time); } return $output; } function end_el($output, $page, $depth) { $output .= "
  • \n"; return $output; } } class Walker_PageDropdown extends Walker { var $tree_type = 'page'; var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this function start_el($output, $page, $depth, $args) { $pad = str_repeat(' ', $depth * 3); $output .= "\t\n"; return $output; } } class Walker_Category extends Walker { var $tree_type = 'category'; var $db_fields = array ('parent' => 'category_parent', 'id' => 'cat_ID'); //TODO: decouple this function start_lvl($output, $depth, $args) { if ( 'list' != $args['style'] ) return $output; $indent = str_repeat("\t", $depth); $output .= "$indent
      \n"; return $output; } function end_lvl($output, $depth, $args) { if ( 'list' != $args['style'] ) return $output; $indent = str_repeat("\t", $depth); $output .= "$indent
    \n"; return $output; } function start_el($output, $category, $depth, $args) { extract($args); $cat_name = attribute_escape( $category->cat_name); $cat_name = apply_filters( 'list_cats', $cat_name, $category ); $link = 'category_description) ) $link .= 'title="' . sprintf(__( 'View all posts filed under %s' ), $cat_name) . '"'; else $link .= 'title="' . attribute_escape( apply_filters( 'category_description', $category->category_description, $category )) . '"'; $link .= '>'; $link .= $cat_name . ''; if ( (! empty($feed_image)) || (! empty($feed)) ) { $link .= ' '; if ( empty($feed_image) ) $link .= '('; $link .= ''; $link .= ''; if ( empty($feed_image) ) $link .= ')'; } if ( isset($show_count) && $show_count ) $link .= ' (' . intval($category->category_count) . ')'; if ( isset($show_date) && $show_date ) { $link .= ' ' . gmdate('Y-m-d', $category->last_update_timestamp); } if ( $current_category ) $_current_category = get_category( $current_category ); if ( 'list' == $args['style'] ) { $output .= "\tcat_ID == $current_category) ) $output .= ' class="current-cat"'; elseif ( $_current_category && ($category->cat_ID == $_current_category->category_parent) ) $output .= ' class="current-cat-parent"'; $output .= ">$link\n"; } else { $output .= "\t$link
    \n"; } return $output; } function end_el($output, $page, $depth, $args) { if ( 'list' != $args['style'] ) return $output; $output .= "\n"; return $output; } } class Walker_CategoryDropdown extends Walker { var $tree_type = 'category'; var $db_fields = array ('parent' => 'category_parent', 'id' => 'cat_ID'); //TODO: decouple this function start_el($output, $category, $depth, $args) { $pad = str_repeat(' ', $depth * 3); $cat_name = apply_filters('list_cats', $category->cat_name, $category); $output .= "\t\n"; return $output; } } class WP_Ajax_Response { var $responses = array(); function WP_Ajax_Response( $args = '' ) { if ( !empty($args) ) $this->add($args); } // a WP_Error object can be passed in 'id' or 'data' function add( $args = '' ) { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('what' => 'object', 'action' => false, 'id' => '0', 'old_id' => false, 'data' => '', 'supplemental' => array()); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); if ( is_wp_error($id) ) { $data = $id; $id = 0; } $response = ''; if ( is_wp_error($data) ) foreach ( $data->get_error_codes() as $code ) $response .= "get_error_message($code) . "]]>"; else $response = ""; $s = ''; if ( (array) $supplemental ) foreach ( $supplemental as $k => $v ) $s .= "<$k>"; if ( false == $action ) $action = $_POST['action']; $x = ''; $x .= ""; // The action attribute in the xml output is formatted like a nonce action $x .= "<$what id='$id'" . ( false != $old_id ? "old_id='$old_id'>" : '>' ); $x .= $response; $x .= $s; $x .= ""; $x .= ""; $this->responses[] = $x; return $x; } function send() { header('Content-type: text/xml'); echo ""; foreach ( $this->responses as $response ) echo $response; echo ''; die(); } } ?> #wordpress/wp-includes/class-IXR.phpkdata = $data; if (!$type) { $type = $this->calculateType(); } $this->type = $type; if ($type == 'struct') { /* Turn all the values in the array in to new IXR_Value objects */ foreach ($this->data as $key => $value) { $this->data[$key] = new IXR_Value($value); } } if ($type == 'array') { for ($i = 0, $j = count($this->data); $i < $j; $i++) { $this->data[$i] = new IXR_Value($this->data[$i]); } } } function calculateType() { if ($this->data == true || $this->data == false) { return 'boolean'; } if (is_integer($this->data)) { return 'int'; } if (is_double($this->data)) { return 'double'; } // Deal with IXR object types base64 and date if (is_object($this->data) && is_a($this->data, 'IXR_Date')) { return 'date'; } if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) { return 'base64'; } // If it is a normal PHP object convert it in to a struct if (is_object($this->data)) { $this->data = get_object_vars($this->data); return 'struct'; } if (!is_array($this->data)) { return 'string'; } /* We have an array - is it an array or a struct ? */ if ($this->isStruct($this->data)) { return 'struct'; } else { return 'array'; } } function getXml() { /* Return XML for this value */ switch ($this->type) { case 'boolean': return ''.(($this->data) ? '1' : '0').''; break; case 'int': return ''.$this->data.''; break; case 'double': return ''.$this->data.''; break; case 'string': return ''.htmlspecialchars($this->data).''; break; case 'array': $return = ''."\n"; foreach ($this->data as $item) { $return .= ' '.$item->getXml()."\n"; } $return .= ''; return $return; break; case 'struct': $return = ''."\n"; foreach ($this->data as $name => $value) { $name = htmlspecialchars($name); $return .= " $name"; $return .= $value->getXml()."\n"; } $return .= ''; return $return; break; case 'date': case 'base64': return $this->data->getXml(); break; } return false; } function isStruct($array) { /* Nasty function to check if an array is a struct or not */ $expected = 0; foreach ($array as $key => $value) { if ((string)$key != (string)$expected) { return true; } $expected++; } return false; } } class IXR_Message { var $message; var $messageType; // methodCall / methodResponse / fault var $faultCode; var $faultString; var $methodName; var $params; // Current variable stacks var $_arraystructs = array(); // The stack used to keep track of the current array/struct var $_arraystructstypes = array(); // Stack keeping track of if things are structs or array var $_currentStructName = array(); // A stack as well var $_param; var $_value; var $_currentTag; var $_currentTagContents; // The XML parser var $_parser; function IXR_Message ($message) { $this->message = $message; } function parse() { // first remove the XML declaration $this->message = preg_replace('/<\?xml(.*)?\?'.'>/', '', $this->message); if (trim($this->message) == '') { return false; } $this->_parser = xml_parser_create(); // Set XML parser to take the case of tags in to account xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); // Set XML parser callback functions xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, 'tag_open', 'tag_close'); xml_set_character_data_handler($this->_parser, 'cdata'); if (!xml_parse($this->_parser, $this->message)) { /* die(sprintf('XML error: %s at line %d', xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser))); */ return false; } xml_parser_free($this->_parser); // Grab the error messages, if any if ($this->messageType == 'fault') { $this->faultCode = $this->params[0]['faultCode']; $this->faultString = $this->params[0]['faultString']; } return true; } function tag_open($parser, $tag, $attr) { $this->_currentTagContents = ''; $this->currentTag = $tag; switch($tag) { case 'methodCall': case 'methodResponse': case 'fault': $this->messageType = $tag; break; /* Deal with stacks of arrays and structs */ case 'data': // data is to all intents and puposes more interesting than array $this->_arraystructstypes[] = 'array'; $this->_arraystructs[] = array(); break; case 'struct': $this->_arraystructstypes[] = 'struct'; $this->_arraystructs[] = array(); break; } } function cdata($parser, $cdata) { $this->_currentTagContents .= $cdata; } function tag_close($parser, $tag) { $valueFlag = false; switch($tag) { case 'int': case 'i4': $value = (int) trim($this->_currentTagContents); $valueFlag = true; break; case 'double': $value = (double) trim($this->_currentTagContents); $valueFlag = true; break; case 'string': $value = $this->_currentTagContents; $valueFlag = true; break; case 'dateTime.iso8601': $value = new IXR_Date(trim($this->_currentTagContents)); // $value = $iso->getTimestamp(); $valueFlag = true; break; case 'value': // "If no type is indicated, the type is string." if (trim($this->_currentTagContents) != '') { $value = (string)$this->_currentTagContents; $valueFlag = true; } break; case 'boolean': $value = (boolean) trim($this->_currentTagContents); $valueFlag = true; break; case 'base64': $value = base64_decode( trim( $this->_currentTagContents ) ); $valueFlag = true; break; /* Deal with stacks of arrays and structs */ case 'data': case 'struct': $value = array_pop($this->_arraystructs); array_pop($this->_arraystructstypes); $valueFlag = true; break; case 'member': array_pop($this->_currentStructName); break; case 'name': $this->_currentStructName[] = trim($this->_currentTagContents); break; case 'methodName': $this->methodName = trim($this->_currentTagContents); break; } if ($valueFlag) { if (count($this->_arraystructs) > 0) { // Add value to struct or array if ($this->_arraystructstypes[count($this->_arraystructstypes)-1] == 'struct') { // Add to struct $this->_arraystructs[count($this->_arraystructs)-1][$this->_currentStructName[count($this->_currentStructName)-1]] = $value; } else { // Add to array $this->_arraystructs[count($this->_arraystructs)-1][] = $value; } } else { // Just add as a paramater $this->params[] = $value; } } $this->_currentTagContents = ''; } } class IXR_Server { var $data; var $callbacks = array(); var $message; var $capabilities; function IXR_Server($callbacks = false, $data = false) { $this->setCapabilities(); if ($callbacks) { $this->callbacks = $callbacks; } $this->setCallbacks(); $this->serve($data); } function serve($data = false) { if (!$data) { global $HTTP_RAW_POST_DATA; if (!$HTTP_RAW_POST_DATA) { die('XML-RPC server accepts POST requests only.'); } $data = $HTTP_RAW_POST_DATA; } $this->message = new IXR_Message($data); if (!$this->message->parse()) { $this->error(-32700, 'parse error. not well formed'); } if ($this->message->messageType != 'methodCall') { $this->error(-32600, 'server error. invalid xml-rpc. not conforming to spec. Request must be a methodCall'); } $result = $this->call($this->message->methodName, $this->message->params); // Is the result an error? if (is_a($result, 'IXR_Error')) { $this->error($result); } // Encode the result $r = new IXR_Value($result); $resultxml = $r->getXml(); // Create the XML $xml = << $resultxml EOD; // Send it $this->output($xml); } function call($methodname, $args) { if (!$this->hasMethod($methodname)) { return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.'); } $method = $this->callbacks[$methodname]; // Perform the callback and send the response if (count($args) == 1) { // If only one paramater just send that instead of the whole array $args = $args[0]; } // Are we dealing with a function or a method? if (substr($method, 0, 5) == 'this:') { // It's a class method - check it exists $method = substr($method, 5); if (!method_exists($this, $method)) { return new IXR_Error(-32601, 'server error. requested class method "'.$method.'" does not exist.'); } // Call the method $result = $this->$method($args); } else { // It's a function - does it exist? if (is_array($method)) { if (!method_exists($method[0], $method[1])) { return new IXR_Error(-32601, 'server error. requested object method "'.$method[1].'" does not exist.'); } } else if (!function_exists($method)) { return new IXR_Error(-32601, 'server error. requested function "'.$method.'" does not exist.'); } // Call the function $result = call_user_func($method, $args); } return $result; } function error($error, $message = false) { // Accepts either an error object or an error code and message if ($message && !is_object($error)) { $error = new IXR_Error($error, $message); } $this->output($error->getXml()); } function output($xml) { $xml = ''."\n".$xml; $length = strlen($xml); header('Connection: close'); header('Content-Length: '.$length); header('Content-Type: text/xml'); header('Date: '.date('r')); echo $xml; exit; } function hasMethod($method) { return in_array($method, array_keys($this->callbacks)); } function setCapabilities() { // Initialises capabilities array $this->capabilities = array( 'xmlrpc' => array( 'specUrl' => 'http://www.xmlrpc.com/spec', 'specVersion' => 1 ), 'faults_interop' => array( 'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php', 'specVersion' => 20010516 ), 'system.multicall' => array( 'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208', 'specVersion' => 1 ), ); } function getCapabilities($args) { return $this->capabilities; } function setCallbacks() { $this->callbacks['system.getCapabilities'] = 'this:getCapabilities'; $this->callbacks['system.listMethods'] = 'this:listMethods'; $this->callbacks['system.multicall'] = 'this:multiCall'; } function listMethods($args) { // Returns a list of methods - uses array_reverse to ensure user defined // methods are listed before server defined methods return array_reverse(array_keys($this->callbacks)); } function multiCall($methodcalls) { // See http://www.xmlrpc.com/discuss/msgReader$1208 $return = array(); foreach ($methodcalls as $call) { $method = $call['methodName']; $params = $call['params']; if ($method == 'system.multicall') { $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden'); } else { $result = $this->call($method, $params); } if (is_a($result, 'IXR_Error')) { $return[] = array( 'faultCode' => $result->code, 'faultString' => $result->message ); } else { $return[] = array($result); } } return $return; } } class IXR_Request { var $method; var $args; var $xml; function IXR_Request($method, $args) { $this->method = $method; $this->args = $args; $this->xml = << {$this->method} EOD; foreach ($this->args as $arg) { $this->xml .= ''; $v = new IXR_Value($arg); $this->xml .= $v->getXml(); $this->xml .= "\n"; } $this->xml .= ''; } function getLength() { return strlen($this->xml); } function getXml() { return $this->xml; } } class IXR_Client { var $server; var $port; var $path; var $useragent; var $response; var $message = false; var $debug = false; var $timeout; // Storage place for an error message var $error = false; function IXR_Client($server, $path = false, $port = 80, $timeout = false) { if (!$path) { // Assume we have been given a URL instead $bits = parse_url($server); $this->server = $bits['host']; $this->port = isset($bits['port']) ? $bits['port'] : 80; $this->path = isset($bits['path']) ? $bits['path'] : '/'; // Make absolutely sure we have a path if (!$this->path) { $this->path = '/'; } } else { $this->server = $server; $this->path = $path; $this->port = $port; } $this->useragent = 'Incutio XML-RPC'; $this->timeout = $timeout; } function query() { $args = func_get_args(); $method = array_shift($args); $request = new IXR_Request($method, $args); $length = $request->getLength(); $xml = $request->getXml(); $r = "\r\n"; $request = "POST {$this->path} HTTP/1.0$r"; $request .= "Host: {$this->server}$r"; $request .= "Content-Type: text/xml$r"; $request .= "User-Agent: {$this->useragent}$r"; $request .= "Content-length: {$length}$r$r"; $request .= $xml; // Now send the request if ($this->debug) { echo '
    '.htmlspecialchars($request)."\n
    \n\n"; } if ($this->timeout) { $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout); } else { $fp = @fsockopen($this->server, $this->port, $errno, $errstr); } if (!$fp) { $this->error = new IXR_Error(-32300, "transport error - could not open socket: $errno $errstr"); return false; } fputs($fp, $request); $contents = ''; $gotFirstLine = false; $gettingHeaders = true; while (!feof($fp)) { $line = fgets($fp, 4096); if (!$gotFirstLine) { // Check line for '200' if (strstr($line, '200') == false) { $this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200'); return false; } $gotFirstLine = true; } if (trim($line) == '') { $gettingHeaders = false; } if (!$gettingHeaders) { $contents .= trim($line)."\n"; } } if ($this->debug) { echo '
    '.htmlspecialchars($contents)."\n
    \n\n"; } // Now parse what we've got back $this->message = new IXR_Message($contents); if (!$this->message->parse()) { // XML error $this->error = new IXR_Error(-32700, 'parse error. not well formed'); return false; } // Is the message a fault? if ($this->message->messageType == 'fault') { $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString); return false; } // Message must be OK return true; } function getResponse() { // methodResponses can only have one param - return that return $this->message->params[0]; } function isError() { return (is_object($this->error)); } function getErrorCode() { return $this->error->code; } function getErrorMessage() { return $this->error->message; } } class IXR_Error { var $code; var $message; function IXR_Error($code, $message) { $this->code = $code; $this->message = $message; } function getXml() { $xml = << faultCode {$this->code} faultString {$this->message} EOD; return $xml; } } class IXR_Date { var $year; var $month; var $day; var $hour; var $minute; var $second; function IXR_Date($time) { // $time can be a PHP timestamp or an ISO one if (is_numeric($time)) { $this->parseTimestamp($time); } else { $this->parseIso($time); } } function parseTimestamp($timestamp) { $this->year = date('Y', $timestamp); $this->month = date('m', $timestamp); $this->day = date('d', $timestamp); $this->hour = date('H', $timestamp); $this->minute = date('i', $timestamp); $this->second = date('s', $timestamp); } function parseIso($iso) { $this->year = substr($iso, 0, 4); $this->month = substr($iso, 4, 2); $this->day = substr($iso, 6, 2); $this->hour = substr($iso, 9, 2); $this->minute = substr($iso, 12, 2); $this->second = substr($iso, 15, 2); $this->timezone = substr($iso, 17); } function getIso() { return $this->year.$this->month.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second.$this->timezone; } function getXml() { return ''.$this->getIso().''; } function getTimestamp() { return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year); } } class IXR_Base64 { var $data; function IXR_Base64($data) { $this->data = $data; } function getXml() { return ''.base64_encode($this->data).''; } } class IXR_IntrospectionServer extends IXR_Server { var $signatures; var $help; function IXR_IntrospectionServer() { $this->setCallbacks(); $this->setCapabilities(); $this->capabilities['introspection'] = array( 'specUrl' => 'http://xmlrpc.usefulinc.com/doc/reserved.html', 'specVersion' => 1 ); $this->addCallback( 'system.methodSignature', 'this:methodSignature', array('array', 'string'), 'Returns an array describing the return type and required parameters of a method' ); $this->addCallback( 'system.getCapabilities', 'this:getCapabilities', array('struct'), 'Returns a struct describing the XML-RPC specifications supported by this server' ); $this->addCallback( 'system.listMethods', 'this:listMethods', array('array'), 'Returns an array of available methods on this server' ); $this->addCallback( 'system.methodHelp', 'this:methodHelp', array('string', 'string'), 'Returns a documentation string for the specified method' ); } function addCallback($method, $callback, $args, $help) { $this->callbacks[$method] = $callback; $this->signatures[$method] = $args; $this->help[$method] = $help; } function call($methodname, $args) { // Make sure it's in an array if ($args && !is_array($args)) { $args = array($args); } // Over-rides default call method, adds signature check if (!$this->hasMethod($methodname)) { return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.'); } $method = $this->callbacks[$methodname]; $signature = $this->signatures[$methodname]; $returnType = array_shift($signature); // Check the number of arguments if (count($args) != count($signature)) { return new IXR_Error(-32602, 'server error. wrong number of method parameters'); } // Check the argument types $ok = true; $argsbackup = $args; for ($i = 0, $j = count($args); $i < $j; $i++) { $arg = array_shift($args); $type = array_shift($signature); switch ($type) { case 'int': case 'i4': if (is_array($arg) || !is_int($arg)) { $ok = false; } break; case 'base64': case 'string': if (!is_string($arg)) { $ok = false; } break; case 'boolean': if ($arg != false && $arg != true) { $ok = false; } break; case 'float': case 'double': if (!is_float($arg)) { $ok = false; } break; case 'date': case 'dateTime.iso8601': if (!is_a($arg, 'IXR_Date')) { $ok = false; } break; } if (!$ok) { return new IXR_Error(-32602, 'server error. invalid method parameters'); } } // It passed the test - run the "real" method call return parent::call($methodname, $argsbackup); } function methodSignature($method) { if (!$this->hasMethod($method)) { return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.'); } // We should be returning an array of types $types = $this->signatures[$method]; $return = array(); foreach ($types as $type) { switch ($type) { case 'string': $return[] = 'string'; break; case 'int': case 'i4': $return[] = 42; break; case 'double': $return[] = 3.1415; break; case 'dateTime.iso8601': $return[] = new IXR_Date(time()); break; case 'boolean': $return[] = true; break; case 'base64': $return[] = new IXR_Base64('base64'); break; case 'array': $return[] = array('array'); break; case 'struct': $return[] = array('struct' => 'struct'); break; } } return $return; } function methodHelp($method) { return $this->help[$method]; } } class IXR_ClientMulticall extends IXR_Client { var $calls = array(); function IXR_ClientMulticall($server, $path = false, $port = 80) { parent::IXR_Client($server, $path, $port); $this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)'; } function addCall() { $args = func_get_args(); $methodName = array_shift($args); $struct = array( 'methodName' => $methodName, 'params' => $args ); $this->calls[] = $struct; } function query() { // Prepare multicall, then call the parent::query() method return parent::query('system.multicall', $this->calls); } } ?>)wordpress/wp-includes/class-phpmailer.phpgContentType = "text/html"; else $this->ContentType = "text/plain"; } /** * Sets Mailer to send message using SMTP. * @return void */ function IsSMTP() { $this->Mailer = "smtp"; } /** * Sets Mailer to send message using PHP mail() function. * @return void */ function IsMail() { $this->Mailer = "mail"; } /** * Sets Mailer to send message using the $Sendmail program. * @return void */ function IsSendmail() { $this->Mailer = "sendmail"; } /** * Sets Mailer to send message using the qmail MTA. * @return void */ function IsQmail() { $this->Sendmail = "/var/qmail/bin/sendmail"; $this->Mailer = "sendmail"; } ///////////////////////////////////////////////// // RECIPIENT METHODS ///////////////////////////////////////////////// /** * Adds a "To" address. * @param string $address * @param string $name * @return void */ function AddAddress($address, $name = "") { $cur = count($this->to); $this->to[$cur][0] = trim($address); $this->to[$cur][1] = $name; } /** * Adds a "Cc" address. Note: this function works * with the SMTP mailer on win32, not with the "mail" * mailer. * @param string $address * @param string $name * @return void */ function AddCC($address, $name = "") { $cur = count($this->cc); $this->cc[$cur][0] = trim($address); $this->cc[$cur][1] = $name; } /** * Adds a "Bcc" address. Note: this function works * with the SMTP mailer on win32, not with the "mail" * mailer. * @param string $address * @param string $name * @return void */ function AddBCC($address, $name = "") { $cur = count($this->bcc); $this->bcc[$cur][0] = trim($address); $this->bcc[$cur][1] = $name; } /** * Adds a "Reply-to" address. * @param string $address * @param string $name * @return void */ function AddReplyTo($address, $name = "") { $cur = count($this->ReplyTo); $this->ReplyTo[$cur][0] = trim($address); $this->ReplyTo[$cur][1] = $name; } ///////////////////////////////////////////////// // MAIL SENDING METHODS ///////////////////////////////////////////////// /** * Creates message and assigns Mailer. If the message is * not sent successfully then it returns false. Use the ErrorInfo * variable to view description of the error. * @return bool */ function Send() { $header = ""; $body = ""; $result = true; if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { $this->SetError($this->Lang("provide_address")); return false; } // Set whether the message is multipart/alternative if(!empty($this->AltBody)) $this->ContentType = "multipart/alternative"; $this->error_count = 0; // reset errors $this->SetMessageType(); $header .= $this->CreateHeader(); $body = $this->CreateBody(); if($body == "") { return false; } // Choose the mailer switch($this->Mailer) { case "sendmail": $result = $this->SendmailSend($header, $body); break; case "mail": $result = $this->MailSend($header, $body); break; case "smtp": $result = $this->SmtpSend($header, $body); break; default: $this->SetError($this->Mailer . $this->Lang("mailer_not_supported")); $result = false; break; } return $result; } /** * Sends mail using the $Sendmail program. * @access private * @return bool */ function SendmailSend($header, $body) { if ($this->Sender != "") $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, escapeshellarg($this->Sender)); else $sendmail = sprintf("%s -oi -t", $this->Sendmail); if(!@$mail = popen($sendmail, "w")) { $this->SetError($this->Lang("execute") . $this->Sendmail); return false; } fputs($mail, $header); fputs($mail, $body); $result = pclose($mail) >> 8 & 0xFF; if($result != 0) { $this->SetError($this->Lang("execute") . $this->Sendmail); return false; } return true; } /** * Sends mail using the PHP mail() function. * @access private * @return bool */ function MailSend($header, $body) { $to = ""; for($i = 0; $i < count($this->to); $i++) { if($i != 0) { $to .= ", "; } $to .= $this->to[$i][0]; } if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1) { $old_from = ini_get("sendmail_from"); ini_set("sendmail_from", $this->Sender); $params = sprintf("-oi -f %s", $this->Sender); $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header, $params); } else $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header); if (isset($old_from)) ini_set("sendmail_from", $old_from); if(!$rt) { $this->SetError($this->Lang("instantiate")); return false; } return true; } /** * Sends mail via SMTP using PhpSMTP (Author: * Chris Ryan). Returns bool. Returns false if there is a * bad MAIL FROM, RCPT, or DATA input. * @access private * @return bool */ function SmtpSend($header, $body) { include_once($this->PluginDir . "class.smtp.php"); $error = ""; $bad_rcpt = array(); if(!$this->SmtpConnect()) return false; $smtp_from = ($this->Sender == "") ? $this->From : $this->Sender; if(!$this->smtp->Mail($smtp_from)) { $error = $this->Lang("from_failed") . $smtp_from; $this->SetError($error); $this->smtp->Reset(); return false; } // Attempt to send attach all recipients for($i = 0; $i < count($this->to); $i++) { if(!$this->smtp->Recipient($this->to[$i][0])) $bad_rcpt[] = $this->to[$i][0]; } for($i = 0; $i < count($this->cc); $i++) { if(!$this->smtp->Recipient($this->cc[$i][0])) $bad_rcpt[] = $this->cc[$i][0]; } for($i = 0; $i < count($this->bcc); $i++) { if(!$this->smtp->Recipient($this->bcc[$i][0])) $bad_rcpt[] = $this->bcc[$i][0]; } if(count($bad_rcpt) > 0) // Create error message { for($i = 0; $i < count($bad_rcpt); $i++) { if($i != 0) { $error .= ", "; } $error .= $bad_rcpt[$i]; } $error = $this->Lang("recipients_failed") . $error; $this->SetError($error); $this->smtp->Reset(); return false; } if(!$this->smtp->Data($header . $body)) { $this->SetError($this->Lang("data_not_accepted")); $this->smtp->Reset(); return false; } if($this->SMTPKeepAlive == true) $this->smtp->Reset(); else $this->SmtpClose(); return true; } /** * Initiates a connection to an SMTP server. Returns false if the * operation failed. * @access private * @return bool */ function SmtpConnect() { if($this->smtp == NULL) { $this->smtp = new SMTP(); } $this->smtp->do_debug = $this->SMTPDebug; $hosts = explode(";", $this->Host); $index = 0; $connection = ($this->smtp->Connected()); // Retry while there is no connection while($index < count($hosts) && $connection == false) { if(strstr($hosts[$index], ":")) list($host, $port) = explode(":", $hosts[$index]); else { $host = $hosts[$index]; $port = $this->Port; } if($this->smtp->Connect($host, $port, $this->Timeout)) { if ($this->Helo != '') $this->smtp->Hello($this->Helo); else $this->smtp->Hello($this->ServerHostname()); if($this->SMTPAuth) { if(!$this->smtp->Authenticate($this->Username, $this->Password)) { $this->SetError($this->Lang("authenticate")); $this->smtp->Reset(); $connection = false; } } $connection = true; } $index++; } if(!$connection) $this->SetError($this->Lang("connect_host")); return $connection; } /** * Closes the active SMTP session if one exists. * @return void */ function SmtpClose() { if($this->smtp != NULL) { if($this->smtp->Connected()) { $this->smtp->Quit(); $this->smtp->Close(); } } } /** * Sets the language for all class error messages. Returns false * if it cannot load the language file. The default language type * is English. * @param string $lang_type Type of language (e.g. Portuguese: "br") * @param string $lang_path Path to the language file directory * @access public * @return bool */ function SetLanguage($lang_type, $lang_path = "language/") { if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) include($lang_path.'phpmailer.lang-'.$lang_type.'.php'); else if(file_exists($lang_path.'phpmailer.lang-en.php')) include($lang_path.'phpmailer.lang-en.php'); else { $this->SetError("Could not load language file"); return false; } $this->language = $PHPMAILER_LANG; return true; } ///////////////////////////////////////////////// // MESSAGE CREATION METHODS ///////////////////////////////////////////////// /** * Creates recipient headers. * @access private * @return string */ function AddrAppend($type, $addr) { $addr_str = $type . ": "; $addr_str .= $this->AddrFormat($addr[0]); if(count($addr) > 1) { for($i = 1; $i < count($addr); $i++) $addr_str .= ", " . $this->AddrFormat($addr[$i]); } $addr_str .= $this->LE; return $addr_str; } /** * Formats an address correctly. * @access private * @return string */ function AddrFormat($addr) { if(empty($addr[1])) $formatted = $addr[0]; else { $formatted = $this->EncodeHeader($addr[1], 'phrase') . " <" . $addr[0] . ">"; } return $formatted; } /** * Wraps message for use with mailers that do not * automatically perform wrapping and for quoted-printable. * Original written by philippe. * @access private * @return string */ function WrapText($message, $length, $qp_mode = false) { $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; $message = $this->FixEOL($message); if (substr($message, -1) == $this->LE) $message = substr($message, 0, -1); $line = explode($this->LE, $message); $message = ""; for ($i=0 ;$i < count($line); $i++) { $line_part = explode(" ", $line[$i]); $buf = ""; for ($e = 0; $e $length)) { $space_left = $length - strlen($buf) - 1; if ($e != 0) { if ($space_left > 20) { $len = $space_left; if (substr($word, $len - 1, 1) == "=") $len--; elseif (substr($word, $len - 2, 1) == "=") $len -= 2; $part = substr($word, 0, $len); $word = substr($word, $len); $buf .= " " . $part; $message .= $buf . sprintf("=%s", $this->LE); } else { $message .= $buf . $soft_break; } $buf = ""; } while (strlen($word) > 0) { $len = $length; if (substr($word, $len - 1, 1) == "=") $len--; elseif (substr($word, $len - 2, 1) == "=") $len -= 2; $part = substr($word, 0, $len); $word = substr($word, $len); if (strlen($word) > 0) $message .= $part . sprintf("=%s", $this->LE); else $buf = $part; } } else { $buf_o = $buf; $buf .= ($e == 0) ? $word : (" " . $word); if (strlen($buf) > $length and $buf_o != "") { $message .= $buf_o . $soft_break; $buf = $word; } } } $message .= $buf . $this->LE; } return $message; } /** * Set the body wrapping. * @access private * @return void */ function SetWordWrap() { if($this->WordWrap < 1) return; switch($this->message_type) { case "alt": // fall through case "alt_attachments": $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); break; default: $this->Body = $this->WrapText($this->Body, $this->WordWrap); break; } } /** * Assembles message header. * @access private * @return string */ function CreateHeader() { $result = ""; // Set the boundaries $uniq_id = md5(uniqid(time())); $this->boundary[1] = "b1_" . $uniq_id; $this->boundary[2] = "b2_" . $uniq_id; $result .= $this->HeaderLine("Date", $this->RFCDate()); if($this->Sender == "") $result .= $this->HeaderLine("Return-Path", trim($this->From)); else $result .= $this->HeaderLine("Return-Path", trim($this->Sender)); // To be created automatically by mail() if($this->Mailer != "mail") { if(count($this->to) > 0) $result .= $this->AddrAppend("To", $this->to); else if (count($this->cc) == 0) $result .= $this->HeaderLine("To", "undisclosed-recipients:;"); if(count($this->cc) > 0) $result .= $this->AddrAppend("Cc", $this->cc); } $from = array(); $from[0][0] = trim($this->From); $from[0][1] = $this->FromName; $result .= $this->AddrAppend("From", $from); // sendmail and mail() extract Bcc from the header before sending if((($this->Mailer == "sendmail") || ($this->Mailer == "mail")) && (count($this->bcc) > 0)) $result .= $this->AddrAppend("Bcc", $this->bcc); if(count($this->ReplyTo) > 0) $result .= $this->AddrAppend("Reply-to", $this->ReplyTo); // mail() sets the subject itself if($this->Mailer != "mail") $result .= $this->HeaderLine("Subject", $this->EncodeHeader(trim($this->Subject))); $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); $result .= $this->HeaderLine("X-Priority", $this->Priority); if($this->ConfirmReadingTo != "") { $result .= $this->HeaderLine("Disposition-Notification-To", "<" . trim($this->ConfirmReadingTo) . ">"); } // Add custom headers for($index = 0; $index < count($this->CustomHeader); $index++) { $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); } $result .= $this->HeaderLine("MIME-Version", "1.0"); switch($this->message_type) { case "plain": $result .= $this->HeaderLine("Content-Transfer-Encoding", $this->Encoding); $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet); break; case "attachments": // fall through case "alt_attachments": if($this->InlineImageExists()) { $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", "multipart/related", $this->LE, $this->LE, $this->boundary[1], $this->LE); } else { $result .= $this->HeaderLine("Content-Type", "multipart/mixed;"); $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); } break; case "alt": $result .= $this->HeaderLine("Content-Type", "multipart/alternative;"); $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); break; } if($this->Mailer != "mail") $result .= $this->LE.$this->LE; return $result; } /** * Assembles the message body. Returns an empty string on failure. * @access private * @return string */ function CreateBody() { $result = ""; $this->SetWordWrap(); switch($this->message_type) { case "alt": $result .= $this->GetBoundary($this->boundary[1], "", "text/plain", ""); $result .= $this->EncodeString($this->AltBody, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->GetBoundary($this->boundary[1], "", "text/html", ""); $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->EndBoundary($this->boundary[1]); break; case "plain": $result .= $this->EncodeString($this->Body, $this->Encoding); break; case "attachments": $result .= $this->GetBoundary($this->boundary[1], "", "", ""); $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE; $result .= $this->AttachAll(); break; case "alt_attachments": $result .= sprintf("--%s%s", $this->boundary[1], $this->LE); $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", "multipart/alternative", $this->LE, $this->boundary[2], $this->LE.$this->LE); // Create text body $result .= $this->GetBoundary($this->boundary[2], "", "text/plain", "") . $this->LE; $result .= $this->EncodeString($this->AltBody, $this->Encoding); $result .= $this->LE.$this->LE; // Create the HTML body $result .= $this->GetBoundary($this->boundary[2], "", "text/html", "") . $this->LE; $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->EndBoundary($this->boundary[2]); $result .= $this->AttachAll(); break; } if($this->IsError()) $result = ""; return $result; } /** * Returns the start of a message boundary. * @access private */ function GetBoundary($boundary, $charSet, $contentType, $encoding) { $result = ""; if($charSet == "") { $charSet = $this->CharSet; } if($contentType == "") { $contentType = $this->ContentType; } if($encoding == "") { $encoding = $this->Encoding; } $result .= $this->TextLine("--" . $boundary); $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); $result .= $this->LE; $result .= $this->HeaderLine("Content-Transfer-Encoding", $encoding); $result .= $this->LE; return $result; } /** * Returns the end of a message boundary. * @access private */ function EndBoundary($boundary) { return $this->LE . "--" . $boundary . "--" . $this->LE; } /** * Sets the message type. * @access private * @return void */ function SetMessageType() { if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) $this->message_type = "plain"; else { if(count($this->attachment) > 0) $this->message_type = "attachments"; if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) $this->message_type = "alt"; if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) $this->message_type = "alt_attachments"; } } /** * Returns a formatted header line. * @access private * @return string */ function HeaderLine($name, $value) { return $name . ": " . $value . $this->LE; } /** * Returns a formatted mail line. * @access private * @return string */ function TextLine($value) { return $value . $this->LE; } ///////////////////////////////////////////////// // ATTACHMENT METHODS ///////////////////////////////////////////////// /** * Adds an attachment from a path on the filesystem. * Returns false if the file could not be found * or accessed. * @param string $path Path to the attachment. * @param string $name Overrides the attachment name. * @param string $encoding File encoding (see $Encoding). * @param string $type File extension (MIME) type. * @return bool */ function AddAttachment($path, $name = "", $encoding = "base64", $type = "application/octet-stream") { if(!@is_file($path)) { $this->SetError($this->Lang("file_access") . $path); return false; } $filename = basename($path); if($name == "") $name = $filename; $cur = count($this->attachment); $this->attachment[$cur][0] = $path; $this->attachment[$cur][1] = $filename; $this->attachment[$cur][2] = $name; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; $this->attachment[$cur][5] = false; // isStringAttachment $this->attachment[$cur][6] = "attachment"; $this->attachment[$cur][7] = 0; return true; } /** * Attaches all fs, string, and binary attachments to the message. * Returns an empty string on failure. * @access private * @return string */ function AttachAll() { // Return text of body $mime = array(); // Add all attachments for($i = 0; $i < count($this->attachment); $i++) { // Check for string attachment $bString = $this->attachment[$i][5]; if ($bString) $string = $this->attachment[$i][0]; else $path = $this->attachment[$i][0]; $filename = $this->attachment[$i][1]; $name = $this->attachment[$i][2]; $encoding = $this->attachment[$i][3]; $type = $this->attachment[$i][4]; $disposition = $this->attachment[$i][6]; $cid = $this->attachment[$i][7]; $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE); $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); if($disposition == "inline") $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE); // Encode as string attachment if($bString) { $mime[] = $this->EncodeString($string, $encoding); if($this->IsError()) { return ""; } $mime[] = $this->LE.$this->LE; } else { $mime[] = $this->EncodeFile($path, $encoding); if($this->IsError()) { return ""; } $mime[] = $this->LE.$this->LE; } } $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); return join("", $mime); } /** * Encodes attachment in requested format. Returns an * empty string on failure. * @access private * @return string */ function EncodeFile ($path, $encoding = "base64") { if(!@$fd = fopen($path, "rb")) { $this->SetError($this->Lang("file_open") . $path); return ""; } $magic_quotes = get_magic_quotes_runtime(); set_magic_quotes_runtime(0); $file_buffer = fread($fd, filesize($path)); $file_buffer = $this->EncodeString($file_buffer, $encoding); fclose($fd); set_magic_quotes_runtime($magic_quotes); return $file_buffer; } /** * Encodes string to requested format. Returns an * empty string on failure. * @access private * @return string */ function EncodeString ($str, $encoding = "base64") { $encoded = ""; switch(strtolower($encoding)) { case "base64": // chunk_split is found in PHP >= 3.0.6 $encoded = chunk_split(base64_encode($str), 76, $this->LE); break; case "7bit": case "8bit": $encoded = $this->FixEOL($str); if (substr($encoded, -(strlen($this->LE))) != $this->LE) $encoded .= $this->LE; break; case "binary": $encoded = $str; break; case "quoted-printable": $encoded = $this->EncodeQP($str); break; default: $this->SetError($this->Lang("encoding") . $encoding); break; } return $encoded; } /** * Encode a header string to best of Q, B, quoted or none. * @access private * @return string */ function EncodeHeader ($str, $position = 'text') { $x = 0; switch (strtolower($position)) { case 'phrase': if (!preg_match('/[\200-\377]/', $str)) { // Can't use addslashes as we don't know what value has magic_quotes_sybase. $encoded = addcslashes($str, "\0..\37\177\\\""); if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) return ($encoded); else return ("\"$encoded\""); } $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); break; case 'comment': $x = preg_match_all('/[()"]/', $str, $matches); // Fall-through case 'text': default: $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); break; } if ($x == 0) return ($str); $maxlen = 75 - 7 - strlen($this->CharSet); // Try to select the encoding which should produce the shortest output if (strlen($str)/3 < $x) { $encoding = 'B'; $encoded = base64_encode($str); $maxlen -= $maxlen % 4; $encoded = trim(chunk_split($encoded, $maxlen, "\n")); } else { $encoding = 'Q'; $encoded = $this->EncodeQ($str, $position); $encoded = $this->WrapText($encoded, $maxlen, true); $encoded = str_replace("=".$this->LE, "\n", trim($encoded)); } $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); $encoded = trim(str_replace("\n", $this->LE, $encoded)); return $encoded; } /** * Encode string to quoted-printable. * @access private * @return string */ function EncodeQP ($str) { $encoded = $this->FixEOL($str); if (substr($encoded, -(strlen($this->LE))) != $this->LE) $encoded .= $this->LE; // Replace every high ascii, control and = characters $encoded = preg_replace('/([\000-\010\013\014\016-\037\075\177-\377])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); // Replace every spaces and tabs when it's the last character on a line $encoded = preg_replace("/([\011\040])".$this->LE."/e", "'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded); // Maximum line length of 76 characters before CRLF (74 + space + '=') $encoded = $this->WrapText($encoded, 74, true); return $encoded; } /** * Encode string to q encoding. * @access private * @return string */ function EncodeQ ($str, $position = "text") { // There should not be any EOL in the string $encoded = preg_replace("[\r\n]", "", $str); switch (strtolower($position)) { case "phrase": $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); break; case "comment": $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); case "text": default: // Replace every high ascii, control =, ? and _ characters $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); break; } // Replace every spaces to _ (more readable than =20) $encoded = str_replace(" ", "_", $encoded); return $encoded; } /** * Adds a string or binary attachment (non-filesystem) to the list. * This method can be used to attach ascii or binary data, * such as a BLOB record from a database. * @param string $string String attachment data. * @param string $filename Name of the attachment. * @param string $encoding File encoding (see $Encoding). * @param string $type File extension (MIME) type. * @return void */ function AddStringAttachment($string, $filename, $encoding = "base64", $type = "application/octet-stream") { // Append to $attachment array $cur = count($this->attachment); $this->attachment[$cur][0] = $string; $this->attachment[$cur][1] = $filename; $this->attachment[$cur][2] = $filename; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; $this->attachment[$cur][5] = true; // isString $this->attachment[$cur][6] = "attachment"; $this->attachment[$cur][7] = 0; } /** * Adds an embedded attachment. This can include images, sounds, and * just about any other document. Make sure to set the $type to an * image type. For JPEG images use "image/jpeg" and for GIF images * use "image/gif". * @param string $path Path to the attachment. * @param string $cid Content ID of the attachment. Use this to identify * the Id for accessing the image in an HTML form. * @param string $name Overrides the attachment name. * @param string $encoding File encoding (see $Encoding). * @param string $type File extension (MIME) type. * @return bool */ function AddEmbeddedImage($path, $cid, $name = "", $encoding = "base64", $type = "application/octet-stream") { if(!@is_file($path)) { $this->SetError($this->Lang("file_access") . $path); return false; } $filename = basename($path); if($name == "") $name = $filename; // Append to $attachment array $cur = count($this->attachment); $this->attachment[$cur][0] = $path; $this->attachment[$cur][1] = $filename; $this->attachment[$cur][2] = $name; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; $this->attachment[$cur][5] = false; // isStringAttachment $this->attachment[$cur][6] = "inline"; $this->attachment[$cur][7] = $cid; return true; } /** * Returns true if an inline attachment is present. * @access private * @return bool */ function InlineImageExists() { $result = false; for($i = 0; $i < count($this->attachment); $i++) { if($this->attachment[$i][6] == "inline") { $result = true; break; } } return $result; } ///////////////////////////////////////////////// // MESSAGE RESET METHODS ///////////////////////////////////////////////// /** * Clears all recipients assigned in the TO array. Returns void. * @return void */ function ClearAddresses() { $this->to = array(); } /** * Clears all recipients assigned in the CC array. Returns void. * @return void */ function ClearCCs() { $this->cc = array(); } /** * Clears all recipients assigned in the BCC array. Returns void. * @return void */ function ClearBCCs() { $this->bcc = array(); } /** * Clears all recipients assigned in the ReplyTo array. Returns void. * @return void */ function ClearReplyTos() { $this->ReplyTo = array(); } /** * Clears all recipients assigned in the TO, CC and BCC * array. Returns void. * @return void */ function ClearAllRecipients() { $this->to = array(); $this->cc = array(); $this->bcc = array(); } /** * Clears all previously set filesystem, string, and binary * attachments. Returns void. * @return void */ function ClearAttachments() { $this->attachment = array(); } /** * Clears all custom headers. Returns void. * @return void */ function ClearCustomHeaders() { $this->CustomHeader = array(); } ///////////////////////////////////////////////// // MISCELLANEOUS METHODS ///////////////////////////////////////////////// /** * Adds the error message to the error container. * Returns void. * @access private * @return void */ function SetError($msg) { $this->error_count++; $this->ErrorInfo = $msg; } /** * Returns the proper RFC 822 formatted date. * @access private * @return string */ function RFCDate() { $tz = date("Z"); $tzs = ($tz < 0) ? "-" : "+"; $tz = abs($tz); $tz = ($tz/3600)*100 + ($tz%3600)/60; $result = sprintf("%s %s%04d", date("D, j M Y H:i:s"), $tzs, $tz); return $result; } /** * Returns the appropriate server variable. Should work with both * PHP 4.1.0+ as well as older versions. Returns an empty string * if nothing is found. * @access private * @return mixed */ function ServerVar($varName) { global $HTTP_SERVER_VARS; global $HTTP_ENV_VARS; if(!isset($_SERVER)) { $_SERVER = $HTTP_SERVER_VARS; if(!isset($_SERVER["REMOTE_ADDR"])) $_SERVER = $HTTP_ENV_VARS; // must be Apache } if(isset($_SERVER[$varName])) return $_SERVER[$varName]; else return ""; } /** * Returns the server hostname or 'localhost.localdomain' if unknown. * @access private * @return string */ function ServerHostname() { if ($this->Hostname != "") $result = $this->Hostname; elseif ($this->ServerVar('SERVER_NAME') != "") $result = $this->ServerVar('SERVER_NAME'); else $result = "localhost.localdomain"; return $result; } /** * Returns a message in the appropriate language. * @access private * @return string */ function Lang($key) { if(count($this->language) < 1) $this->SetLanguage("en"); // set the default language if(isset($this->language[$key])) return $this->language[$key]; else return "Language string failed to load: " . $key; } /** * Returns true if an error occurred. * @return bool */ function IsError() { return ($this->error_count > 0); } /** * Changes every end of line from CR or LF to CRLF. * @access private * @return string */ function FixEOL($str) { $str = str_replace("\r\n", "\n", $str); $str = str_replace("\r", "\n", $str); $str = str_replace("\n", $this->LE, $str); return $str; } /** * Adds a custom header. * @return void */ function AddCustomHeader($custom_header) { $this->CustomHeader[] = explode(":", $custom_header, 2); } } ?> $wordpress/wp-includes/class-pop3.phpQBUFFER,"integer"); if( !empty($server) ) { // Do not allow programs to alter MAILSERVER // if it is already specified. They can get around // this if they -really- want to, so don't count on it. if(empty($this->MAILSERVER)) $this->MAILSERVER = $server; } if(!empty($timeout)) { settype($timeout,"integer"); $this->TIMEOUT = $timeout; if (!ini_get('safe_mode')) set_time_limit($timeout); } return true; } function update_timer () { if (!ini_get('safe_mode')) set_time_limit($this->TIMEOUT); return true; } function connect ($server, $port = 110) { // Opens a socket to the specified server. Unless overridden, // port defaults to 110. Returns true on success, false on fail // If MAILSERVER is set, override $server with it's value if (!isset($port) || !$port) {$port = 110;} if(!empty($this->MAILSERVER)) $server = $this->MAILSERVER; if(empty($server)){ $this->ERROR = _("POP3 connect:") . ' ' . _("No server specified"); unset($this->FP); return false; } $fp = @fsockopen("$server", $port, $errno, $errstr); if(!$fp) { $this->ERROR = _("POP3 connect:") . ' ' . _("Error ") . "[$errno] [$errstr]"; unset($this->FP); return false; } socket_set_blocking($fp,-1); $this->update_timer(); $reply = fgets($fp,$this->BUFFER); $reply = $this->strip_clf($reply); if($this->DEBUG) error_log("POP3 SEND [connect: $server] GOT [$reply]",0); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 connect:") . ' ' . _("Error ") . "[$reply]"; unset($this->FP); return false; } $this->FP = $fp; $this->BANNER = $this->parse_banner($reply); return true; } function user ($user = "") { // Sends the USER command, returns true or false if( empty($user) ) { $this->ERROR = _("POP3 user:") . ' ' . _("no login ID submitted"); return false; } elseif(!isset($this->FP)) { $this->ERROR = _("POP3 user:") . ' ' . _("connection not established"); return false; } else { $reply = $this->send_cmd("USER $user"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 user:") . ' ' . _("Error ") . "[$reply]"; return false; } else return true; } } function pass ($pass = "") { // Sends the PASS command, returns # of msgs in mailbox, // returns false (undef) on Auth failure if(empty($pass)) { $this->ERROR = _("POP3 pass:") . ' ' . _("No password submitted"); return false; } elseif(!isset($this->FP)) { $this->ERROR = _("POP3 pass:") . ' ' . _("connection not established"); return false; } else { $reply = $this->send_cmd("PASS $pass"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 pass:") . ' ' . _("Authentication failed ") . "[$reply]"; $this->quit(); return false; } else { // Auth successful. $count = $this->last("count"); $this->COUNT = $count; return $count; } } } function apop ($login,$pass) { // Attempts an APOP login. If this fails, it'll // try a standard login. YOUR SERVER MUST SUPPORT // THE USE OF THE APOP COMMAND! // (apop is optional per rfc1939) if(!isset($this->FP)) { $this->ERROR = _("POP3 apop:") . ' ' . _("No connection to server"); return false; } elseif(!$this->ALLOWAPOP) { $retVal = $this->login($login,$pass); return $retVal; } elseif(empty($login)) { $this->ERROR = _("POP3 apop:") . ' ' . _("No login ID submitted"); return false; } elseif(empty($pass)) { $this->ERROR = _("POP3 apop:") . ' ' . _("No password submitted"); return false; } else { $banner = $this->BANNER; if( (!$banner) or (empty($banner)) ) { $this->ERROR = _("POP3 apop:") . ' ' . _("No server banner") . ' - ' . _("abort"); $retVal = $this->login($login,$pass); return $retVal; } else { $AuthString = $banner; $AuthString .= $pass; $APOPString = md5($AuthString); $cmd = "APOP $login $APOPString"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 apop:") . ' ' . _("apop authentication failed") . ' - ' . _("abort"); $retVal = $this->login($login,$pass); return $retVal; } else { // Auth successful. $count = $this->last("count"); $this->COUNT = $count; return $count; } } } } function login ($login = "", $pass = "") { // Sends both user and pass. Returns # of msgs in mailbox or // false on failure (or -1, if the error occurs while getting // the number of messages.) if( !isset($this->FP) ) { $this->ERROR = _("POP3 login:") . ' ' . _("No connection to server"); return false; } else { $fp = $this->FP; if( !$this->user( $login ) ) { // Preserve the error generated by user() return false; } else { $count = $this->pass($pass); if( (!$count) || ($count == -1) ) { // Preserve the error generated by last() and pass() return false; } else return $count; } } } function top ($msgNum, $numLines = "0") { // Gets the header and first $numLines of the msg body // returns data in an array with each returned line being // an array element. If $numLines is empty, returns // only the header information, and none of the body. if(!isset($this->FP)) { $this->ERROR = _("POP3 top:") . ' ' . _("No connection to server"); return false; } $this->update_timer(); $fp = $this->FP; $buffer = $this->BUFFER; $cmd = "TOP $msgNum $numLines"; fwrite($fp, "TOP $msgNum $numLines\r\n"); $reply = fgets($fp, $buffer); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 top:") . ' ' . _("Error ") . "[$reply]"; return false; } $count = 0; $MsgArray = array(); $line = fgets($fp,$buffer); while ( !ereg("^\.\r\n",$line)) { $MsgArray[$count] = $line; $count++; $line = fgets($fp,$buffer); if(empty($line)) { break; } } return $MsgArray; } function pop_list ($msgNum = "") { // If called with an argument, returns that msgs' size in octets // No argument returns an associative array of undeleted // msg numbers and their sizes in octets if(!isset($this->FP)) { $this->ERROR = _("POP3 pop_list:") . ' ' . _("No connection to server"); return false; } $fp = $this->FP; $Total = $this->COUNT; if( (!$Total) or ($Total == -1) ) { return false; } if($Total == 0) { return array("0","0"); // return -1; // mailbox empty } $this->update_timer(); if(!empty($msgNum)) { $cmd = "LIST $msgNum"; fwrite($fp,"$cmd\r\n"); $reply = fgets($fp,$this->BUFFER); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 pop_list:") . ' ' . _("Error ") . "[$reply]"; return false; } list($junk,$num,$size) = preg_split('/\s+/',$reply); return $size; } $cmd = "LIST"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $reply = $this->strip_clf($reply); $this->ERROR = _("POP3 pop_list:") . ' ' . _("Error ") . "[$reply]"; return false; } $MsgArray = array(); $MsgArray[0] = $Total; for($msgC=1;$msgC <= $Total; $msgC++) { if($msgC > $Total) { break; } $line = fgets($fp,$this->BUFFER); $line = $this->strip_clf($line); if(ereg("^\.",$line)) { $this->ERROR = _("POP3 pop_list:") . ' ' . _("Premature end of list"); return false; } list($thisMsg,$msgSize) = preg_split('/\s+/',$line); settype($thisMsg,"integer"); if($thisMsg != $msgC) { $MsgArray[$msgC] = "deleted"; } else { $MsgArray[$msgC] = $msgSize; } } return $MsgArray; } function get ($msgNum) { // Retrieve the specified msg number. Returns an array // where each line of the msg is an array element. if(!isset($this->FP)) { $this->ERROR = _("POP3 get:") . ' ' . _("No connection to server"); return false; } $this->update_timer(); $fp = $this->FP; $buffer = $this->BUFFER; $cmd = "RETR $msgNum"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 get:") . ' ' . _("Error ") . "[$reply]"; return false; } $count = 0; $MsgArray = array(); $line = ""; while ( !ereg("^\.\r\n",$line)) { $line = fgets($fp,$buffer); if (preg_match("/^\s+/", $line) && $count > 0) { $MsgArray[$count-1] .= $line; continue; } if(empty($line)) { break; } $MsgArray[$count] = $line; $count++; } return $MsgArray; } function last ( $type = "count" ) { // Returns the highest msg number in the mailbox. // returns -1 on error, 0+ on success, if type != count // results in a popstat() call (2 element array returned) $last = -1; if(!isset($this->FP)) { $this->ERROR = _("POP3 last:") . ' ' . _("No connection to server"); return $last; } $reply = $this->send_cmd("STAT"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 last:") . ' ' . _("Error ") . "[$reply]"; return $last; } $Vars = preg_split('/\s+/',$reply); $count = $Vars[1]; $size = $Vars[2]; settype($count,"integer"); settype($size,"integer"); if($type != "count") { return array($count,$size); } return $count; } function reset () { // Resets the status of the remote server. This includes // resetting the status of ALL msgs to not be deleted. // This method automatically closes the connection to the server. if(!isset($this->FP)) { $this->ERROR = _("POP3 reset:") . ' ' . _("No connection to server"); return false; } $reply = $this->send_cmd("RSET"); if(!$this->is_ok($reply)) { // The POP3 RSET command -never- gives a -ERR // response - if it ever does, something truely // wild is going on. $this->ERROR = _("POP3 reset:") . ' ' . _("Error ") . "[$reply]"; @error_log("POP3 reset: ERROR [$reply]",0); } $this->quit(); return true; } function send_cmd ( $cmd = "" ) { // Sends a user defined command string to the // POP server and returns the results. Useful for // non-compliant or custom POP servers. // Do NOT includ the \r\n as part of your command // string - it will be appended automatically. // The return value is a standard fgets() call, which // will read up to $this->BUFFER bytes of data, until it // encounters a new line, or EOF, whichever happens first. // This method works best if $cmd responds with only // one line of data. if(!isset($this->FP)) { $this->ERROR = _("POP3 send_cmd:") . ' ' . _("No connection to server"); return false; } if(empty($cmd)) { $this->ERROR = _("POP3 send_cmd:") . ' ' . _("Empty command string"); return ""; } $fp = $this->FP; $buffer = $this->BUFFER; $this->update_timer(); fwrite($fp,"$cmd\r\n"); $reply = fgets($fp,$buffer); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } return $reply; } function quit() { // Closes the connection to the POP3 server, deleting // any msgs marked as deleted. if(!isset($this->FP)) { $this->ERROR = _("POP3 quit:") . ' ' . _("connection does not exist"); return false; } $fp = $this->FP; $cmd = "QUIT"; fwrite($fp,"$cmd\r\n"); $reply = fgets($fp,$this->BUFFER); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } fclose($fp); unset($this->FP); return true; } function popstat () { // Returns an array of 2 elements. The number of undeleted // msgs in the mailbox, and the size of the mbox in octets. $PopArray = $this->last("array"); if($PopArray == -1) { return false; } if( (!$PopArray) or (empty($PopArray)) ) { return false; } return $PopArray; } function uidl ($msgNum = "") { // Returns the UIDL of the msg specified. If called with // no arguments, returns an associative array where each // undeleted msg num is a key, and the msg's uidl is the element // Array element 0 will contain the total number of msgs if(!isset($this->FP)) { $this->ERROR = _("POP3 uidl:") . ' ' . _("No connection to server"); return false; } $fp = $this->FP; $buffer = $this->BUFFER; if(!empty($msgNum)) { $cmd = "UIDL $msgNum"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 uidl:") . ' ' . _("Error ") . "[$reply]"; return false; } list ($ok,$num,$myUidl) = preg_split('/\s+/',$reply); return $myUidl; } else { $this->update_timer(); $UIDLArray = array(); $Total = $this->COUNT; $UIDLArray[0] = $Total; if ($Total < 1) { return $UIDLArray; } $cmd = "UIDL"; fwrite($fp, "UIDL\r\n"); $reply = fgets($fp, $buffer); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 uidl:") . ' ' . _("Error ") . "[$reply]"; return false; } $line = ""; $count = 1; $line = fgets($fp,$buffer); while ( !ereg("^\.\r\n",$line)) { if(ereg("^\.\r\n",$line)) { break; } list ($msg,$msgUidl) = preg_split('/\s+/',$line); $msgUidl = $this->strip_clf($msgUidl); if($count == $msg) { $UIDLArray[$msg] = $msgUidl; } else { $UIDLArray[$count] = 'deleted'; } $count++; $line = fgets($fp,$buffer); } } return $UIDLArray; } function delete ($msgNum = "") { // Flags a specified msg as deleted. The msg will not // be deleted until a quit() method is called. if(!isset($this->FP)) { $this->ERROR = _("POP3 delete:") . ' ' . _("No connection to server"); return false; } if(empty($msgNum)) { $this->ERROR = _("POP3 delete:") . ' ' . _("No msg number submitted"); return false; } $reply = $this->send_cmd("DELE $msgNum"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 delete:") . ' ' . _("Command failed ") . "[$reply]"; return false; } return true; } // ********************************************************* // The following methods are internal to the class. function is_ok ($cmd = "") { // Return true or false on +OK or -ERR if( empty($cmd) ) return false; else return( ereg ("^\+OK", $cmd ) ); } function strip_clf ($text = "") { // Strips \r\n from server responses if(empty($text)) return $text; else { $stripped = str_replace("\r",'',$text); $stripped = str_replace("\n",'',$stripped); return $stripped; } } function parse_banner ( $server_text ) { $outside = true; $banner = ""; $length = strlen($server_text); for($count =0; $count < $length; $count++) { $digit = substr($server_text, $count, 1); if (!empty($digit)) { if( (!$outside) && ($digit != '<') && ($digit != '>') ) { $banner .= $digit; } if ($digit == '<') { $outside = false; } if($digit == '>') { $outside = true; } } } $banner = $this->strip_clf($banner); // Just in case return "<$banner>"; } } // End class ?> $wordpress/wp-includes/class-smtp.phpsmtp_conn = 0; $this->error = null; $this->helo_rply = null; $this->do_debug = 0; } /************************************************************* * CONNECTION FUNCTIONS * ***********************************************************/ /** * Connect to the server specified on the port specified. * If the port is not specified use the default SMTP_PORT. * If tval is specified then a connection will try and be * established with the server for that number of seconds. * If tval is not specified the default is 30 seconds to * try on the connection. * * SMTP CODE SUCCESS: 220 * SMTP CODE FAILURE: 421 * @access public * @return bool */ function Connect($host,$port=0,$tval=30) { # set the error val to null so there is no confusion $this->error = null; # make sure we are __not__ connected if($this->connected()) { # ok we are connected! what should we do? # for now we will just give an error saying we # are already connected $this->error = array("error" => "Already connected to a server"); return false; } if(empty($port)) { $port = $this->SMTP_PORT; } #connect to the smtp server $this->smtp_conn = fsockopen($host, # the host of the server $port, # the port to use $errno, # error number if any $errstr, # error message if any $tval); # give up after ? secs # verify we connected properly if(empty($this->smtp_conn)) { $this->error = array("error" => "Failed to connect to server", "errno" => $errno, "errstr" => $errstr); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF; } return false; } # sometimes the SMTP server takes a little longer to respond # so we will give it a longer timeout for the first read // Windows still does not have support for this timeout function if(substr(PHP_OS, 0, 3) != "WIN") socket_set_timeout($this->smtp_conn, $tval, 0); # get any announcement stuff $announce = $this->get_lines(); # set the timeout of any socket functions at 1/10 of a second //if(function_exists("socket_set_timeout")) // socket_set_timeout($this->smtp_conn, 0, 100000); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce; } return true; } /** * Performs SMTP authentication. Must be run after running the * Hello() method. Returns true if successfully authenticated. * @access public * @return bool */ function Authenticate($username, $password) { // Start authentication fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($code != 334) { $this->error = array("error" => "AUTH not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } // Send encoded username fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($code != 334) { $this->error = array("error" => "Username not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } // Send encoded password fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($code != 235) { $this->error = array("error" => "Password not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Returns true if connected to a server otherwise false * @access private * @return bool */ function Connected() { if(!empty($this->smtp_conn)) { $sock_status = socket_get_status($this->smtp_conn); if($sock_status["eof"]) { # hmm this is an odd situation... the socket is # valid but we aren't connected anymore if($this->do_debug >= 1) { echo "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected"; } $this->Close(); return false; } return true; # everything looks good } return false; } /** * Closes the socket and cleans up the state of the class. * It is not considered good to use this function without * first trying to use QUIT. * @access public * @return void */ function Close() { $this->error = null; # so there is no confusion $this->helo_rply = null; if(!empty($this->smtp_conn)) { # close the connection and cleanup fclose($this->smtp_conn); $this->smtp_conn = 0; } } /*************************************************************** * SMTP COMMANDS * *************************************************************/ /** * Issues a data command and sends the msg_data to the server * finializing the mail transaction. $msg_data is the message * that is to be send with the headers. Each header needs to be * on a single line followed by a with the message headers * and the message body being seperated by and additional . * * Implements rfc 821: DATA * * SMTP CODE INTERMEDIATE: 354 * [data] * . * SMTP CODE SUCCESS: 250 * SMTP CODE FAILURE: 552,554,451,452 * SMTP CODE FAILURE: 451,554 * SMTP CODE ERROR : 500,501,503,421 * @access public * @return bool */ function Data($msg_data) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Data() without being connected"); return false; } fputs($this->smtp_conn,"DATA" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 354) { $this->error = array("error" => "DATA command not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } # the server is ready to accept data! # according to rfc 821 we should not send more than 1000 # including the CRLF # characters on a single line so we will break the data up # into lines by \r and/or \n then if needed we will break # each of those into smaller lines to fit within the limit. # in addition we will be looking for lines that start with # a period '.' and append and additional period '.' to that # line. NOTE: this does not count towards are limit. # normalize the line breaks so we know the explode works $msg_data = str_replace("\r\n","\n",$msg_data); $msg_data = str_replace("\r","\n",$msg_data); $lines = explode("\n",$msg_data); # we need to find a good way to determine is headers are # in the msg_data or if it is a straight msg body # currently I'm assuming rfc 822 definitions of msg headers # and if the first field of the first line (':' sperated) # does not contain a space then it _should_ be a header # and we can process all lines before a blank "" line as # headers. $field = substr($lines[0],0,strpos($lines[0],":")); $in_headers = false; if(!empty($field) && !strstr($field," ")) { $in_headers = true; } $max_line_length = 998; # used below; set here for ease in change while(list(,$line) = @each($lines)) { $lines_out = null; if($line == "" && $in_headers) { $in_headers = false; } # ok we need to break this line up into several # smaller lines while(strlen($line) > $max_line_length) { $pos = strrpos(substr($line,0,$max_line_length)," "); # Patch to fix DOS attack if(!$pos) { $pos = $max_line_length - 1; } $lines_out[] = substr($line,0,$pos); $line = substr($line,$pos + 1); # if we are processing headers we need to # add a LWSP-char to the front of the new line # rfc 822 on long msg headers if($in_headers) { $line = "\t" . $line; } } $lines_out[] = $line; # now send the lines to the server while(list(,$line_out) = @each($lines_out)) { if(strlen($line_out) > 0) { if(substr($line_out, 0, 1) == ".") { $line_out = "." . $line_out; } } fputs($this->smtp_conn,$line_out . $this->CRLF); } } # ok all the message data has been sent so lets get this # over with aleady fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "DATA not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Expand takes the name and asks the server to list all the * people who are members of the _list_. Expand will return * back and array of the result or false if an error occurs. * Each value in the array returned has the format of: * [ ] * The definition of is defined in rfc 821 * * Implements rfc 821: EXPN * * SMTP CODE SUCCESS: 250 * SMTP CODE FAILURE: 550 * SMTP CODE ERROR : 500,501,502,504,421 * @access public * @return string array */ function Expand($name) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Expand() without being connected"); return false; } fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "EXPN not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } # parse the reply and place in our array to return to user $entries = explode($this->CRLF,$rply); while(list(,$l) = @each($entries)) { $list[] = substr($l,4); } return $list; } /** * Sends the HELO command to the smtp server. * This makes sure that we and the server are in * the same known state. * * Implements from rfc 821: HELO * * SMTP CODE SUCCESS: 250 * SMTP CODE ERROR : 500, 501, 504, 421 * @access public * @return bool */ function Hello($host="") { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Hello() without being connected"); return false; } # if a hostname for the HELO wasn't specified determine # a suitable one to send if(empty($host)) { # we need to determine some sort of appopiate default # to send to the server $host = "localhost"; } // Send extended hello first (RFC 2821) if(!$this->SendHello("EHLO", $host)) { if(!$this->SendHello("HELO", $host)) return false; } return true; } /** * Sends a HELO/EHLO command. * @access private * @return bool */ function SendHello($hello, $host) { fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => $hello . " not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } $this->helo_rply = $rply; return true; } /** * Gets help information on the keyword specified. If the keyword * is not specified then returns generic help, ussually contianing * A list of keywords that help is available on. This function * returns the results back to the user. It is up to the user to * handle the returned data. If an error occurs then false is * returned with $this->error set appropiately. * * Implements rfc 821: HELP [ ] * * SMTP CODE SUCCESS: 211,214 * SMTP CODE ERROR : 500,501,502,504,421 * @access public * @return string */ function Help($keyword="") { $this->error = null; # to avoid confusion if(!$this->connected()) { $this->error = array( "error" => "Called Help() without being connected"); return false; } $extra = ""; if(!empty($keyword)) { $extra = " " . $keyword; } fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 211 && $code != 214) { $this->error = array("error" => "HELP not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return $rply; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. * * Implements rfc 821: MAIL FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,421 * @access public * @return bool */ function Mail($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Mail() without being connected"); return false; } fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "MAIL not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Sends the command NOOP to the SMTP server. * * Implements from rfc 821: NOOP * * SMTP CODE SUCCESS: 250 * SMTP CODE ERROR : 500, 421 * @access public * @return bool */ function Noop() { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Noop() without being connected"); return false; } fputs($this->smtp_conn,"NOOP" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "NOOP not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Sends the quit command to the server and then closes the socket * if there is no error or the $close_on_error argument is true. * * Implements from rfc 821: QUIT * * SMTP CODE SUCCESS: 221 * SMTP CODE ERROR : 500 * @access public * @return bool */ function Quit($close_on_error=true) { $this->error = null; # so there is no confusion if(!$this->connected()) { $this->error = array( "error" => "Called Quit() without being connected"); return false; } # send the quit command to the server fputs($this->smtp_conn,"quit" . $this->CRLF); # get any good-bye messages $byemsg = $this->get_lines(); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg; } $rval = true; $e = null; $code = substr($byemsg,0,3); if($code != 221) { # use e as a tmp var cause Close will overwrite $this->error $e = array("error" => "SMTP server rejected quit command", "smtp_code" => $code, "smtp_rply" => substr($byemsg,4)); $rval = false; if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF; } } if(empty($e) || $close_on_error) { $this->Close(); } return $rval; } /** * Sends the command RCPT to the SMTP server with the TO: argument of $to. * Returns true if the recipient was accepted false if it was rejected. * * Implements from rfc 821: RCPT TO: * * SMTP CODE SUCCESS: 250,251 * SMTP CODE FAILURE: 550,551,552,553,450,451,452 * SMTP CODE ERROR : 500,501,503,421 * @access public * @return bool */ function Recipient($to) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Recipient() without being connected"); return false; } fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250 && $code != 251) { $this->error = array("error" => "RCPT not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Sends the RSET command to abort and transaction that is * currently in progress. Returns true if successful false * otherwise. * * Implements rfc 821: RSET * * SMTP CODE SUCCESS: 250 * SMTP CODE ERROR : 500,501,504,421 * @access public * @return bool */ function Reset() { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Reset() without being connected"); return false; } fputs($this->smtp_conn,"RSET" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "RSET failed", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. This command * will send the message to the users terminal if they are logged * in. * * Implements rfc 821: SEND FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,502,421 * @access public * @return bool */ function Send($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Send() without being connected"); return false; } fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "SEND not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. This command * will send the message to the users terminal if they are logged * in and send them an email. * * Implements rfc 821: SAML FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,502,421 * @access public * @return bool */ function SendAndMail($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called SendAndMail() without being connected"); return false; } fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "SAML not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. This command * will send the message to the users terminal if they are logged * in or mail it to them if they are not. * * Implements rfc 821: SOML FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,502,421 * @access public * @return bool */ function SendOrMail($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called SendOrMail() without being connected"); return false; } fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "SOML not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * This is an optional command for SMTP that this class does not * support. This method is here to make the RFC821 Definition * complete for this class and __may__ be implimented in the future * * Implements from rfc 821: TURN * * SMTP CODE SUCCESS: 250 * SMTP CODE FAILURE: 502 * SMTP CODE ERROR : 500, 503 * @access public * @return bool */ function Turn() { $this->error = array("error" => "This method, TURN, of the SMTP ". "is not implemented"); if($this->do_debug >= 1) { echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF; } return false; } /** * Verifies that the name is recognized by the server. * Returns false if the name could not be verified otherwise * the response from the server is returned. * * Implements rfc 821: VRFY * * SMTP CODE SUCCESS: 250,251 * SMTP CODE FAILURE: 550,551,553 * SMTP CODE ERROR : 500,501,502,421 * @access public * @return int */ function Verify($name) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Verify() without being connected"); return false; } fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250 && $code != 251) { $this->error = array("error" => "VRFY failed on name '$name'", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return $rply; } /******************************************************************* * INTERNAL FUNCTIONS * ******************************************************************/ /** * Read in as many lines as possible * either before eof or socket timeout occurs on the operation. * With SMTP we can tell if we have more lines to read if the * 4th character is '-' symbol. If it is a space then we don't * need to read anything else. * @access private * @return string */ function get_lines() { $data = ""; while($str = fgets($this->smtp_conn,515)) { if($this->do_debug >= 4) { echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF; echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF; } $data .= $str; if($this->do_debug >= 4) { echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF; } # if the 4th character is a space then we are done reading # so just break the loop if(substr($str,3,1) == " ") { break; } } return $data; } } ?> &wordpress/wp-includes/class-snoopy.php3 Copyright (c): 1999-2000 ispi, all rights reserved Version: 1.01 * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA You may contact the author of Snoopy by e-mail at: monte@ispi.net Or, write to: Monte Ohrt CTO, ispi 237 S. 70th suite 220 Lincoln, NE 68510 The latest version of Snoopy can be obtained from: http://snoopy.sourceforge.net/ *************************************************/ if ( !in_array('Snoopy', get_declared_classes() ) ) : class Snoopy { /**** Public variables ****/ /* user definable vars */ var $host = "www.php.net"; // host name we are connecting to var $port = 80; // port we are connecting to var $proxy_host = ""; // proxy host to use var $proxy_port = ""; // proxy port to use var $proxy_user = ""; // proxy user to use var $proxy_pass = ""; // proxy password to use var $agent = "Snoopy v1.2.3"; // agent we masquerade as var $referer = ""; // referer info to pass var $cookies = array(); // array of cookies to pass // $cookies["username"]="joe"; var $rawheaders = array(); // array of raw headers to send // $rawheaders["Content-type"]="text/html"; var $maxredirs = 5; // http redirection depth maximum. 0 = disallow var $lastredirectaddr = ""; // contains address of last redirected address var $offsiteok = true; // allows redirection off-site var $maxframes = 0; // frame content depth maximum. 0 = disallow var $expandlinks = true; // expand links to fully qualified URLs. // this only applies to fetchlinks() // submitlinks(), and submittext() var $passcookies = true; // pass set cookies back through redirects // NOTE: this currently does not respect // dates, domains or paths. var $user = ""; // user for http authentication var $pass = ""; // password for http authentication // http accept types var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; var $results = ""; // where the content is put var $error = ""; // error messages sent here var $response_code = ""; // response code returned from server var $headers = array(); // headers returned from server sent here var $maxlength = 8192; // max return data length (body) var $read_timeout = 0; // timeout on read operations, in seconds // supported only since PHP 4 Beta 4 // set to 0 to disallow timeouts var $timed_out = false; // if a read operation timed out var $status = 0; // http request status var $temp_dir = "/tmp"; // temporary directory that the webserver // has permission to write to. // under Windows, this should be C:\temp var $curl_path = "/usr/local/bin/curl"; // Snoopy will use cURL for fetching // SSL content if a full system path to // the cURL binary is supplied here. // set to false if you do not have // cURL installed. See http://curl.haxx.se // for details on installing cURL. // Snoopy does *not* use the cURL // library functions built into php, // as these functions are not stable // as of this Snoopy release. /**** Private variables ****/ var $_maxlinelen = 4096; // max line length (headers) var $_httpmethod = "GET"; // default http request method var $_httpversion = "HTTP/1.0"; // default http request version var $_submit_method = "POST"; // default submit method var $_submit_type = "application/x-www-form-urlencoded"; // default submit type var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type var $_redirectaddr = false; // will be set if page fetched is a redirect var $_redirectdepth = 0; // increments on an http redirect var $_frameurls = array(); // frame src urls var $_framedepth = 0; // increments on frame depth var $_isproxy = false; // set if using a proxy server var $_fp_timeout = 30; // timeout for socket connection /*======================================================================*\ Function: fetch Purpose: fetch the contents of a web page (and possibly other protocols in the future like ftp, nntp, gopher, etc.) Input: $URI the location of the page to fetch Output: $this->results the output text from the fetch \*======================================================================*/ function fetch($URI) { //preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS); $URI_PARTS = parse_url($URI); if (!empty($URI_PARTS["user"])) $this->user = $URI_PARTS["user"]; if (!empty($URI_PARTS["pass"])) $this->pass = $URI_PARTS["pass"]; if (empty($URI_PARTS["query"])) $URI_PARTS["query"] = ''; if (empty($URI_PARTS["path"])) $URI_PARTS["path"] = ''; switch(strtolower($URI_PARTS["scheme"])) { case "http": $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_connect($fp)) { if($this->_isproxy) { // using proxy, send entire URI $this->_httprequest($URI,$fp,$URI,$this->_httpmethod); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httprequest($path, $fp, $URI, $this->_httpmethod); } $this->_disconnect($fp); if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; $this->fetch($this->_redirectaddr); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } } else { return false; } return true; break; case "https": if(!$this->curl_path) return false; if(function_exists("is_executable")) if (!is_executable($this->curl_path)) return false; $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_isproxy) { // using proxy, send entire URI $this->_httpsrequest($URI,$URI,$this->_httpmethod); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httpsrequest($path, $URI, $this->_httpmethod); } if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; $this->fetch($this->_redirectaddr); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } return true; break; default: // not a valid protocol $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; return false; break; } return true; } /*======================================================================*\ Function: submit Purpose: submit an http form Input: $URI the location to post the data $formvars the formvars to use. format: $formvars["var"] = "val"; $formfiles an array of files to submit format: $formfiles["var"] = "/dir/filename.ext"; Output: $this->results the text output from the post \*======================================================================*/ function submit($URI, $formvars="", $formfiles="") { unset($postdata); $postdata = $this->_prepare_post_body($formvars, $formfiles); $URI_PARTS = parse_url($URI); if (!empty($URI_PARTS["user"])) $this->user = $URI_PARTS["user"]; if (!empty($URI_PARTS["pass"])) $this->pass = $URI_PARTS["pass"]; if (empty($URI_PARTS["query"])) $URI_PARTS["query"] = ''; if (empty($URI_PARTS["path"])) $URI_PARTS["path"] = ''; switch(strtolower($URI_PARTS["scheme"])) { case "http": $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_connect($fp)) { if($this->_isproxy) { // using proxy, send entire URI $this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); } $this->_disconnect($fp); if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; if( strpos( $this->_redirectaddr, "?" ) > 0 ) $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get else $this->submit($this->_redirectaddr,$formvars, $formfiles); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } } else { return false; } return true; break; case "https": if(!$this->curl_path) return false; if(function_exists("is_executable")) if (!is_executable($this->curl_path)) return false; $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_isproxy) { // using proxy, send entire URI $this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata); } if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; if( strpos( $this->_redirectaddr, "?" ) > 0 ) $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get else $this->submit($this->_redirectaddr,$formvars, $formfiles); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } return true; break; default: // not a valid protocol $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; return false; break; } return true; } /*======================================================================*\ Function: fetchlinks Purpose: fetch the links from a web page Input: $URI where you are fetching from Output: $this->results an array of the URLs \*======================================================================*/ function fetchlinks($URI) { if ($this->fetch($URI)) { if($this->lastredirectaddr) $URI = $this->lastredirectaddr; if(is_array($this->results)) { for($x=0;$xresults);$x++) $this->results[$x] = $this->_striplinks($this->results[$x]); } else $this->results = $this->_striplinks($this->results); if($this->expandlinks) $this->results = $this->_expandlinks($this->results, $URI); return true; } else return false; } /*======================================================================*\ Function: fetchform Purpose: fetch the form elements from a web page Input: $URI where you are fetching from Output: $this->results the resulting html form \*======================================================================*/ function fetchform($URI) { if ($this->fetch($URI)) { if(is_array($this->results)) { for($x=0;$xresults);$x++) $this->results[$x] = $this->_stripform($this->results[$x]); } else $this->results = $this->_stripform($this->results); return true; } else return false; } /*======================================================================*\ Function: fetchtext Purpose: fetch the text from a web page, stripping the links Input: $URI where you are fetching from Output: $this->results the text from the web page \*======================================================================*/ function fetchtext($URI) { if($this->fetch($URI)) { if(is_array($this->results)) { for($x=0;$xresults);$x++) $this->results[$x] = $this->_striptext($this->results[$x]); } else $this->results = $this->_striptext($this->results); return true; } else return false; } /*======================================================================*\ Function: submitlinks Purpose: grab links from a form submission Input: $URI where you are submitting from Output: $this->results an array of the links from the post \*======================================================================*/ function submitlinks($URI, $formvars="", $formfiles="") { if($this->submit($URI,$formvars, $formfiles)) { if($this->lastredirectaddr) $URI = $this->lastredirectaddr; if(is_array($this->results)) { for($x=0;$xresults);$x++) { $this->results[$x] = $this->_striplinks($this->results[$x]); if($this->expandlinks) $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); } } else { $this->results = $this->_striplinks($this->results); if($this->expandlinks) $this->results = $this->_expandlinks($this->results,$URI); } return true; } else return false; } /*======================================================================*\ Function: submittext Purpose: grab text from a form submission Input: $URI where you are submitting from Output: $this->results the text from the web page \*======================================================================*/ function submittext($URI, $formvars = "", $formfiles = "") { if($this->submit($URI,$formvars, $formfiles)) { if($this->lastredirectaddr) $URI = $this->lastredirectaddr; if(is_array($this->results)) { for($x=0;$xresults);$x++) { $this->results[$x] = $this->_striptext($this->results[$x]); if($this->expandlinks) $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); } } else { $this->results = $this->_striptext($this->results); if($this->expandlinks) $this->results = $this->_expandlinks($this->results,$URI); } return true; } else return false; } /*======================================================================*\ Function: set_submit_multipart Purpose: Set the form submission content type to multipart/form-data \*======================================================================*/ function set_submit_multipart() { $this->_submit_type = "multipart/form-data"; } /*======================================================================*\ Function: set_submit_normal Purpose: Set the form submission content type to application/x-www-form-urlencoded \*======================================================================*/ function set_submit_normal() { $this->_submit_type = "application/x-www-form-urlencoded"; } /*======================================================================*\ Private functions \*======================================================================*/ /*======================================================================*\ Function: _striplinks Purpose: strip the hyperlinks from an html document Input: $document document to strip. Output: $match an array of the links \*======================================================================*/ function _striplinks($document) { preg_match_all("'<\s*a\s.*?href\s*=\s* # find ]+)) # if quote found, match up to next matching # quote, otherwise match up to next space 'isx",$document,$links); // catenate the non-empty matches from the conditional subpattern while(list($key,$val) = each($links[2])) { if(!empty($val)) $match[] = $val; } while(list($key,$val) = each($links[3])) { if(!empty($val)) $match[] = $val; } // return the links return $match; } /*======================================================================*\ Function: _stripform Purpose: strip the form elements from an html document Input: $document document to strip. Output: $match an array of the links \*======================================================================*/ function _stripform($document) { preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements); // catenate the matches $match = implode("\r\n",$elements[0]); // return the links return $match; } /*======================================================================*\ Function: _striptext Purpose: strip the text from an html document Input: $document document to strip. Output: $text the resulting text \*======================================================================*/ function _striptext($document) { // I didn't use preg eval (//e) since that is only available in PHP 4.0. // so, list your entities one by one here. I included some of the // more common ones. $search = array("']*?>.*?'si", // strip out javascript "'<[\/\!]*?[^<>]*?>'si", // strip out html tags "'([\r\n])[\s]+'", // strip out white space "'&(quot|#34|#034|#x22);'i", // replace html entities "'&(amp|#38|#038|#x26);'i", // added hexadecimal values "'&(lt|#60|#060|#x3c);'i", "'&(gt|#62|#062|#x3e);'i", "'&(nbsp|#160|#xa0);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&(reg|#174);'i", "'&(deg|#176);'i", "'&(#39|#039|#x27);'", "'&(euro|#8364);'i", // europe "'&a(uml|UML);'", // german "'&o(uml|UML);'", "'&u(uml|UML);'", "'&A(uml|UML);'", "'&O(uml|UML);'", "'&U(uml|UML);'", "'ß'i", ); $replace = array( "", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), chr(174), chr(176), chr(39), chr(128), "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß", ); $text = preg_replace($search,$replace,$document); return $text; } /*======================================================================*\ Function: _expandlinks Purpose: expand each link into a fully qualified URL Input: $links the links to qualify $URI the full URI to get the base from Output: $expandedLinks the expanded links \*======================================================================*/ function _expandlinks($links,$URI) { preg_match("/^[^\?]+/",$URI,$match); $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]); $match = preg_replace("|/$|","",$match); $match_part = parse_url($match); $match_root = $match_part["scheme"]."://".$match_part["host"]; $search = array( "|^http://".preg_quote($this->host)."|i", "|^(\/)|i", "|^(?!http://)(?!mailto:)|i", "|/\./|", "|/[^\/]+/\.\./|" ); $replace = array( "", $match_root."/", $match."/", "/", "/" ); $expandedLinks = preg_replace($search,$replace,$links); return $expandedLinks; } /*======================================================================*\ Function: _httprequest Purpose: go get the http data from the server Input: $url the url to fetch $fp the current open file pointer $URI the full URI $body body contents to send if any (POST) Output: \*======================================================================*/ function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="") { $cookie_headers = ''; if($this->passcookies && $this->_redirectaddr) $this->setcookies(); $URI_PARTS = parse_url($URI); if(empty($url)) $url = "/"; $headers = $http_method." ".$url." ".$this->_httpversion."\r\n"; if(!empty($this->agent)) $headers .= "User-Agent: ".$this->agent."\r\n"; if(!empty($this->host) && !isset($this->rawheaders['Host'])) { $headers .= "Host: ".$this->host; if(!empty($this->port)) $headers .= ":".$this->port; $headers .= "\r\n"; } if(!empty($this->accept)) $headers .= "Accept: ".$this->accept."\r\n"; if(!empty($this->referer)) $headers .= "Referer: ".$this->referer."\r\n"; if(!empty($this->cookies)) { if(!is_array($this->cookies)) $this->cookies = (array)$this->cookies; reset($this->cookies); if ( count($this->cookies) > 0 ) { $cookie_headers .= 'Cookie: '; foreach ( $this->cookies as $cookieKey => $cookieVal ) { $cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; "; } $headers .= substr($cookie_headers,0,-2) . "\r\n"; } } if(!empty($this->rawheaders)) { if(!is_array($this->rawheaders)) $this->rawheaders = (array)$this->rawheaders; while(list($headerKey,$headerVal) = each($this->rawheaders)) $headers .= $headerKey.": ".$headerVal."\r\n"; } if(!empty($content_type)) { $headers .= "Content-type: $content_type"; if ($content_type == "multipart/form-data") $headers .= "; boundary=".$this->_mime_boundary; $headers .= "\r\n"; } if(!empty($body)) $headers .= "Content-length: ".strlen($body)."\r\n"; if(!empty($this->user) || !empty($this->pass)) $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n"; //add proxy auth headers if(!empty($this->proxy_user)) $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n"; $headers .= "\r\n"; // set the read timeout if needed if ($this->read_timeout > 0) socket_set_timeout($fp, $this->read_timeout); $this->timed_out = false; fwrite($fp,$headers.$body,strlen($headers.$body)); $this->_redirectaddr = false; unset($this->headers); while($currentHeader = fgets($fp,$this->_maxlinelen)) { if ($this->read_timeout > 0 && $this->_check_timeout($fp)) { $this->status=-100; return false; } if($currentHeader == "\r\n") break; // if a header begins with Location: or URI:, set the redirect if(preg_match("/^(Location:|URI:)/i",$currentHeader)) { // get URL portion of the redirect preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches); // look for :// in the Location header to see if hostname is included if(!preg_match("|\:\/\/|",$matches[2])) { // no host in the path, so prepend $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; // eliminate double slash if(!preg_match("|^/|",$matches[2])) $this->_redirectaddr .= "/".$matches[2]; else $this->_redirectaddr .= $matches[2]; } else $this->_redirectaddr = $matches[2]; } if(preg_match("|^HTTP/|",$currentHeader)) { if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status)) { $this->status= $status[1]; } $this->response_code = $currentHeader; } $this->headers[] = $currentHeader; } $results = ''; do { $_data = fread($fp, $this->maxlength); if (strlen($_data) == 0) { break; } $results .= $_data; } while(true); if ($this->read_timeout > 0 && $this->_check_timeout($fp)) { $this->status=-100; return false; } // check if there is a a redirect meta tag if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) { $this->_redirectaddr = $this->_expandlinks($match[1],$URI); } // have we hit our frame depth and is there frame src to fetch? if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) { $this->results[] = $results; for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); } // have we already fetched framed content? elseif(is_array($this->results)) $this->results[] = $results; // no framed content else $this->results = $results; return true; } /*======================================================================*\ Function: _httpsrequest Purpose: go get the https data from the server using curl Input: $url the url to fetch $URI the full URI $body body contents to send if any (POST) Output: \*======================================================================*/ function _httpsrequest($url,$URI,$http_method,$content_type="",$body="") { if($this->passcookies && $this->_redirectaddr) $this->setcookies(); $headers = array(); $URI_PARTS = parse_url($URI); if(empty($url)) $url = "/"; // GET ... header not needed for curl //$headers[] = $http_method." ".$url." ".$this->_httpversion; if(!empty($this->agent)) $headers[] = "User-Agent: ".$this->agent; if(!empty($this->host)) if(!empty($this->port)) $headers[] = "Host: ".$this->host.":".$this->port; else $headers[] = "Host: ".$this->host; if(!empty($this->accept)) $headers[] = "Accept: ".$this->accept; if(!empty($this->referer)) $headers[] = "Referer: ".$this->referer; if(!empty($this->cookies)) { if(!is_array($this->cookies)) $this->cookies = (array)$this->cookies; reset($this->cookies); if ( count($this->cookies) > 0 ) { $cookie_str = 'Cookie: '; foreach ( $this->cookies as $cookieKey => $cookieVal ) { $cookie_str .= $cookieKey."=".urlencode($cookieVal)."; "; } $headers[] = substr($cookie_str,0,-2); } } if(!empty($this->rawheaders)) { if(!is_array($this->rawheaders)) $this->rawheaders = (array)$this->rawheaders; while(list($headerKey,$headerVal) = each($this->rawheaders)) $headers[] = $headerKey.": ".$headerVal; } if(!empty($content_type)) { if ($content_type == "multipart/form-data") $headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary; else $headers[] = "Content-type: $content_type"; } if(!empty($body)) $headers[] = "Content-length: ".strlen($body); if(!empty($this->user) || !empty($this->pass)) $headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass); for($curr_header = 0; $curr_header < count($headers); $curr_header++) { $safer_header = strtr( $headers[$curr_header], "\"", " " ); $cmdline_params .= " -H \"".$safer_header."\""; } if(!empty($body)) $cmdline_params .= " -d \"$body\""; if($this->read_timeout > 0) $cmdline_params .= " -m ".$this->read_timeout; $headerfile = tempnam($temp_dir, "sno"); $safer_URI = strtr( $URI, "\"", " " ); // strip quotes from the URI to avoid shell access exec(escapeshellcmd($this->curl_path." -D \"$headerfile\"".$cmdline_params." \"".$safer_URI."\""),$results,$return); if($return) { $this->error = "Error: cURL could not retrieve the document, error $return."; return false; } $results = implode("\r\n",$results); $result_headers = file("$headerfile"); $this->_redirectaddr = false; unset($this->headers); for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) { // if a header begins with Location: or URI:, set the redirect if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader])) { // get URL portion of the redirect preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches); // look for :// in the Location header to see if hostname is included if(!preg_match("|\:\/\/|",$matches[2])) { // no host in the path, so prepend $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; // eliminate double slash if(!preg_match("|^/|",$matches[2])) $this->_redirectaddr .= "/".$matches[2]; else $this->_redirectaddr .= $matches[2]; } else $this->_redirectaddr = $matches[2]; } if(preg_match("|^HTTP/|",$result_headers[$currentHeader])) $this->response_code = $result_headers[$currentHeader]; $this->headers[] = $result_headers[$currentHeader]; } // check if there is a a redirect meta tag if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) { $this->_redirectaddr = $this->_expandlinks($match[1],$URI); } // have we hit our frame depth and is there frame src to fetch? if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) { $this->results[] = $results; for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); } // have we already fetched framed content? elseif(is_array($this->results)) $this->results[] = $results; // no framed content else $this->results = $results; unlink("$headerfile"); return true; } /*======================================================================*\ Function: setcookies() Purpose: set cookies for a redirection \*======================================================================*/ function setcookies() { for($x=0; $xheaders); $x++) { if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match)) $this->cookies[$match[1]] = urldecode($match[2]); } } /*======================================================================*\ Function: _check_timeout Purpose: checks whether timeout has occurred Input: $fp file pointer \*======================================================================*/ function _check_timeout($fp) { if ($this->read_timeout > 0) { $fp_status = socket_get_status($fp); if ($fp_status["timed_out"]) { $this->timed_out = true; return true; } } return false; } /*======================================================================*\ Function: _connect Purpose: make a socket connection Input: $fp file pointer \*======================================================================*/ function _connect(&$fp) { if(!empty($this->proxy_host) && !empty($this->proxy_port)) { $this->_isproxy = true; $host = $this->proxy_host; $port = $this->proxy_port; } else { $host = $this->host; $port = $this->port; } $this->status = 0; if($fp = fsockopen( $host, $port, $errno, $errstr, $this->_fp_timeout )) { // socket connection succeeded return true; } else { // socket connection failed $this->status = $errno; switch($errno) { case -3: $this->error="socket creation failed (-3)"; case -4: $this->error="dns lookup failure (-4)"; case -5: $this->error="connection refused or timed out (-5)"; default: $this->error="connection failed (".$errno.")"; } return false; } } /*======================================================================*\ Function: _disconnect Purpose: disconnect a socket connection Input: $fp file pointer \*======================================================================*/ function _disconnect($fp) { return(fclose($fp)); } /*======================================================================*\ Function: _prepare_post_body Purpose: Prepare post body according to encoding type Input: $formvars - form variables $formfiles - form upload files Output: post body \*======================================================================*/ function _prepare_post_body($formvars, $formfiles) { settype($formvars, "array"); settype($formfiles, "array"); $postdata = ''; if (count($formvars) == 0 && count($formfiles) == 0) return; switch ($this->_submit_type) { case "application/x-www-form-urlencoded": reset($formvars); while(list($key,$val) = each($formvars)) { if (is_array($val) || is_object($val)) { while (list($cur_key, $cur_val) = each($val)) { $postdata .= urlencode($key)."[]=".urlencode($cur_val)."&"; } } else $postdata .= urlencode($key)."=".urlencode($val)."&"; } break; case "multipart/form-data": $this->_mime_boundary = "Snoopy".md5(uniqid(microtime())); reset($formvars); while(list($key,$val) = each($formvars)) { if (is_array($val) || is_object($val)) { while (list($cur_key, $cur_val) = each($val)) { $postdata .= "--".$this->_mime_boundary."\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; $postdata .= "$cur_val\r\n"; } } else { $postdata .= "--".$this->_mime_boundary."\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; $postdata .= "$val\r\n"; } } reset($formfiles); while (list($field_name, $file_names) = each($formfiles)) { settype($file_names, "array"); while (list(, $file_name) = each($file_names)) { if (!is_readable($file_name)) continue; $fp = fopen($file_name, "r"); while (!feof($fp)) { $file_content .= fread($fp, filesize($file_name)); } fclose($fp); $base_name = basename($file_name); $postdata .= "--".$this->_mime_boundary."\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n"; $postdata .= "$file_content\r\n"; } } $postdata .= "--".$this->_mime_boundary."--\r\n"; break; } return $postdata; } } endif; ?> !wordpress/wp-includes/comment.phpget_results("SELECT COUNT(*) as CNT, MIN(NM_NUM_GROUP) as MING, MAX(NM_NUM_GROUP) as MAXG FROM DB.DBA.NEWS_MULTI_MSG WHERE NM_GROUP = " . $grp); $all_mess = $row[0]->CNT; $min_num = $row[0]->MING; $max_num = $row[0]->MAXG; $last_num = $wpdb->get_var("SELECT NG_NEXT_NUM FROM DB.DBA.NEWS_GROUPS WHERE NG_GROUP = " . $grp); if ($last_num == null) $last_num = 0; if ($min_num == null) $min_num = 0; if ($max_num == null) $max_num = 0; if ($last_num == null) $last_num = 0; $wpdb->query("UPDATE DB.DBA.NEWS_GROUPS SET NG_NUM = " . intval($all_mess) . " , NG_FIRST = " . intval($min_num). ", NG_LAST = " . intval($max_num) . " WHERE NG_GROUP= " . intval($grp)); } function wordpress_guid () { return '85FBC77C-7FB5-11DB-BDC2-7A5655D89593'; } function RFC_ID ($postid, $commid = null) { $hash = md5 (wordpress_guid()); $host = `hostname`; $ret = ''; if ($commid == null) $ret = sprintf ("<%s.%s@%s>", $postid, $hash, $host); else $ret = sprintf ("<%s.%s.%s@%s>", $postid, $commid, $hash, $host); return $ret; } function MAIL_SUBJECT ($txt, $id = null) { $enc = base64_encode ($txt); $enc = str_replace ("\r\n", '', $enc); $txt = "'Subject', '=?UTF-8?B?".$enc."?=',"; if ($id != null) $txt.= "'X-WordPress-ID".mediawiki_guid()."','".$id."',"; return $txt; } function MAIL_SUBJECT_TXT ($txt, $id = null) { $enc = base64_encode ($txt); $enc = str_replace ("\r\n", '', $enc); $txt = "Subject: =?UTF-8?B?".$enc."?=\r\n"; if ($id != null) $txt.= "X-WordPress-ID".mediawiki_guid().": ".$id."\r\n"; return $txt; } function RFC_HEADER ($mid, $refs, $gid, $title, $rec, $author_mail, $lenhead, $lenall) { $ses = "serialize (vector (vector (".MAIL_SUBJECT($title); $ses .= sprintf ("'Date','%s',", $rec); $ses .= sprintf ("'Message-Id', '%s',", $mid); if ($refs != null) $ses .= sprintf ("'References', '%s',", $refs); $ses .= sprintf ("'From', '%s',", $author_mail); $ses .= sprintf ("'Content-Type', 'text/html', 'charset','UTF-8',"); $ses .= sprintf ("'Newsgroups', '%s'", $gid); // $ses .= "'Newsgroups','".$gid."'"; $ses .= "),vector(".$lenhead.",".$lenall.")))"; return $ses; } function RFC_HEADER_TXT ($mid, $refs, $gid, $title, $rec, $author_mail) { $ses = MAIL_SUBJECT_TXT($title); $ses .= sprintf ("Date: %s\r\n", $rec); $ses .= sprintf ("Message-Id: %s\r\n", $mid); if ($refs != null) $ses .= sprintf ("References: %s\r\n", $refs); $ses .= sprintf ("From: %s\r\n", $author_mail); $ses .= sprintf ("Content-Type: text/html charset=UTF-8\r\n"); $ses .= sprintf ("Newsgroups: %s\r\n", $gid); return $ses; } function RFC_MSG ($head, $body) { $ses = $head; $ses .= "\r\n\r\n"; $ses .= $body; $ses .= "\r\n.\r\n"; return $ses; } function get_now() { global $wpdb; return $wpdb->get_var("select DB.DBA.date_rfc1123(now()) as NOW"); } function get_raw_now() { global $wpdb; return $wpdb->get_var ('select now() as NOW'); } function notifyOnPageChange($title, $timestamp, $summary, $message, $emailaddress) { // var $to, $subject, $body, $replyto, $from; // var $user, $title, $timestamp, $summary, $minorEdit, $oldid; global $wpdb; $nowstamp = get_now (); $topicname = $title; $subject = $summary; $description = $subject; $topicname = str_replace (' ', '-', $topicname); $nmtype = 'NNTP'; $cnt = $wpdb->get_var ( "select count(*) FROM DB.DBA.NEWS_GROUPS WHERE NG_NAME = '$topicname'" ); if ( intval($cnt) == 0) { $timestamp = get_raw_now (); $wpdb->query ( "INSERT INTO DB.DBA.NEWS_GROUPS ( NG_NEXT_NUM, NG_NAME, NG_DESC, NG_SERVER, NG_POST, NG_UP_TIME, NG_CREAT, NG_UP_INT, NG_PASS, NG_UP_MESS, NG_NUM, NG_FIRST, NG_LAST, NG_LAST_OUT, NG_CLEAR_INT, NG_TYPE ) VALUES ( 0, '$topicname', '$description', null, null, now(), now(), 30, 0, 0, 0, 0, 0, 0, 120, 'NNTP')" ); $row = $wpdb->get_results (" SELECT NG_GROUP, NG_NEXT_NUM FROM DB.DBA.NEWS_GROUPS WHERE NG_NAME = '$topicname'"); $groupid = intval($row[0]->NG_GROUP); $ngnext = intval($row[0]->NG_NEXT_NUM); $rate = doubleval(1.0); $nowstamp = get_now (); $order = $wpdb->get_var ( "SELECT max(HA_ORDER) as ORD FROM DB.DBA.HTTP_ACL WHERE HA_LIST = 'NEWS'"); $order += 1; $query_text = "INSERT INTO DB.DBA.HTTP_ACL ( HA_LIST, HA_OBJECT , HA_ORDER , HA_CLIENT_IP, HA_FLAG, HA_RW, HA_DEST_IP , HA_RATE ) VALUES ( 'NEWS', $groupid , $order , '*', 0, 0, '*', $rate )" ; $wpdb->query ($query_text); } else { $row = $wpdb->get_results (" SELECT NG_GROUP, NG_NEXT_NUM FROM DB.DBA.NEWS_GROUPS WHERE NG_NAME = '$topicname'"); $groupid = intval($row[0]->NG_GROUP); $ngnext = intval($row[0]->NG_NEXT_NUM); } if ($ngnext < 1) { $ngnext = 1; $msgid = RFC_ID ($groupid); } else { $msgid = RFC_ID ($groupid, $ngnext); } $usermail = $emailaddress; // $subject = $summary; $nmheadtxt = RFC_HEADER_TXT ($msgid, null, $topicname, $subject, $nowstamp, $usermail); $len1 = strlen($nmheadtxt); $nmbody = RFC_MSG($nmheadtxt,$message); $len2 = strlen($nmbody); $nmhead = RFC_HEADER ($msgid, null, $topicname, $subject, $nowstamp, $usermail, $len1,$len2); $qu = 'INSERT INTO'. ' DB.DBA.NEWS_MSG'. '(NM_TYPE, NM_OWN, NM_ID, NM_REF, NM_READ, NM_REC_DATE, NM_STAT,'. 'NM_TRY_POST, NM_DELETED, NM_HEAD, NM_BODY, NM_BODY_ID) values'. "('NNTP',0,'".$msgid."',null,0,now(),0,". 'null,0,'.$nmhead.",'". strencode($nmbody) . "',".$ngnext.')'; $wpdb->query ($qu); $wpdb->query ( "INSERT INTO DB.DBA.NEWS_MULTI_MSG ( NM_KEY_ID , NM_GROUP, NM_NUM_GROUP ) VALUES ( '$msgid', $groupid, $ngnext)" ); $ngnext = $ngnext + 1; $wpdb->query ('set triggers off'); $wpdb->query ( "UPDATE DB.DBA.NEWS_GROUPS SET NG_NEXT_NUM = $ngnext WHERE NG_NAME = '$topicname'"); ns_up_num ($groupid); $wpdb->query ('set triggers off'); } function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) { global $wpdb; if ( 1 == get_option('comment_moderation') ) return false; // If moderation is set to manual if ( preg_match_all("|(href\t*?=\t*?['\"]?)?(https?:)?//|i", $comment, $out) >= get_option('comment_max_links') ) return false; // Check # of external links $mod_keys = trim(get_option('moderation_keys')); if ( !empty($mod_keys) ) { $words = explode("\n", $mod_keys ); foreach ($words as $word) { $word = trim($word); // Skip empty lines if ( empty($word) ) continue; // Do some escaping magic so that '#' chars in the // spam words don't break things: $word = preg_quote($word, '#'); $pattern = "#$word#i"; if ( preg_match($pattern, $author) ) return false; if ( preg_match($pattern, $email) ) return false; if ( preg_match($pattern, $url) ) return false; if ( preg_match($pattern, $comment) ) return false; if ( preg_match($pattern, $user_ip) ) return false; if ( preg_match($pattern, $user_agent) ) return false; } } // Comment whitelisting: if ( 1 == get_option('comment_whitelist')) { if ( 'trackback' == $comment_type || 'pingback' == $comment_type ) { // check if domain is in blogroll $uri = parse_url($url); $domain = $uri['host']; $uri = parse_url( get_option('home') ); $home_domain = $uri['host']; if ( $wpdb->get_var("SELECT link_id FROM $wpdb->links WHERE link_url LIKE ('%$domain%')") || $domain == $home_domain ) return true; else return false; } elseif ( $author != '' && $email != '' ) { $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = 1"); // LIMIT 1 if ( ( 1 == $ok_to_comment ) && ( empty($mod_keys) || false == strpos( $email, $mod_keys) ) ) return true; else return false; } else { return false; } } return true; } function get_approved_comments($post_id) { global $wpdb; $post_id = (int) $post_id; return $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post_id . " AND comment_approved = 1 ORDER BY comment_date"); } // Retrieves comment data given a comment ID or comment object. // Handles comment caching. function &get_comment(&$comment, $output = OBJECT) { global $comment_cache, $wpdb; if ( empty($comment) ) return null; if ( is_object($comment) ) { if ( !isset($comment_cache[$comment->comment_ID]) ) $comment_cache[$comment->comment_ID] = &$comment; $_comment = & $comment_cache[$comment->comment_ID]; } else { $comment = (int) $comment; if ( !isset($comment_cache[$comment]) ) { $_comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = " . $comment); // LIMIT 1 $comment_cache[$comment->comment_ID] = & $_comment; } else { $_comment = & $comment_cache[$comment]; } } if ( $output == OBJECT ) { return $_comment; } elseif ( $output == ARRAY_A ) { return get_object_vars($_comment); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_comment)); } else { return $_comment; } } // Deprecate in favor of get_comment()? function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { // less flexible, but saves DB queries global $postc, $id, $commentdata, $wpdb; if ( $no_cache ) { $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = " . $comment_ID; if ( false == $include_unapproved ) $query .= " AND comment_approved = '1'"; $myrow = $wpdb->get_row($query, ARRAY_A); } else { $myrow['comment_ID'] = $postc->comment_ID; $myrow['comment_post_ID'] = $postc->comment_post_ID; $myrow['comment_author'] = $postc->comment_author; $myrow['comment_author_email'] = $postc->comment_author_email; $myrow['comment_author_url'] = $postc->comment_author_url; $myrow['comment_author_IP'] = $postc->comment_author_IP; $myrow['comment_date'] = $postc->comment_date; $myrow['comment_content'] = $postc->comment_content; $myrow['comment_karma'] = $postc->comment_karma; $myrow['comment_approved'] = $postc->comment_approved; $myrow['comment_type'] = $postc->comment_type; } return $myrow; } function get_lastcommentmodified($timezone = 'server') { global $cache_lastcommentmodified, $pagenow, $wpdb; $add_seconds_blog = get_option('gmt_offset') * 3600; $add_seconds_server = date('Z'); $now = current_time('mysql', 1); if ( !isset($cache_lastcommentmodified[$timezone]) ) { switch ( strtolower($timezone)) { case 'gmt': $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC"); // LIMIT 1 break; case 'blog': $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC"); // LIMIT 1 break; case 'server': $lastcommentmodified = $wpdb->get_var("SELECT dateadd( 'second', " . $add_seconds_server . " , stringdate(comment_date_gmt) ) FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC"); // LIMIT 1 break; } $cache_lastcommentmodified[$timezone] = $lastcommentmodified; } else { $lastcommentmodified = $cache_lastcommentmodified[$timezone]; } return $lastcommentmodified; } function sanitize_comment_cookies() { if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) { $comment_author = apply_filters('pre_comment_author_name', $_COOKIE['comment_author_'.COOKIEHASH]); $comment_author = stripslashes($comment_author); $comment_author = attribute_escape($comment_author); $_COOKIE['comment_author_'.COOKIEHASH] = $comment_author; } if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) { $comment_author_email = apply_filters('pre_comment_author_email', $_COOKIE['comment_author_email_'.COOKIEHASH]); $comment_author_email = stripslashes($comment_author_email); $comment_author_email = attribute_escape($comment_author_email); $_COOKIE['comment_author_email_'.COOKIEHASH] = $comment_author_email; } if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) { $comment_author_url = apply_filters('pre_comment_author_url', $_COOKIE['comment_author_url_'.COOKIEHASH]); $comment_author_url = stripslashes($comment_author_url); $comment_author_url = clean_url($comment_author_url); $_COOKIE['comment_author_url_'.COOKIEHASH] = $comment_author_url; } } function wp_allow_comment($commentdata) { global $wpdb; extract($commentdata, EXTR_SKIP); // Simple duplicate check $dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = " . $comment_post_ID . " AND ( comment_author = '$comment_author' "; if ( $comment_author_email ) $dupe .= "OR comment_author_email = '$comment_author_email' "; $dupe .= ") AND comment_content = '$comment_content'"; // LIMIT 1 if ( $wpdb->get_var($dupe) ) wp_die( __('Duplicate comment detected; it looks as though you\'ve already said that!') ); // Simple flood-protection if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = $comment_author_IP OR comment_author_email = '$comment_author_email' ORDER BY comment_date DESC") ) { // LIMIT 1 $time_lastcomment = mysql2date('U', $lasttime); $time_newcomment = mysql2date('U', $comment_date_gmt); $flood_die = apply_filters('comment_flood_filter', false, $time_lastcomment, $time_newcomment); if ( $flood_die ) { do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment); wp_die( __('You are posting comments too quickly. Slow down.') ); } } if ( $user_id ) { $userdata = get_userdata($user_id); $user = new WP_User($user_id); $post_author = $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment_post_ID); // LIMIT 1 } if ( $userdata && ( $user_id == $post_author || $user->has_cap('level_9') ) ) { // The author and the admins get respect. $approved = 1; } else { // Everyone else's comments will be checked. if ( check_comment($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent, $comment_type) ) $approved = 1; else $approved = 0; if ( wp_blacklist_check($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent) ) $approved = 'spam'; } $approved = apply_filters('pre_comment_approved', $approved); return $approved; } function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) { global $wpdb; do_action('wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent); if ( preg_match_all('/&#(\d+);/', $comment . $author . $url, $chars) ) { foreach ( (array) $chars[1] as $char ) { // If it's an encoded char in the normal ASCII set, reject if ( 38 == $char ) continue; // Unless it's & if ( $char < 128 ) return true; } } $mod_keys = trim( get_option('blacklist_keys') ); if ( '' == $mod_keys ) return false; // If moderation keys are empty $words = explode("\n", $mod_keys ); foreach ( (array) $words as $word ) { $word = trim($word); // Skip empty lines if ( empty($word) ) { continue; } // Do some escaping magic so that '#' chars in the // spam words don't break things: $word = preg_quote($word, '#'); $pattern = "#$word#i"; if ( preg_match($pattern, $author) || preg_match($pattern, $email) || preg_match($pattern, $url) || preg_match($pattern, $comment) || preg_match($pattern, $user_ip) || preg_match($pattern, $user_agent) ) return true; } return false; } function wp_delete_comment($comment_id) { global $wpdb; do_action('delete_comment', $comment_id); $comment = get_comment($comment_id); if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID = " . $comment_id ) ) // LIMIT 1 return false; $post_id = $comment->comment_post_ID; if ( $post_id && $comment->comment_approved == 1 ) wp_update_comment_count($post_id); do_action('wp_set_comment_status', $comment_id, 'delete'); return true; } function wp_get_comment_status($comment_id) { global $wpdb; $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID = " . $comment_id); // LIMIT 1 if ( $result == NULL ) return 'deleted'; elseif ( $result == '1' ) return 'approved'; elseif ( $result == '0' ) return 'unapproved'; elseif ( $result == 'spam' ) return 'spam'; else return false; } function wp_get_current_commenter() { // Cookies should already be sanitized. $comment_author = ''; if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) $comment_author = $_COOKIE['comment_author_'.COOKIEHASH]; $comment_author_email = ''; if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) $comment_author_email = $_COOKIE['comment_author_email_'.COOKIEHASH]; $comment_author_url = ''; if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) $comment_author_url = $_COOKIE['comment_author_url_'.COOKIEHASH]; return compact('comment_author', 'comment_author_email', 'comment_author_url'); } function wp_insert_comment($commentdata) { global $wpdb; extract($commentdata, EXTR_SKIP); if ( ! isset($comment_author_IP) ) $comment_author_IP = preg_replace( '/[^0-9., ]/', '',$_SERVER['REMOTE_ADDR'] ); if ( ! isset($comment_date) ) $comment_date = current_time('mysql'); if ( ! isset($comment_date_gmt) ) $comment_date_gmt = get_gmt_from_date($comment_date); if ( ! isset($comment_parent) ) $comment_parent = 0; if ( ! isset($comment_approved) ) $comment_approved = 1; if ( ! isset($user_id) ) $user_id = 0; $result = $wpdb->insert("INSERT INTO $wpdb->comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES ('$comment_post_ID', '$comment_author', '$comment_author_email', '$comment_author_url', '$comment_author_IP', '$comment_date', '$comment_date_gmt', '$comment_content', '$comment_approved', '$comment_agent', '$comment_type', '$comment_parent', $user_id) ", $wpdb->comments, "comment_ID"); $id = (int) $wpdb->insert_id; if ( $comment_approved == 1) wp_update_comment_count($comment_post_ID); return $id; } function wp_filter_comment($commentdata) { $commentdata['user_id'] = apply_filters('pre_user_id', $commentdata['user_ID']); $commentdata['comment_agent'] = apply_filters('pre_comment_user_agent', $commentdata['comment_agent']); $commentdata['comment_author'] = apply_filters('pre_comment_author_name', $commentdata['comment_author']); $commentdata['comment_content'] = apply_filters('pre_comment_content', $commentdata['comment_content']); $commentdata['comment_author_IP'] = apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP']); $commentdata['comment_author_url'] = apply_filters('pre_comment_author_url', $commentdata['comment_author_url']); $commentdata['comment_author_email'] = apply_filters('pre_comment_author_email', $commentdata['comment_author_email']); $commentdata['filtered'] = true; return $commentdata; } function wp_throttle_comment_flood($block, $time_lastcomment, $time_newcomment) { if ( $block ) // a plugin has already blocked... we'll let that decision stand return $block; if ( ($time_newcomment - $time_lastcomment) < 15 ) return true; return false; } function wp_new_comment( $commentdata ) { global $wpdb; $commentdata = apply_filters('preprocess_comment', $commentdata); $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; $commentdata['user_ID'] = (int) $commentdata['user_ID']; $commentdata['comment_author_IP'] = preg_replace( '/[^0-9., ]/', '',$_SERVER['REMOTE_ADDR'] ); $commentdata['comment_agent'] = $_SERVER['HTTP_USER_AGENT']; $commentdata['comment_date'] = current_time('mysql'); $commentdata['comment_date_gmt'] = current_time('mysql', 1); $commentdata = wp_filter_comment($commentdata); $commentdata['comment_approved'] = wp_allow_comment($commentdata); $comment_ID = wp_insert_comment($commentdata); $title = $wpdb->get_var("SELECT option_value from $wpdb->options where option_name = 'blogname'"); $title .= ":" . $wpdb->get_var("SELECT post_title from $wpdb->posts where ID = ". $commentdata['comment_post_ID']); notifyOnPageChange($title, $commentdata['comment_date'], $commentdata['comment_author'], $commentdata['comment_content'], $commentdata['comment_author_email']); do_action('comment_post', $comment_ID, $commentdata['comment_approved']); if ( 'spam' != $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching if ( '0' == $commentdata['comment_approved'] ) wp_notify_moderator($comment_ID); $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment if ( get_option('comments_notify') && $commentdata['comment_approved'] && $post->post_author != $commentdata['user_ID'] ) wp_notify_postauthor($comment_ID, $commentdata['comment_type']); } return $comment_ID; } function wp_set_comment_status($comment_id, $comment_status) { global $wpdb; switch ( $comment_status ) { case 'hold': $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID = " . $comment_id; // LIMIT 1 break; case 'approve': $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID = " . $comment_id; // LIMIT 1 break; case 'spam': $query = "UPDATE $wpdb->comments SET comment_approved='spam' WHERE comment_ID = " . $comment_id; break; case 'delete': return wp_delete_comment($comment_id); break; default: return false; } if ( !$wpdb->query($query) ) return false; do_action('wp_set_comment_status', $comment_id, $comment_status); $comment = get_comment($comment_id); wp_update_comment_count($comment->comment_post_ID); return true; } function wp_update_comment($commentarr) { global $wpdb; // First, get all of the original fields $comment = get_comment($commentarr['comment_ID'], ARRAY_A); // Escape data pulled from DB. foreach ( (array) $comment as $key => $value ) $comment[$key] = $wpdb->escape($value); // Merge old and new fields with new fields overwriting old ones. $commentarr = array_merge($comment, $commentarr); $commentarr = wp_filter_comment( $commentarr ); // Now extract the merged array. extract($commentarr, EXTR_SKIP); $comment_content = apply_filters('comment_save_pre', $comment_content); $comment_date_gmt = get_gmt_from_date($comment_date); $result = $wpdb->query( "UPDATE $wpdb->comments SET comment_content = '$comment_content', comment_author = '$comment_author', comment_author_email = '$comment_author_email', comment_approved = '$comment_approved', comment_author_url = '$comment_author_url', comment_date = '$comment_date', comment_date_gmt = '$comment_date_gmt' WHERE comment_ID = $comment_ID" ); $rval = $wpdb->rows_affected; wp_update_comment_count($comment_post_ID); do_action('edit_comment', $comment_ID); return $rval; } function wp_update_comment_count($post_id) { global $wpdb, $comment_count_cache; $post_id = (int) $post_id; if ( !$post_id ) return false; $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = " . $post_id . " AND comment_approved = '1'"); $wpdb->query("UPDATE $wpdb->posts SET comment_count = $count WHERE ID = " . $post_id); $comment_count_cache[$post_id] = $count; $post = get_post($post_id); if ( 'page' == $post->post_type ) clean_page_cache( $post_id ); else clean_post_cache( $post_id ); do_action('edit_post', $post_id); return true; } // // Ping and trackback functions. // function discover_pingback_server_uri($url, $timeout_bytes = 2048) { global $wp_version; $byte_count = 0; $contents = ''; $headers = ''; $pingback_str_dquote = 'rel="pingback"'; $pingback_str_squote = 'rel=\'pingback\''; $x_pingback_str = 'x-pingback: '; $pingback_href_original_pos = 27; extract(parse_url($url), EXTR_SKIP); if ( !isset($host) ) // Not an URL. This should never happen. return false; $path = ( !isset($path) ) ? '/' : $path; $path .= ( isset($query) ) ? '?' . $query : ''; $port = ( isset($port) ) ? $port : 80; // Try to connect to the server at $host $fp = @fsockopen($host, $port, $errno, $errstr, 2); if ( !$fp ) // Couldn't open a connection to $host return false; // Send the GET request $request = "GET $path HTTP/1.1\r\nHost: $host\r\nUser-Agent: WordPress/$wp_version \r\n\r\n"; // ob_end_flush(); fputs($fp, $request); // Let's check for an X-Pingback header first while ( !feof($fp) ) { $line = fgets($fp, 512); if ( trim($line) == '' ) break; $headers .= trim($line)."\n"; $x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str); if ( $x_pingback_header_offset ) { // We got it! preg_match('#x-pingback: (.+)#is', $headers, $matches); $pingback_server_url = trim($matches[1]); return $pingback_server_url; } if ( strpos(strtolower($headers), 'content-type: ') ) { preg_match('#content-type: (.+)#is', $headers, $matches); $content_type = trim($matches[1]); } } if ( preg_match('#(image|audio|video|model)/#is', $content_type) ) // Not an (x)html, sgml, or xml page, no use going further return false; while ( !feof($fp) ) { $line = fgets($fp, 1024); $contents .= trim($line); $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote); $pingback_link_offset_squote = strpos($contents, $pingback_str_squote); if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) { $quote = ($pingback_link_offset_dquote) ? '"' : '\''; $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote; $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset); $pingback_href_start = $pingback_href_pos+6; $pingback_href_end = @strpos($contents, $quote, $pingback_href_start); $pingback_server_url_len = $pingback_href_end - $pingback_href_start; $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len); // We may find rel="pingback" but an incomplete pingback URL if ( $pingback_server_url_len > 0 ) // We got it! return $pingback_server_url; } $byte_count += strlen($line); if ( $byte_count > $timeout_bytes ) { // It's no use going further, there probably isn't any pingback // server to find in this file. (Prevents loading large files.) return false; } } // We didn't find anything. return false; } function do_all_pings() { global $wpdb; // Do pingbacks while ($ping = $wpdb->get_row("SELECT * FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_pingme'")) { // LIMIT 1 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $ping->ID . " AND meta_key = '_pingme'"); pingback($ping->post_content, $ping->ID); } // Do Enclosures while ($enclosure = $wpdb->get_row("SELECT * FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_encloseme'")) { // LIMIT 1 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $enclosure->ID . " AND meta_key = '_encloseme'"); do_enclose($enclosure->post_content, $enclosure->ID); } // Do Trackbacks $trackbacks = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE CHAR_LENGTH(TRIM(to_ping)) > 7 AND post_status = 'publish'"); if ( is_array($trackbacks) ) { foreach ( $trackbacks as $trackback ) do_trackbacks($trackback->ID); } //Do Update Services/Generic Pings generic_ping(); } function do_trackbacks($post_id) { global $wpdb; $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $post_id); $to_ping = get_to_ping($post_id); $pinged = get_pung($post_id); if ( empty($to_ping) ) { $wpdb->query("UPDATE $wpdb->posts SET to_ping = '' WHERE ID = " . $post_id); return; } if ( empty($post->post_excerpt) ) $excerpt = apply_filters('the_content', $post->post_content); else $excerpt = apply_filters('the_excerpt', $post->post_excerpt); $excerpt = str_replace(']]>', ']]>', $excerpt); $excerpt = strip_tags($excerpt); if ( function_exists('mb_strcut') ) // For international trackbacks $excerpt = mb_strcut($excerpt, 0, 252, get_option('blog_charset')) . '...'; else $excerpt = substr($excerpt, 0, 252) . '...'; $post_title = apply_filters('the_title', $post->post_title); $post_title = strip_tags($post_title); if ( $to_ping ) { foreach ( (array) $to_ping as $tb_ping ) { $tb_ping = trim($tb_ping); if ( !in_array($tb_ping, $pinged) ) { trackback($tb_ping, $post_title, $excerpt, $post_id); $pinged[] = $tb_ping; } else { $wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = " . $post_id ); } } } } function generic_ping($post_id = 0) { $services = get_option('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ( (array) $services as $service ) weblog_ping($service); } return $post_id; } function pingback($content, $post_ID) { global $wp_version, $wpdb; include_once(ABSPATH . WPINC . '/class-IXR.php'); // original code by Mort (http://mort.mine.nu:8080) $log = debug_fopen(ABSPATH . '/pingback.log', 'a'); $post_links = array(); debug_fwrite($log, 'BEGIN ' . date('YmdHis', time()) . "\n"); $pung = get_pung($post_ID); // Variables $ltrs = '\w'; $gunk = '/#~:.?+=&%@!\-'; $punc = '.:?\-'; $any = $ltrs . $gunk . $punc; // Step 1 // Parsing the post, external links (if any) are stored in the $post_links array // This regexp comes straight from phpfreaks.com // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp); // Debug debug_fwrite($log, 'Post contents:'); debug_fwrite($log, $content."\n"); // Step 2. // Walking thru the links array // first we get rid of links pointing to sites, not to specific files // Example: // http://dummy-weblog.org // http://dummy-weblog.org/ // http://dummy-weblog.org/post.php // We don't wanna ping first and second types, even if they have a valid foreach ( $post_links_temp[0] as $link_test ) : if ( !in_array($link_test, $pung) && (url_to_postid($link_test) != $post_ID) // If we haven't pung it already and it isn't a link to itself && !is_local_attachment($link_test) ) : // Also, let's never ping local attachments. $test = parse_url($link_test); if ( isset($test['query']) ) $post_links[] = $link_test; elseif ( ($test['path'] != '/') && ($test['path'] != '') ) $post_links[] = $link_test; endif; endforeach; do_action_ref_array('pre_ping', array(&$post_links, &$pung)); foreach ( (array) $post_links as $pagelinkedto ) { debug_fwrite($log, "Processing -- $pagelinkedto\n"); $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048); if ( $pingback_server_url ) { @ set_time_limit( 60 ); // Now, the RPC call debug_fwrite($log, "Page Linked To: $pagelinkedto \n"); debug_fwrite($log, 'Page Linked From: '); $pagelinkedfrom = get_permalink($post_ID); debug_fwrite($log, $pagelinkedfrom."\n"); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($pingback_server_url); $client->timeout = 3; $client->useragent .= ' -- WordPress/' . $wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto ) ) add_ping( $post_ID, $pagelinkedto ); else debug_fwrite($log, "Error.\n Fault code: ".$client->getErrorCode()." : ".$client->getErrorMessage()."\n"); } } debug_fwrite($log, "\nEND: ".time()."\n****************************\n"); debug_fclose($log); } function privacy_ping_filter($sites) { if ( '0' != get_option('blog_public') ) return $sites; else return ''; } // Send a Trackback function trackback($trackback_url, $title, $excerpt, $ID) { global $wpdb, $wp_version; if ( empty($trackback_url) ) return; $title = urlencode($title); $excerpt = urlencode($excerpt); $blog_name = urlencode(get_option('blogname')); $tb_url = $trackback_url; $url = urlencode(get_permalink($ID)); $query_string = "title=$title&url=$url&blog_name=$blog_name&excerpt=$excerpt"; $trackback_url = parse_url($trackback_url); $http_request = 'POST ' . $trackback_url['path'] . ($trackback_url['query'] ? '?'.$trackback_url['query'] : '') . " HTTP/1.0\r\n"; $http_request .= 'Host: '.$trackback_url['host']."\r\n"; $http_request .= 'Content-Type: application/x-www-form-urlencoded; charset='.get_option('blog_charset')."\r\n"; $http_request .= 'Content-Length: '.strlen($query_string)."\r\n"; $http_request .= "User-Agent: WordPress/" . $wp_version; $http_request .= "\r\n\r\n"; $http_request .= $query_string; if ( '' == $trackback_url['port'] ) $trackback_url['port'] = 80; $fs = @fsockopen($trackback_url['host'], $trackback_url['port'], $errno, $errstr, 4); @fputs($fs, $http_request); /* $debug_file = 'trackback.log'; $fp = fopen($debug_file, 'a'); fwrite($fp, "\n*****\nRequest:\n\n$http_request\n\nResponse:\n\n"); while(!@feof($fs)) { fwrite($fp, @fgets($fs, 4096)); } fwrite($fp, "\n\n"); fclose($fp); */ @fclose($fs); $tb_url = addslashes( $tb_url ); $wpdb->query("UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', '$tb_url') WHERE ID = " . $ID ); return $wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_url', '')) WHERE ID = " . $ID ); } function weblog_ping($server = '', $path = '') { global $wp_version; include_once(ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 3; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping $client->query('weblogUpdates.ping', get_option('blogname'), $home); } ?> *wordpress/wp-includes/comment-template.php*dcomment_author) ) $author = __('Anonymous'); else $author = $comment->comment_author; return apply_filters('get_comment_author', $author); } function comment_author() { $author = apply_filters('comment_author', get_comment_author() ); echo $author; } function get_comment_author_email() { global $comment; return apply_filters('get_comment_author_email', $comment->comment_author_email); } function comment_author_email() { echo apply_filters('author_email', get_comment_author_email() ); } function comment_author_email_link($linktext='', $before='', $after='') { global $comment; $email = apply_filters('comment_email', $comment->comment_author_email); if ((!empty($email)) && ($email != '@')) { $display = ($linktext != '') ? $linktext : $email; echo $before; echo "$display"; echo $after; } } function get_comment_author_link() { global $comment; $url = get_comment_author_url(); $author = get_comment_author(); if ( empty( $url ) || 'http://' == $url ) $return = $author; else $return = "$author"; return apply_filters('get_comment_author_link', $return); } function comment_author_link() { echo get_comment_author_link(); } function get_comment_author_IP() { global $comment; return apply_filters('get_comment_author_IP', $comment->comment_author_IP); } function comment_author_IP() { echo get_comment_author_IP(); } function get_comment_author_url() { global $comment; return apply_filters('get_comment_author_url', $comment->comment_author_url); } function comment_author_url() { echo apply_filters('comment_url', get_comment_author_url()); } function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) { global $comment; $url = get_comment_author_url(); $display = ($linktext != '') ? $linktext : $url; $display = str_replace( 'http://www.', '', $display ); $display = str_replace( 'http://', '', $display ); if ( '/' == substr($display, -1) ) $display = substr($display, 0, -1); $return = "$before$display$after"; return apply_filters('get_comment_author_url_link', $return); } function comment_author_url_link( $linktext = '', $before = '', $after = '' ) { echo get_comment_author_url_link( $linktext, $before, $after ); } function get_comment_date( $d = '' ) { global $comment; if ( '' == $d ) $date = mysql2date( get_option('date_format'), $comment->comment_date); else $date = mysql2date($d, $comment->comment_date); return apply_filters('get_comment_date', $date, $d); } function comment_date( $d = '' ) { echo get_comment_date( $d ); } function get_comment_excerpt() { global $comment; $comment_text = strip_tags($comment->comment_content); $blah = explode(' ', $comment_text); if (count($blah) > 20) { $k = 20; $use_dotdotdot = 1; } else { $k = count($blah); $use_dotdotdot = 0; } $excerpt = ''; for ($i=0; $i<$k; $i++) { $excerpt .= $blah[$i] . ' '; } $excerpt .= ($use_dotdotdot) ? '...' : ''; return apply_filters('get_comment_excerpt', $excerpt); } function comment_excerpt() { echo apply_filters('comment_excerpt', get_comment_excerpt() ); } function get_comment_ID() { global $comment; return apply_filters('get_comment_ID', $comment->comment_ID); } function comment_ID() { echo get_comment_ID(); } function get_comment_link() { global $comment; return get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; } function get_comments_link() { return get_permalink() . '#comments'; } function comments_link( $file = '', $echo = true ) { echo get_comments_link(); } function get_comments_number( $post_id = 0 ) { global $wpdb, $id; $post_id = (int) $post_id; if ( !$post_id ) $post_id = (int) $id; $post = get_post($post_id); if ( ! isset($post->comment_count) ) $count = 0; else $count = $post->comment_count; return apply_filters('get_comments_number', $count); } function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) { global $id; $number = get_comments_number($id); if ( $number > 1 ) $output = str_replace('%', $number, ( false == $more ) ? __('% Comments') : $more); elseif ( $number == 0 ) $output = ( false == $zero ) ? __('No Comments') : $zero; else // must be one $output = ( false == $one ) ? __('1 Comment') : $one; echo apply_filters('comments_number', $output, $number); } function get_comment_text() { global $comment; return apply_filters('get_comment_text', $comment->comment_content); } function comment_text() { echo apply_filters('comment_text', get_comment_text() ); } function get_comment_time( $d = '', $gmt = false ) { global $comment; $comment_date = $gmt? $comment->comment_date_gmt : $comment->comment_date; if ( '' == $d ) $date = mysql2date(get_option('time_format'), $comment_date); else $date = mysql2date($d, $comment_date); return apply_filters('get_comment_time', $date, $d, $gmt); } function comment_time( $d = '' ) { echo get_comment_time($d); } function get_comment_type() { global $comment; if ( '' == $comment->comment_type ) $comment->comment_type = 'comment'; return apply_filters('get_comment_type', $comment->comment_type); } function comment_type($commenttxt = 'Comment', $trackbacktxt = 'Trackback', $pingbacktxt = 'Pingback') { $type = get_comment_type(); switch( $type ) { case 'trackback' : echo $trackbacktxt; break; case 'pingback' : echo $pingbacktxt; break; default : echo $commenttxt; } } function get_trackback_url() { global $id; $tb_url = get_option('siteurl') . '/wp-trackback.php?p=' . $id; if ( '' != get_option('permalink_structure') ) $tb_url = trailingslashit(get_permalink()) . user_trailingslashit('trackback', 'single_trackback'); return apply_filters('trackback_url', $tb_url); } function trackback_url( $display = true ) { if ( $display) echo get_trackback_url(); else return get_trackback_url(); } function trackback_rdf($timezone = 0) { global $id; if (stripos($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator') == false) { echo ' \n"; echo ''; } } function comments_open() { global $post; if ( 'open' == $post->comment_status ) return true; else return false; } function pings_open() { global $post; if ( 'open' == $post->ping_status ) return true; else return false; } function wp_comment_form_unfiltered_html_nonce() { global $post; if ( current_user_can('unfiltered_html') ) wp_nonce_field('unfiltered-html-comment_' . $post->ID, '_wp_unfiltered_html_comment', false); } function comments_template( $file = '/comments.php' ) { global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity; if ( ! (is_single() || is_page() || $withcomments) ) return; $req = get_option('require_name_email'); $commenter = wp_get_current_commenter(); extract($commenter, EXTR_SKIP); // TODO: Use API instead of SELECTs. if ( $user_ID) { $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID . " AND (comment_approved = '1' OR ( user_id = " . $user_ID . " AND comment_approved = '0' ) ) ORDER BY comment_date"); } else if ( empty($comment_author) ) { $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID . " AND comment_approved = '1' ORDER BY comment_date"); } else { $author_db = $wpdb->escape($comment_author); $email_db = $wpdb->escape($comment_author_email); $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID . " AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date"); } // keep $comments for legacy's sake (remember $table*? ;) ) $comments = $wp_query->comments = apply_filters( 'comments_array', $comments, $post->ID ); $wp_query->comment_count = count($wp_query->comments); define('COMMENTS_TEMPLATE', true); $include = apply_filters('comments_template', TEMPLATEPATH . $file ); if ( file_exists( $include ) ) require( $include ); else require( ABSPATH . 'wp-content/themes/default/comments.php'); } function comments_popup_script($width=400, $height=400, $file='') { global $wpcommentspopupfile, $wptrackbackpopupfile, $wppingbackpopupfile, $wpcommentsjavascript; if (empty ($file)) { $wpcommentspopupfile = ''; // Use the index. } else { $wpcommentspopupfile = $file; } $wpcommentsjavascript = 1; $javascript = "\n"; echo $javascript; } function comments_popup_link($zero='No Comments', $one='1 Comment', $more='% Comments', $CSSclass='', $none='Comments Off') { global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $wpdb; if ( is_single() || is_page() ) return; $number = get_comments_number($id); if ( 0 == $number && 'closed' == $post->comment_status && 'closed' == $post->ping_status ) { echo '' . $none . ''; return; } if ( !empty($post->post_password) ) { // if there's a password if ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie echo(__('Enter your password to view comments')); return; } } echo ''; comments_number($zero, $one, $more, $number); echo ''; } ?> wordpress/wp-includes/compat.php A if (get_class($object) == strtolower($class)) { return true; } else { return is_subclass_of($object, $class); } } } if (!function_exists('ob_clean')) { function ob_clean() { // by Aidan Lister if (@ob_end_clean()) { return ob_start(); } return false; } } /* Added in PHP 4.3.0 */ function printr($var, $do_not_echo = false) { // from php.net/print_r user contributed notes ob_start(); print_r($var); $code = htmlentities(ob_get_contents()); ob_clean(); if (!$do_not_echo) { echo "
    $code
    "; } ob_end_clean(); return $code; } /* compatibility with PHP versions older than 4.3 */ if ( !function_exists('file_get_contents') ) { function file_get_contents( $file ) { $file = file($file); return !$file ? false : implode('', $file); } } if (!defined('CASE_LOWER')) { define('CASE_LOWER', 0); } if (!defined('CASE_UPPER')) { define('CASE_UPPER', 1); } /** * Replace array_change_key_case() * * @category PHP * @package PHP_Compat * @link http://php.net/function.array_change_key_case * @author Stephan Schmidt * @author Aidan Lister * @version $Revision: 5187 $ * @since PHP 4.2.0 * @require PHP 4.0.0 (user_error) */ if (!function_exists('array_change_key_case')) { function array_change_key_case($input, $case = CASE_LOWER) { if (!is_array($input)) { user_error('array_change_key_case(): The argument should be an array', E_USER_WARNING); return false; } $output = array (); $keys = array_keys($input); $casefunc = ($case == CASE_LOWER) ? 'strtolower' : 'strtoupper'; foreach ($keys as $key) { $output[$casefunc($key)] = $input[$key]; } return $output; } } // From php.net if(!function_exists('http_build_query')) { function http_build_query( $formdata, $numeric_prefix = null, $key = null ) { $res = array(); foreach ((array)$formdata as $k=>$v) { $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k); if ($key) $tmp_key = $key.'['.$tmp_key.']'; $res[] = ( ( is_array($v) || is_object($v) ) ? http_build_query($v, null, $tmp_key) : $tmp_key."=".urlencode($v) ); } $separator = ini_get('arg_separator.output'); return implode($separator, $res); } } if ( !function_exists('_') ) { function _($string) { return $string; } } // Added in PHP 5.0 if (!function_exists('stripos')) { function stripos($haystack, $needle, $offset = 0) { return strpos(strtolower($haystack), strtolower($needle), $offset); } } ?> wordpress/wp-includes/cron.php false, 'args' => $args ); uksort( $crons, "strnatcasecmp" ); _set_cron_array( $crons ); } function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) { $crons = _get_cron_array(); $schedules = wp_get_schedules(); $key = md5(serialize($args)); if ( !isset( $schedules[$recurrence] ) ) return false; $crons[$timestamp][$hook][$key] = array( 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] ); uksort( $crons, "strnatcasecmp" ); _set_cron_array( $crons ); } function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array()) { $crons = _get_cron_array(); $schedules = wp_get_schedules(); $key = md5(serialize($args)); $interval = 0; // First we try to get it from the schedule if ( 0 == $interval ) $interval = $schedules[$recurrence]['interval']; // Now we try to get it from the saved interval in case the schedule disappears if ( 0 == $interval ) $interval = $crons[$timestamp][$hook][$key]['interval']; // Now we assume something is wrong and fail to schedule if ( 0 == $interval ) return false; while ( $timestamp < time() + 1 ) $timestamp += $interval; wp_schedule_event( $timestamp, $recurrence, $hook, $args ); } function wp_unschedule_event( $timestamp, $hook, $args = array() ) { $crons = _get_cron_array(); $key = md5(serialize($args)); unset( $crons[$timestamp][$hook][$key] ); if ( empty($crons[$timestamp][$hook]) ) unset( $crons[$timestamp][$hook] ); if ( empty($crons[$timestamp]) ) unset( $crons[$timestamp] ); _set_cron_array( $crons ); } function wp_clear_scheduled_hook( $hook ) { $args = array_slice( func_get_args(), 1 ); while ( $timestamp = wp_next_scheduled( $hook, $args ) ) wp_unschedule_event( $timestamp, $hook, $args ); } function wp_next_scheduled( $hook, $args = array() ) { $crons = _get_cron_array(); $key = md5(serialize($args)); if ( empty($crons) ) return false; foreach ( $crons as $timestamp => $cron ) { if ( isset( $cron[$hook][$key] ) ) return $timestamp; } return false; } function spawn_cron() { $crons = _get_cron_array(); if ( !is_array($crons) ) return; $keys = array_keys( $crons ); if ( array_shift( $keys ) > time() ) return; $cron_url = get_option( 'siteurl' ) . '/wp-cron.php'; $parts = parse_url( $cron_url ); if ($parts['scheme'] == 'https') { // support for SSL was added in 4.3.0 if (version_compare(phpversion(), '4.3.0', '>=') && function_exists('openssl_open')) { $argyle = @fsockopen('ssl://' . $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01); } else { return false; } } else { $argyle = @ fsockopen( $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01 ); } if ( $argyle ) fputs( $argyle, "GET {$parts['path']}?check=" . wp_hash('187425') . " HTTP/1.0\r\n" . "Host: {$_SERVER['HTTP_HOST']}\r\n\r\n" ); } function wp_cron() { // Prevent infinite loops caused by lack of wp-cron.php if ( strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') != false ) return; $crons = _get_cron_array(); if ( !is_array($crons) ) return; $keys = array_keys( $crons ); if ( isset($keys[0]) && $keys[0] > time() ) return; $schedules = wp_get_schedules(); foreach ( $crons as $timestamp => $cronhooks ) { if ( $timestamp > time() ) break; foreach ( $cronhooks as $hook => $args ) { if ( isset($schedules[$hook]['callback']) && !call_user_func( $schedules[$hook]['callback'] ) ) continue; spawn_cron(); break 2; } } } function wp_get_schedules() { $schedules = array( 'hourly' => array( 'interval' => 3600, 'display' => __('Once Hourly') ), 'daily' => array( 'interval' => 86400, 'display' => __('Once Daily') ), ); return array_merge( apply_filters( 'cron_schedules', array() ), $schedules ); } function wp_get_schedule($hook, $args = array()) { $crons = _get_cron_array(); $key = md5(serialize($args)); if ( empty($crons) ) return false; foreach ( $crons as $timestamp => $cron ) { if ( isset( $cron[$hook][$key] ) ) return $cron[$hook][$key]['schedule']; } return false; } // // Private functions // function _get_cron_array() { $cron = get_option('cron'); if ( ! is_array($cron) ) return false; if ( !isset($cron['version']) ) $cron = _upgrade_cron_array($cron); unset($cron['version']); return $cron; } function _set_cron_array($cron) { $cron['version'] = 2; update_option( 'cron', $cron ); } function _upgrade_cron_array($cron) { if ( isset($cron['version']) && 2 == $cron['version']) return $cron; $new_cron = array(); foreach ($cron as $timestamp => $hooks) { foreach ( $hooks as $hook => $args ) { $key = md5(serialize($args['args'])); $new_cron[$timestamp][$hook][$key] = $args; } } $new_cron['version'] = 2; update_option( 'cron', $new_cron ); return $new_cron; } ?> )wordpress/wp-includes/default-filters.phpB$wordpress/wp-includes/deprecated.phpEposts; $tableusers = $wpdb->users; $tablecategories = $wpdb->categories; $tablepost2cat = $wpdb->post2cat; $tablecomments = $wpdb->comments; $tablelinks = $wpdb->links; $tablelinkcategories = 'linkcategories_is_gone'; $tableoptions = $wpdb->options; $tablepostmeta = $wpdb->postmeta; /* * Deprecated functions come here to die. */ // Use get_post(). function get_postdata($postid) { $post = &get_post($postid); $postdata = array ( 'ID' => $post->ID, 'Author_ID' => $post->post_author, 'Date' => $post->post_date, 'Content' => $post->post_content, 'Excerpt' => $post->post_excerpt, 'Title' => $post->post_title, 'Category' => $post->post_category, 'post_status' => $post->post_status, 'comment_status' => $post->comment_status, 'ping_status' => $post->ping_status, 'post_password' => $post->post_password, 'to_ping' => $post->to_ping, 'pinged' => $post->pinged, 'post_type' => $post->post_type, 'post_name' => $post->post_name ); return $postdata; } // Use the new post loop. function start_wp() { global $wp_query, $post; // Since the old style loop is being used, advance the query iterator here. $wp_query->next_post(); setup_postdata($post); } function the_category_ID($echo = true) { // Grab the first cat in the list. $categories = get_the_category(); $cat = $categories[0]->cat_ID; if ( $echo ) echo $cat; return $cat; } function the_category_head($before='', $after='') { global $currentcat, $previouscat; // Grab the first cat in the list. $categories = get_the_category(); $currentcat = $categories[0]->category_id; if ( $currentcat != $previouscat ) { echo $before; echo get_the_category_by_ID($currentcat); echo $after; $previouscat = $currentcat; } } // Use previous_post_link(). function previous_post($format='%', $previous='previous post: ', $title='yes', $in_same_cat='no', $limitprev=1, $excluded_categories='') { if ( empty($in_same_cat) || 'no' == $in_same_cat ) $in_same_cat = false; else $in_same_cat = true; $post = get_previous_post($in_same_cat, $excluded_categories); if ( !$post ) return; $string = ''.$previous; if ( 'yes' == $title ) $string .= apply_filters('the_title', $post->post_title, $post); $string .= ''; $format = str_replace('%', $string, $format); echo $format; } // Use next_post_link(). function next_post($format='%', $next='next post: ', $title='yes', $in_same_cat='no', $limitnext=1, $excluded_categories='') { if ( empty($in_same_cat) || 'no' == $in_same_cat ) $in_same_cat = false; else $in_same_cat = true; $post = get_next_post($in_same_cat, $excluded_categories); if ( !$post ) return; $string = ''.$next; if ( 'yes' == $title ) $string .= apply_filters('the_title', $post->post_title, $nextpost); $string .= ''; $format = str_replace('%', $string, $format); echo $format; } // // Use current_user_can() for these. // /* returns true if $user_id can create a new post */ function user_can_create_post($user_id, $blog_id = 1, $category_id = 'None') { $author_data = get_userdata($user_id); return ($author_data->user_level > 1); } /* returns true if $user_id can create a new post */ function user_can_create_draft($user_id, $blog_id = 1, $category_id = 'None') { $author_data = get_userdata($user_id); return ($author_data->user_level >= 1); } /* returns true if $user_id can edit $post_id */ function user_can_edit_post($user_id, $post_id, $blog_id = 1) { $author_data = get_userdata($user_id); $post = get_post($post_id); $post_author_data = get_userdata($post->post_author); if ( (($user_id == $post_author_data->ID) && !($post->post_status == 'publish' && $author_data->user_level < 2)) || ($author_data->user_level > $post_author_data->user_level) || ($author_data->user_level >= 10) ) { return true; } else { return false; } } /* returns true if $user_id can delete $post_id */ function user_can_delete_post($user_id, $post_id, $blog_id = 1) { // right now if one can edit, one can delete return user_can_edit_post($user_id, $post_id, $blog_id); } /* returns true if $user_id can set new posts' dates on $blog_id */ function user_can_set_post_date($user_id, $blog_id = 1, $category_id = 'None') { $author_data = get_userdata($user_id); return (($author_data->user_level > 4) && user_can_create_post($user_id, $blog_id, $category_id)); } /* returns true if $user_id can edit $post_id's date */ function user_can_edit_post_date($user_id, $post_id, $blog_id = 1) { $author_data = get_userdata($user_id); return (($author_data->user_level > 4) && user_can_edit_post($user_id, $post_id, $blog_id)); } /* returns true if $user_id can edit $post_id's comments */ function user_can_edit_post_comments($user_id, $post_id, $blog_id = 1) { // right now if one can edit a post, one can edit comments made on it return user_can_edit_post($user_id, $post_id, $blog_id); } /* returns true if $user_id can delete $post_id's comments */ function user_can_delete_post_comments($user_id, $post_id, $blog_id = 1) { // right now if one can edit comments, one can delete comments return user_can_edit_post_comments($user_id, $post_id, $blog_id); } function user_can_edit_user($user_id, $other_user) { $user = get_userdata($user_id); $other = get_userdata($other_user); if ( $user->user_level > $other->user_level || $user->user_level > 8 || $user->ID == $other->ID ) return true; else return false; } /** function get_linksbyname() ** Gets the links associated with category 'cat_name'. ** Parameters: ** cat_name (default 'noname') - The category name to use. If no ** match is found uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and it's description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description' or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined ** show_rating (default false) - show rating stars/chars ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp */ function get_linksbyname($cat_name = "noname", $before = '', $after = '
    ', $between = " ", $show_images = true, $orderby = 'id', $show_description = true, $show_rating = false, $limit = -1, $show_updated = 0) { global $wpdb; $cat_id = -1; $results = $wpdb->get_results("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$cat_name'"); if ($results) { foreach ($results as $result) { $cat_id = $result->cat_ID; } } get_links($cat_id, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated); } /** function wp_get_linksbyname() ** Gets the links associated with the named category. ** Parameters: ** category (no default) - The category to use. **/ function wp_get_linksbyname($category, $args = '') { global $wpdb; $cat_id = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$category'"); // LIMIT 1 if (! $cat_id) return; $args = add_query_arg('category', $cat_id, $args); wp_get_links($args); } /** function get_linkobjectsbyname() ** Gets an array of link objects associated with category 'cat_name'. ** Parameters: ** cat_name (default 'noname') - The category name to use. If no ** match is found uses all ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description', or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** ** Use this like: ** $links = get_linkobjectsbyname('fred'); ** foreach ($links as $link) { ** echo '
  • '.$link->link_name.'
  • '; ** } **/ // Deprecate in favor of get_linkz(). function get_linkobjectsbyname($cat_name = "noname" , $orderby = 'name', $limit = -1) { global $wpdb; $cat_id = -1; //$results = $wpdb->get_results("SELECT cat_id FROM $wpdb->linkcategories WHERE cat_name='$cat_name'"); // TODO: Fix me. if ($results) { foreach ($results as $result) { $cat_id = $result->cat_id; } } return get_linkobjects($cat_id, $orderby, $limit); } /** function get_linkobjects() ** Gets an array of link objects associated with category n. ** Parameters: ** category (default -1) - The category to use. If no category supplied ** uses all ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description', or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** ** Use this like: ** $links = get_linkobjects(1); ** if ($links) { ** foreach ($links as $link) { ** echo '
  • '.$link->link_name.'
    '.$link->link_description.'
  • '; ** } ** } ** Fields are: ** link_id ** link_url ** link_name ** link_image ** link_target ** link_category ** link_description ** link_visible ** link_owner ** link_rating ** link_updated ** link_rel ** link_notes **/ // Deprecate in favor of get_linkz(). function get_linkobjects($category = -1, $orderby = 'name', $limit = -1) { global $wpdb; $sql = "SELECT * FROM $wpdb->links WHERE link_visible = 'Y'"; if ($category != -1) { $sql .= " AND link_category = $category "; } if ($orderby == '') $orderby = 'id'; if (substr($orderby,0,1) == '_') { $direction = ' DESC'; $orderby = substr($orderby,1); } if (strcasecmp('rand',$orderby) == 0) { $orderby = 'rand()'; } else { $orderby = " link_" . $orderby; } $sql .= ' ORDER BY ' . $orderby; $sql .= $direction; /* The next 2 lines implement LIMIT TO processing */ // if ($limit != -1) // $sql .= " LIMIT $limit"; $results = $wpdb->get_results($sql); if ($results) { foreach ($results as $result) { $result->link_url = $result->link_url; $result->link_name = $result->link_name; $result->link_description = $result->link_description; $result->link_notes = $result->link_notes; $newresults[] = $result; } } return $newresults; } /** function get_linksbyname_withrating() ** Gets the links associated with category 'cat_name' and display rating stars/chars. ** Parameters: ** cat_name (default 'noname') - The category name to use. If no ** match is found uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and it's description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url' or 'description'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp */ function get_linksbyname_withrating($cat_name = "noname", $before = '', $after = '
    ', $between = " ", $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { get_linksbyname($cat_name, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); } /** function get_links_withrating() ** Gets the links associated with category n and display rating stars/chars. ** Parameters: ** category (default -1) - The category to use. If no category supplied ** uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and it's description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url' or 'description'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined . ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp */ function get_links_withrating($category = -1, $before = '', $after = '
    ', $between = " ", $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); } /** function get_get_autotoggle() ** Gets the auto_toggle setting of category n. ** Parameters: id (default 0) - The category to get. If no category supplied ** uses 0 */ function get_autotoggle($id = 0) { return 0; } // Use wp_list_cats(). function list_cats($optionall = 1, $all = 'All', $sort_column = 'ID', $sort_order = 'asc', $file = '', $list = true, $optiondates = 0, $optioncount = 0, $hide_empty = 1, $use_desc_for_title = 1, $children=FALSE, $child_of=0, $categories=0, $recurse=0, $feed = '', $feed_image = '', $exclude = '', $hierarchical=FALSE) { $query = compact('optionall', 'all', 'sort_column', 'sort_order', 'file', 'list', 'optiondates', 'optioncount', 'hide_empty', 'use_desc_for_title', 'children', 'child_of', 'categories', 'recurse', 'feed', 'feed_image', 'exclude', 'hierarchical'); return wp_list_cats($query); } function wp_list_cats($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); // Map to new names. if ( isset($r['optionall']) && isset($r['all'])) $r['show_option_all'] = $r['all']; if ( isset($r['sort_column']) ) $r['orderby'] = $r['sort_column']; if ( isset($r['sort_order']) ) $r['order'] = $r['sort_order']; if ( isset($r['optiondates']) ) $r['show_last_update'] = $r['optiondates']; if ( isset($r['optioncount']) ) $r['show_count'] = $r['optioncount']; if ( isset($r['list']) ) $r['style'] = $r['list'] ? 'list' : 'break'; $r['title_li'] = ''; return wp_list_categories($r); } function dropdown_cats($optionall = 1, $all = 'All', $orderby = 'ID', $order = 'asc', $show_last_update = 0, $show_count = 0, $hide_empty = 1, $optionnone = FALSE, $selected = 0, $exclude = 0) { $show_option_all = ''; if ( $optionall ) $show_option_all = $all; $show_option_none = ''; if ( $optionnone ) $show_option_none = __('None'); $vars = compact('show_option_all', 'show_option_none', 'orderby', 'order', 'show_last_update', 'show_count', 'hide_empty', 'selected', 'exclude'); $query = add_query_arg($vars, ''); return wp_dropdown_categories($query); } // Use wp_print_scripts() or WP_Scripts. function tinymce_include() { wp_print_script('wp_tiny_mce'); } function list_authors($optioncount = false, $exclude_admin = true, $show_fullname = false, $hide_empty = true, $feed = '', $feed_image = '') { $args = compact('optioncount', 'exclude_admin', 'show_fullname', 'hide_empty', 'feed', 'feed_image'); return wp_list_authors($args); } function wp_get_post_cats($blogid = '1', $post_ID = 0) { return wp_get_post_categories($post_ID); } function wp_set_post_cats($blogid = '1', $post_ID = 0, $post_categories = array()) { return wp_set_post_categories($post_ID, $post_categories); } // Use wp_get_archives(). function get_archives($type='', $limit='', $format='html', $before = '', $after = '', $show_post_count = false) { $args = compact('type', 'limit', 'format', 'before', 'after', 'show_post_count'); return wp_get_archives($args); } // Use get_author_posts_url(). function get_author_link($echo = false, $author_id, $author_nicename = '') { $link = get_author_posts_url($author_id, $author_nicename); if ( $echo ) echo $link; return $link; } // Use wp_link_pages(). function link_pages($before='
    ', $after='
    ', $next_or_number='number', $nextpagelink='next page', $previouspagelink='previous page', $pagelink='%', $more_file='') { $args = compact('before', 'after', 'next_or_number', 'nextpagelink', 'previouspagelink', 'pagelink', 'more_file'); return wp_link_pages($args); } // Use get_option(). function get_settings($option) { return get_option($option); } ?>,wordpress/wp-includes/feed-atom-comments.php '; ?> > <?php if ( is_singular() ) printf(__('Comments on: %s'), get_the_title_rss()); elseif ( is_search() ) printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars['s'])); else printf(__('Comments for %s'), get_bloginfo_rss( 'name' ) . get_wp_title_rss()); ?> WordPress comment_post_ID); get_post_custom($comment_post->ID); ?> <?php if ( !is_singular() ) { $title = get_the_title($comment_post->ID); $title = apply_filters('the_title', $title); $title = apply_filters('the_title_rss', $title); printf(__('Comment on %1$s by %2$s'), $title, get_comment_author_rss()); } else { printf(__('By: %s'), get_comment_author_rss()); } ?> ' . get_comment_author_url() . ''; ?> post_password) && $_COOKIE['wp-postpass'] != $comment_post->post_password) : ?> ]]> ]]> comment_ID, $comment_post->ID); ?> #wordpress/wp-includes/feed-atom.php '; ?> > <?php bloginfo_rss('name'); wp_title_rss(); ?> WordPress <![CDATA[<?php the_title_rss() ?>]]> ]]> ]]> wordpress/wp-includes/feed.php4 $cut ) { $k = $cut; $use_dotdotdot = 1; } else { $k = count($blah); $use_dotdotdot = 0; } for ( $i=0; $i<$k; $i++ ) $excerpt .= $blah[$i].' '; $excerpt .= ($use_dotdotdot) ? '...' : ''; $content = $excerpt; } $content = str_replace(']]>', ']]>', $content); echo $content; } function the_excerpt_rss() { $output = get_the_excerpt(true); echo apply_filters('the_excerpt_rss', $output); } function permalink_single_rss($file = '') { echo get_permalink(); } function comment_link() { echo get_comment_link(); } function get_comment_author_rss() { return apply_filters('comment_author_rss', get_comment_author() ); } function comment_author_rss() { echo get_comment_author_rss(); } function comment_text_rss() { $comment_text = get_comment_text(); $comment_text = apply_filters('comment_text_rss', $comment_text); echo $comment_text; } function comments_rss_link($link_text = 'Comments RSS', $commentsrssfilename = 'nolongerused') { $url = get_post_comments_feed_link(); echo "$link_text"; } function comments_rss($commentsrssfilename = 'nolongerused') { return get_post_comments_feed_link(); } function get_author_rss_link($echo = false, $author_id, $author_nicename) { $auth_ID = (int) $author_id; $permalink_structure = get_option('permalink_structure'); if ( '' == $permalink_structure ) { $link = get_option('home') . '?feed=rss2&author=' . $author_id; } else { $link = get_author_posts_url($author_id, $author_nicename); $link = $link . user_trailingslashit('feed', 'feed'); } $link = apply_filters('author_feed_link', $link); if ( $echo ) echo $link; return $link; } function get_category_rss_link($echo = false, $cat_ID, $category_nicename) { $permalink_structure = get_option('permalink_structure'); if ( '' == $permalink_structure ) { $link = get_option('home') . '?feed=rss2&cat=' . $cat_ID; } else { $link = get_category_link($cat_ID); $link = $link . user_trailingslashit('feed', 'feed'); } $link = apply_filters('category_feed_link', $link); if ( $echo ) echo $link; return $link; } function get_the_category_rss($type = 'rss') { $categories = get_the_category(); $home = get_bloginfo_rss('home'); $the_list = ''; foreach ( (array) $categories as $category ) { $cat_name = convert_chars($category->cat_name); if ( 'rdf' == $type ) $the_list .= "\n\t\t\n"; if ( 'atom' == $type ) $the_list .= sprintf( '', attribute_escape( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), attribute_escape( $category->cat_name ) ); else $the_list .= "\n\t\t\n"; } return apply_filters('the_category_rss', $the_list, $type); } function the_category_rss($type = 'rss') { echo get_the_category_rss($type); } function html_type_rss() { $type = get_bloginfo('html_type'); if (strpos($type, 'xhtml') != false) $type = 'xhtml'; else $type = 'html'; echo $type; } function rss_enclosure() { global $id, $post; if ( !empty($post->post_password) && ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) ) return; foreach (get_post_custom() as $key => $val) { if ($key == 'enclosure') { foreach ((array)$val as $enc) { $enclosure = split("\n", $enc); echo apply_filters('rss_enclosure', '' . "\n"); } } } } function atom_enclosure() { global $id, $post; if ( !empty($post->post_password) && ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) ) return; foreach (get_post_custom() as $key => $val) { if ($key == 'enclosure') { foreach ((array)$val as $enc) { $enclosure = split("\n", $enc); echo apply_filters('atom_enclosure', '' . "\n"); } } } } ?>"wordpress/wp-includes/feed-rdf.php@ '; ?> > "> <?php bloginfo_rss('name'); wp_title_rss(); ?> hourly 1 2000-01-01T12:00+00:00 <?php the_title_rss() ?> post_date_gmt, false); ?> ]]> ,wordpress/wp-includes/feed-rss2-comments.php N'; ?> <?php if ( is_singular() ) printf(__('Comments on: %s'), get_the_title_rss()); elseif ( is_search() ) printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars['s'])); else printf(__('Comments for %s'), get_bloginfo_rss( 'name' ) . get_wp_title_rss()); ?> http://wordpress.org/?v= comment_post_ID); get_post_custom($comment_post->ID); ?> <?php if ( !is_singular() ) { $title = get_the_title($comment_post->ID); $title = apply_filters('the_title', $title); $title = apply_filters('the_title_rss', $title); printf(__('Comment on %1$s by %2$s'), $title, get_comment_author_rss()); } else { printf(__('By: %s'), get_comment_author_rss()); } ?> post_password) && $_COOKIE['wp-postpass'] != $comment_post->post_password) : ?> ]]> ]]> comment_ID, $comment_post->ID); ?> #wordpress/wp-includes/feed-rss2.php '; ?> > <?php bloginfo_rss('name'); wp_title_rss(); ?> http://wordpress.org/?v= <?php the_title_rss() ?> ]]> ]]> post_content ) > 0 ) : ?> ]]> ]]> "wordpress/wp-includes/feed-rss.php '; ?> <?php bloginfo_rss('name'); wp_title_rss(); ?> http://backend.userland.com/rss092 <?php the_title_rss() ?> ]]> $wordpress/wp-includes/formatting.php)/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE); $stop = count($textarr); // if a plugin has provided an autocorrect array, use it if ( isset($wp_cockneyreplace) ) { $cockney = array_keys($wp_cockneyreplace); $cockneyreplace = array_values($wp_cockneyreplace); } else { $cockney = array("'tain't","'twere","'twas","'tis","'twill","'til","'bout","'nuff","'round","'cause"); $cockneyreplace = array("’tain’t","’twere","’twas","’tis","’twill","’til","’bout","’nuff","’round","’cause"); } $static_characters = array_merge(array('---', ' -- ', '--', 'xn–', '...', '``', '\'s', '\'\'', ' (tm)'), $cockney); $static_replacements = array_merge(array('—', ' — ', '–', 'xn--', '…', '“', '’s', '”', ' ™'), $cockneyreplace); $dynamic_characters = array('/\'(\d\d(?:’|\')?s)/', '/(\s|\A|")\'/', '/(\d+)"/', '/(\d+)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A)"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/(\d+)x(\d+)/'); $dynamic_replacements = array('’$1','$1‘', '$1″', '$1′', '$1’$2', '$1“$2', '”$1', '’$1', '$1×$2'); for ( $i = 0; $i < $stop; $i++ ) { $curl = $textarr[$i]; if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag // static strings $curl = str_replace($static_characters, $static_replacements, $curl); // regular expressions $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); } elseif (strpos($curl, '', '', $text); $text = str_replace('

    ', "\n", $text); $text = str_replace('

    ', '', $text); return $text; } function wpautop($pee, $br = 1) { $pee = $pee . "\n"; // just to make things a little easier, pad the end $pee = preg_replace('|
    \s*
    |', "\n\n", $pee); // Space things out a little $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)'; $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee); $pee = preg_replace('!()!', "$1\n\n", $pee); $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates $pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "

    $1

    \n", $pee); // make paragraphs, including one at the end $pee = preg_replace('|

    \s*?

    |', '', $pee); // under certain strange conditions it could create a P of entirely whitespace $pee = preg_replace('!

    ([^<]+)\s*?(]*>)!', "

    $1

    $2", $pee); $pee = preg_replace( '|

    |', "$1

    ", $pee ); $pee = preg_replace('!

    \s*(]*>)\s*

    !', "$1", $pee); // don't pee all over a tag $pee = preg_replace("|

    (|", "$1", $pee); // problem with nested lists $pee = preg_replace('|

    ]*)>|i', "

    ", $pee); $pee = str_replace('

    ', '

    ', $pee); $pee = preg_replace('!

    \s*(]*>)!', "$1", $pee); $pee = preg_replace('!(]*>)\s*

    !', "$1", $pee); if ($br) { $pee = preg_replace('/<(script|style).*?<\/\\1>/se', 'str_replace("\n", "", "\\0")', $pee); $pee = preg_replace('|(?)\s*\n|', "
    \n", $pee); // optionally make line breaks $pee = str_replace('', "\n", $pee); } $pee = preg_replace('!(]*>)\s*
    !', "$1", $pee); $pee = preg_replace('!
    (\s*]*>)!', '$1', $pee); if (strpos($pee, ')(.*?)!ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '' ", $pee); $pee = preg_replace( "|\n

    $|", '

    ', $pee ); return $pee; } function seems_utf8($Str) { # by bmorel at ssi dot fr for ($i=0; $i', '>', $text); if ( 'double' == $quotes ) { $text = str_replace('"', '"', $text); } elseif ( 'single' == $quotes ) { $text = str_replace("'", ''', $text); } elseif ( $quotes ) { $text = str_replace('"', '"', $text); $text = str_replace("'", ''', $text); } return $text; } function utf8_uri_encode( $utf8_string, $length = 0 ) { $unicode = ''; $values = array(); $num_octets = 1; for ($i = 0; $i < strlen( $utf8_string ); $i++ ) { $value = ord( $utf8_string[ $i ] ); if ( $value < 128 ) { if ( $length && ( strlen($unicode) + 1 > $length ) ) break; $unicode .= chr($value); } else { if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3; $values[] = $value; if ( $length && ( (strlen($unicode) + ($num_octets * 3)) > $length ) ) break; if ( count( $values ) == $num_octets ) { if ($num_octets == 3) { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]); } else { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]); } $values = array(); $num_octets = 1; } } } return $unicode; } function remove_accents($string) { if ( !preg_match('/[\x80-\xff]/', $string) ) return $string; if (seems_utf8($string)) { $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', chr(195).chr(159) => 's', chr(195).chr(160) => 'a', chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', chr(195).chr(191) => 'y', // Decompositions for Latin Extended-A chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', chr(197).chr(154) => 'S',chr(197).chr(155) => 's', chr(197).chr(156) => 'S',chr(197).chr(157) => 's', chr(197).chr(158) => 'S',chr(197).chr(159) => 's', chr(197).chr(160) => 'S', chr(197).chr(161) => 's', chr(197).chr(162) => 'T', chr(197).chr(163) => 't', chr(197).chr(164) => 'T', chr(197).chr(165) => 't', chr(197).chr(166) => 'T', chr(197).chr(167) => 't', chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', chr(197).chr(190) => 'z', chr(197).chr(191) => 's', // Euro Sign chr(226).chr(130).chr(172) => 'E', // GBP (Pound) Sign chr(194).chr(163) => ''); $string = strtr($string, $chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) .chr(252).chr(253).chr(255); $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $string = strtr($string, $chars['in'], $chars['out']); $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); $string = str_replace($double_chars['in'], $double_chars['out'], $string); } return $string; } function sanitize_file_name( $name ) { // Like sanitize_title, but with periods $name = strtolower( $name ); $name = preg_replace('/&.+?;/', '', $name); // kill entities $name = str_replace( '_', '-', $name ); $name = preg_replace('/[^a-z0-9\s-.]/', '', $name); $name = preg_replace('/\s+/', '-', $name); $name = preg_replace('|-+|', '-', $name); $name = trim($name, '-'); return $name; } function sanitize_user( $username, $strict = false ) { $raw_username = $username; $username = strip_tags($username); // Kill octets $username = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '', $username); $username = preg_replace('/&.+?;/', '', $username); // Kill entities // If strict, reduce to ASCII for max portability. if ( $strict ) $username = preg_replace('|[^a-z0-9 _.\-@]|i', '', $username); return apply_filters('sanitize_user', $username, $raw_username, $strict); } function sanitize_title($title, $fallback_title = '') { $title = strip_tags($title); $title = apply_filters('sanitize_title', $title); if (empty($title)) { $title = $fallback_title; } return $title; } function sanitize_title_with_dashes($title) { $title = strip_tags($title); // Preserve escaped octets. $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); // Remove percent signs that are not part of an octet. $title = str_replace('%', '', $title); // Restore octets. $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); $title = remove_accents($title); if (seems_utf8($title)) { if (function_exists('mb_strtolower')) { $title = mb_strtolower($title, 'UTF-8'); } $title = utf8_uri_encode($title, 200); } $title = strtolower($title); $title = preg_replace('/&.+?;/', '', $title); // kill entities $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); $title = preg_replace('/\s+/', '-', $title); $title = preg_replace('|-+|', '-', $title); $title = trim($title, '-'); return $title; } function convert_chars($content, $flag = 'obsolete') { // Translation of invalid Unicode references range to valid range $wp_htmltranswinuni = array( '€' => '€', // the Euro sign '' => '', '‚' => '‚', // these are Windows CP1252 specific characters 'ƒ' => 'ƒ', // they would look weird on non-Windows browsers '„' => '„', '…' => '…', '†' => '†', '‡' => '‡', 'ˆ' => 'ˆ', '‰' => '‰', 'Š' => 'Š', '‹' => '‹', 'Œ' => 'Œ', '' => '', 'Ž' => 'ž', '' => '', '' => '', '‘' => '‘', '’' => '’', '“' => '“', '”' => '”', '•' => '•', '–' => '–', '—' => '—', '˜' => '˜', '™' => '™', 'š' => 'š', '›' => '›', 'œ' => 'œ', '' => '', 'ž' => '', 'Ÿ' => 'Ÿ' ); // Remove metadata tags $content = preg_replace('/(.+?)<\/title>/','',$content); $content = preg_replace('/<category>(.+?)<\/category>/','',$content); // Converts lone & characters into & (a.k.a. &) $content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content); // Fix Word pasting $content = strtr($content, $wp_htmltranswinuni); // Just a little XHTML help $content = str_replace('<br>', '<br />', $content); $content = str_replace('<hr>', '<hr />', $content); return $content; } function funky_javascript_fix($text) { // Fixes for browsers' javascript bugs global $is_macIE, $is_winIE; if ( $is_winIE || $is_macIE ) $text = preg_replace("/\%u([0-9A-F]{4,4})/e", "'&#'.base_convert('\\1',16,10).';'", $text); return $text; } /* balanceTags Balances Tags of string using a modified stack. @param text Text to be balanced @param force Forces balancing, ignoring the value of the option @return Returns balanced text @author Leonard Lin (leonard@acm.org) @version v1.1 @date November 4, 2001 @license GPL v2.0 @notes @changelog --- Modified by Scott Reilly (coffee2code) 02 Aug 2004 1.2 ***TODO*** Make better - change loop condition to $text 1.1 Fixed handling of append/stack pop order of end text Added Cleaning Hooks 1.0 First Version */ function balanceTags($text, $force = false) { if ( !$force && get_option('use_balanceTags') == 0 ) return $text; $tagstack = array(); $stacksize = 0; $tagqueue = ''; $newtext = ''; # WP bug fix for comments - in case you REALLY meant to type '< !--' $text = str_replace('< !--', '< !--', $text); # WP bug fix for LOVE <3 (and other situations with '<' before a number) $text = preg_replace('#<([0-9]{1})#', '<$1', $text); while (preg_match("/<(\/?\w*)\s*([^>]*)>/",$text,$regex)) { $newtext .= $tagqueue; $i = strpos($text,$regex[0]); $l = strlen($regex[0]); // clear the shifter $tagqueue = ''; // Pop or Push if ($regex[1][0] == "/") { // End Tag $tag = strtolower(substr($regex[1],1)); // if too many closing tags if($stacksize <= 0) { $tag = ''; //or close to be safe $tag = '/' . $tag; } // if stacktop value = tag close value then pop else if ($tagstack[$stacksize - 1] == $tag) { // found closing tag $tag = '</' . $tag . '>'; // Close Tag // Pop array_pop ($tagstack); $stacksize--; } else { // closing tag not at top, search for it for ($j=$stacksize-1;$j>=0;$j--) { if ($tagstack[$j] == $tag) { // add tag to tagqueue for ($k=$stacksize-1;$k>=$j;$k--){ $tagqueue .= '</' . array_pop ($tagstack) . '>'; $stacksize--; } break; } } $tag = ''; } } else { // Begin Tag $tag = strtolower($regex[1]); // Tag Cleaning // If self-closing or '', don't do anything. if((substr($regex[2],-1) == '/') || ($tag == '')) { } // ElseIf it's a known single-entity tag but it doesn't close itself, do so elseif ($tag == 'br' || $tag == 'img' || $tag == 'hr' || $tag == 'input') { $regex[2] .= '/'; } else { // Push the tag onto the stack // If the top of the stack is the same as the tag we want to push, close previous tag if (($stacksize > 0) && ($tag != 'div') && ($tagstack[$stacksize - 1] == $tag)) { $tagqueue = '</' . array_pop ($tagstack) . '>'; $stacksize--; } $stacksize = array_push ($tagstack, $tag); } // Attributes $attributes = $regex[2]; if($attributes) { $attributes = ' '.$attributes; } $tag = '<'.$tag.$attributes.'>'; //If already queuing a close tag, then put this tag on, too if ($tagqueue) { $tagqueue .= $tag; $tag = ''; } } $newtext .= substr($text,0,$i) . $tag; $text = substr($text,$i+$l); } // Clear Tag Queue $newtext .= $tagqueue; // Add Remaining text $newtext .= $text; // Empty Stack while($x = array_pop($tagstack)) { $newtext .= '</' . $x . '>'; // Add remaining tags to close } // WP fix for the bug with HTML comments $newtext = str_replace("< !--","<!--",$newtext); $newtext = str_replace("< !--","< !--",$newtext); return $newtext; } function force_balance_tags($text) { return balanceTags($text, true); } function format_to_edit($content, $richedit = false) { $content = apply_filters('format_to_edit', $content); if (! $richedit ) $content = htmlspecialchars($content); return $content; } function format_to_post($content) { global $wpdb; $content = apply_filters('format_to_post', $content); return $content; } function zeroise($number,$threshold) { // function to add leading zeros when necessary return sprintf('%0'.$threshold.'s', $number); } function backslashit($string) { $string = preg_replace('/^([0-9])/', '\\\\\\\\\1', $string); $string = preg_replace('/([a-z])/i', '\\\\\1', $string); return $string; } function trailingslashit($string) { return untrailingslashit($string) . '/'; } function untrailingslashit($string) { return rtrim($string, '/'); } function addslashes_gpc($gpc) { global $wpdb; if (get_magic_quotes_gpc()) { $gpc = stripslashes($gpc); } return $wpdb->escape($gpc); } function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } function urlencode_deep($value) { $value = is_array($value) ? array_map('urlencode_deep', $value) : urlencode($value); return $value; } function antispambot($emailaddy, $mailto=0) { $emailNOSPAMaddy = ''; srand ((float) microtime() * 1000000); for ($i = 0; $i < strlen($emailaddy); $i = $i + 1) { $j = floor(rand(0, 1+$mailto)); if ($j==0) { $emailNOSPAMaddy .= '&#'.ord(substr($emailaddy,$i,1)).';'; } elseif ($j==1) { $emailNOSPAMaddy .= substr($emailaddy,$i,1); } elseif ($j==2) { $emailNOSPAMaddy .= '%'.zeroise(dechex(ord(substr($emailaddy, $i, 1))), 2); } } $emailNOSPAMaddy = str_replace('@','@',$emailNOSPAMaddy); return $emailNOSPAMaddy; } function make_clickable($ret) { $ret = ' ' . $ret; // in testing, using arrays here was found to be faster $ret = preg_replace( array( '#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])([a-z0-9\-_.]+)@([^,< \n\r]+)#i'), array( '$1<a href="$2" rel="nofollow">$2</a>', '$1<a href="http://$2" rel="nofollow">$2</a>', '$1<a href="mailto:$2@$3">$2@$3</a>'),$ret); // this one is not in an array because we need it to run last, for cleanup of accidental links within links $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret); $ret = trim($ret); return $ret; } function wp_rel_nofollow( $text ) { global $wpdb; // This is a pre save filter, so text is already escaped. $text = stripslashes($text); $text = preg_replace('|<a (.+?)>|ie', "'<a ' . str_replace(' rel=\"nofollow\"','',stripslashes('$1')) . ' rel=\"nofollow\">'", $text); $text = $wpdb->escape($text); return $text; } function convert_smilies($text) { global $wp_smiliessearch, $wp_smiliesreplace; $output = ''; if (get_option('use_smilies')) { // HTML loop taken from texturize function, could possible be consolidated $textarr = preg_split("/(<.*>)/U", $text, -1, PREG_SPLIT_DELIM_CAPTURE); // capture the tags as well as in between $stop = count($textarr);// loop stuff for ($i = 0; $i < $stop; $i++) { $content = $textarr[$i]; if ((strlen($content) > 0) && ('<' != $content{0})) { // If it's not a tag $content = preg_replace($wp_smiliessearch, $wp_smiliesreplace, $content); } $output .= $content; } } else { // return default text. $output = $text; } return $output; } function is_email($user_email) { $chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i"; if (strpos($user_email, '@') != false && strpos($user_email, '.') != false) { if (preg_match($chars, $user_email)) { return true; } else { return false; } } else { return false; } } // used by wp-mail to handle charsets in email subjects function wp_iso_descrambler($string) { /* this may only work with iso-8859-1, I'm afraid */ if (!preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) { return $string; } else { $subject = str_replace('_', ' ', $matches[2]); $subject = preg_replace('#\=([0-9a-f]{2})#ei', "chr(hexdec(strtolower('$1')))", $subject); return $subject; } } // give it a date, it will give you the same date as GMT function get_gmt_from_date($string) { // note: this only substracts $time_difference from the given date preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches); $string_time = gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]); $string_gmt = gmdate('Y-m-d H:i:s', $string_time - get_option('gmt_offset') * 3600); return $string_gmt; } // give it a GMT date, it will give you the same date with $time_difference added function get_date_from_gmt($string) { // note: this only adds $time_difference to the given date preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches); $string_time = gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]); $string_localtime = gmdate('Y-m-d H:i:s', $string_time + get_option('gmt_offset')*3600); return $string_localtime; } // computes an offset in seconds from an iso8601 timezone function iso8601_timezone_to_offset($timezone) { // $timezone is either 'Z' or '[+|-]hhmm' if ($timezone == 'Z') { $offset = 0; } else { $sign = (substr($timezone, 0, 1) == '+') ? 1 : -1; $hours = intval(substr($timezone, 1, 2)); $minutes = intval(substr($timezone, 3, 4)) / 60; $offset = $sign * 3600 * ($hours + $minutes); } return $offset; } // converts an iso8601 date to MySQL DateTime format used by post_date[_gmt] function iso8601_to_datetime($date_string, $timezone = USER) { if ($timezone == GMT) { preg_match('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits); if (!empty($date_bits[7])) { // we have a timezone, so let's compute an offset $offset = iso8601_timezone_to_offset($date_bits[7]); } else { // we don't have a timezone, so we assume user local timezone (not server's!) $offset = 3600 * get_option('gmt_offset'); } $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); $timestamp -= $offset; return gmdate('Y-m-d H:i:s', $timestamp); } elseif ($timezone == USER) { return preg_replace('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string); } } function popuplinks($text) { // Comment text in popup windows should be filtered through this. // Right now it's a moderately dumb function, ideally it would detect whether // a target or rel attribute was already there and adjust its actions accordingly. $text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text); return $text; } function sanitize_email($email) { return preg_replace('/[^a-z0-9+_.@-]/i', '', $email); } function human_time_diff( $from, $to = '' ) { if ( empty($to) ) $to = time(); $diff = (int) abs($to - $from); if ($diff <= 3600) { $mins = round($diff / 60); if ($mins <= 1) { $mins = 1; } $since = sprintf(__ngettext('%s min', '%s mins', $mins), $mins); } else if (($diff <= 86400) && ($diff > 3600)) { $hours = round($diff / 3600); if ($hours <= 1) { $hour = 1; } $since = sprintf(__ngettext('%s hour', '%s hours', $hours), $hours); } elseif ($diff >= 86400) { $days = round($diff / 86400); if ($days <= 1) { $days = 1; } $since = sprintf(__ngettext('%s day', '%s days', $days), $days); } return $since; } function wp_trim_excerpt($text) { // Fakes an excerpt if needed global $post; if ( '' == $text ) { $text = get_the_content(''); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = 55; $words = explode(' ', $text, $excerpt_length + 1); if (count($words) > $excerpt_length) { array_pop($words); array_push($words, '[...]'); $text = implode(' ', $words); } } return $text; } function ent2ncr($text) { $to_ncr = array( '"' => '"', '&' => '&', '⁄' => '/', '<' => '<', '>' => '>', '|' => '|', ' ' => ' ', '¡' => '¡', '¢' => '¢', '£' => '£', '¤' => '¤', '¥' => '¥', '¦' => '¦', '&brkbar;' => '¦', '§' => '§', '¨' => '¨', '¨' => '¨', '©' => '©', 'ª' => 'ª', '«' => '«', '¬' => '¬', '­' => '­', '®' => '®', '¯' => '¯', '&hibar;' => '¯', '°' => '°', '±' => '±', '²' => '²', '³' => '³', '´' => '´', 'µ' => 'µ', '¶' => '¶', '·' => '·', '¸' => '¸', '¹' => '¹', 'º' => 'º', '»' => '»', '¼' => '¼', '½' => '½', '¾' => '¾', '¿' => '¿', 'À' => 'À', 'Á' => 'Á', 'Â' => 'Â', 'Ã' => 'Ã', 'Ä' => 'Ä', 'Å' => 'Å', 'Æ' => 'Æ', 'Ç' => 'Ç', 'È' => 'È', 'É' => 'É', 'Ê' => 'Ê', 'Ë' => 'Ë', 'Ì' => 'Ì', 'Í' => 'Í', 'Î' => 'Î', 'Ï' => 'Ï', 'Ð' => 'Ð', 'Ñ' => 'Ñ', 'Ò' => 'Ò', 'Ó' => 'Ó', 'Ô' => 'Ô', 'Õ' => 'Õ', 'Ö' => 'Ö', '×' => '×', 'Ø' => 'Ø', 'Ù' => 'Ù', 'Ú' => 'Ú', 'Û' => 'Û', 'Ü' => 'Ü', 'Ý' => 'Ý', 'Þ' => 'Þ', 'ß' => 'ß', 'à' => 'à', 'á' => 'á', 'â' => 'â', 'ã' => 'ã', 'ä' => 'ä', 'å' => 'å', 'æ' => 'æ', 'ç' => 'ç', 'è' => 'è', 'é' => 'é', 'ê' => 'ê', 'ë' => 'ë', 'ì' => 'ì', 'í' => 'í', 'î' => 'î', 'ï' => 'ï', 'ð' => 'ð', 'ñ' => 'ñ', 'ò' => 'ò', 'ó' => 'ó', 'ô' => 'ô', 'õ' => 'õ', 'ö' => 'ö', '÷' => '÷', 'ø' => 'ø', 'ù' => 'ù', 'ú' => 'ú', 'û' => 'û', 'ü' => 'ü', 'ý' => 'ý', 'þ' => 'þ', 'ÿ' => 'ÿ', 'Œ' => 'Œ', 'œ' => 'œ', 'Š' => 'Š', 'š' => 'š', 'Ÿ' => 'Ÿ', 'ƒ' => 'ƒ', 'ˆ' => 'ˆ', '˜' => '˜', 'Α' => 'Α', 'Β' => 'Β', 'Γ' => 'Γ', 'Δ' => 'Δ', 'Ε' => 'Ε', 'Ζ' => 'Ζ', 'Η' => 'Η', 'Θ' => 'Θ', 'Ι' => 'Ι', 'Κ' => 'Κ', 'Λ' => 'Λ', 'Μ' => 'Μ', 'Ν' => 'Ν', 'Ξ' => 'Ξ', 'Ο' => 'Ο', 'Π' => 'Π', 'Ρ' => 'Ρ', 'Σ' => 'Σ', 'Τ' => 'Τ', 'Υ' => 'Υ', 'Φ' => 'Φ', 'Χ' => 'Χ', 'Ψ' => 'Ψ', 'Ω' => 'Ω', 'α' => 'α', 'β' => 'β', 'γ' => 'γ', 'δ' => 'δ', 'ε' => 'ε', 'ζ' => 'ζ', 'η' => 'η', 'θ' => 'θ', 'ι' => 'ι', 'κ' => 'κ', 'λ' => 'λ', 'μ' => 'μ', 'ν' => 'ν', 'ξ' => 'ξ', 'ο' => 'ο', 'π' => 'π', 'ρ' => 'ρ', 'ς' => 'ς', 'σ' => 'σ', 'τ' => 'τ', 'υ' => 'υ', 'φ' => 'φ', 'χ' => 'χ', 'ψ' => 'ψ', 'ω' => 'ω', 'ϑ' => 'ϑ', 'ϒ' => 'ϒ', 'ϖ' => 'ϖ', ' ' => ' ', ' ' => ' ', ' ' => ' ', '‌' => '‌', '‍' => '‍', '‎' => '‎', '‏' => '‏', '–' => '–', '—' => '—', '‘' => '‘', '’' => '’', '‚' => '‚', '“' => '“', '”' => '”', '„' => '„', '†' => '†', '‡' => '‡', '•' => '•', '…' => '…', '‰' => '‰', '′' => '′', '″' => '″', '‹' => '‹', '›' => '›', '‾' => '‾', '⁄' => '⁄', '€' => '€', 'ℑ' => 'ℑ', '℘' => '℘', 'ℜ' => 'ℜ', '™' => '™', 'ℵ' => 'ℵ', '↵' => '↵', '⇐' => '⇐', '⇑' => '⇑', '⇒' => '⇒', '⇓' => '⇓', '⇔' => '⇔', '∀' => '∀', '∂' => '∂', '∃' => '∃', '∅' => '∅', '∇' => '∇', '∈' => '∈', '∉' => '∉', '∋' => '∋', '∏' => '∏', '∑' => '∑', '−' => '−', '∗' => '∗', '√' => '√', '∝' => '∝', '∞' => '∞', '∠' => '∠', '∧' => '∧', '∨' => '∨', '∩' => '∩', '∪' => '∪', '∫' => '∫', '∴' => '∴', '∼' => '∼', '≅' => '≅', '≈' => '≈', '≠' => '≠', '≡' => '≡', '≤' => '≤', '≥' => '≥', '⊂' => '⊂', '⊃' => '⊃', '⊄' => '⊄', '⊆' => '⊆', '⊇' => '⊇', '⊕' => '⊕', '⊗' => '⊗', '⊥' => '⊥', '⋅' => '⋅', '⌈' => '⌈', '⌉' => '⌉', '⌊' => '⌊', '⌋' => '⌋', '⟨' => '〈', '⟩' => '〉', '←' => '←', '↑' => '↑', '→' => '→', '↓' => '↓', '↔' => '↔', '◊' => '◊', '♠' => '♠', '♣' => '♣', '♥' => '♥', '♦' => '♦' ); return str_replace( array_keys($to_ncr), array_values($to_ncr), $text ); } function wp_richedit_pre($text) { // Filtering a blank results in an annoying <br />\n if ( empty($text) ) return apply_filters('richedit_pre', ''); $output = $text; $output = convert_chars($output); $output = wpautop($output); // These must be double-escaped or planets will collide. $output = str_replace('<', '&lt;', $output); $output = str_replace('>', '&gt;', $output); return apply_filters('richedit_pre', $output); } function clean_url( $url, $protocols = null ) { if ('' == $url) return $url; // printf ("URL [$url]"); $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@]|i', '', $url); // printf ("URL_EXIT [$url]"); $strip = array('%0d', '%0a'); $url = str_replace($strip, '', $url); $url = str_replace(';//', '://', $url); // Append http unless a relative link starting with / or a php file. if ( strpos($url, '://') == false && substr( $url, 0, 1 ) != '/' && !preg_match('/^[a-z0-9-]+?\.php/i', $url) ) $url = 'http://' . $url; $url = preg_replace('/&([^#])(?![a-z]{2,8};)/', '&$1', $url); if ( !is_array($protocols) ) $protocols = array('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet'); if ( wp_kses_bad_protocol( $url, $protocols ) != $url ) return ''; return $url; } // Borrowed from the PHP Manual user notes. Convert entities, while // preserving already-encoded entities: function htmlentities2($myHTML) { $translation_table=get_html_translation_table (HTML_ENTITIES,ENT_QUOTES); $translation_table[chr(38)] = '&'; return preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&" , strtr($myHTML, $translation_table)); } // Escape single quotes, specialchar double quotes, and fix line endings. function js_escape($text) { $safe_text = wp_specialchars($text, 'double'); $safe_text = preg_replace('/&#(x)?0*(?(1)27|39);?/i', "'", stripslashes($safe_text)); $safe_text = preg_replace("/\r?\n/", "\\n", addslashes($safe_text)); return apply_filters('js_escape', $safe_text, $text); } // Escaping for HTML attributes function attribute_escape($text) { $safe_text = wp_specialchars($text, true); return apply_filters('attribute_escape', $safe_text, $text); } function wp_make_link_relative( $link ) { return preg_replace('|https?://[^/]+(/.*)|i', '$1', $link ); } function sanitize_option($option, $value) { // Remember to call stripslashes! switch ($option) { case 'admin_email': $value = sanitize_email($value); break; case 'default_post_edit_rows': case 'mailserver_port': case 'comment_max_links': case 'page_on_front': case 'rss_excerpt_length': case 'default_category': case 'default_email_category': case 'default_link_category': $value = abs((int) $value); break; case 'posts_per_page': case 'posts_per_rss': $value = (int) $value; if ( empty($value) ) $value = 1; if ( $value < -1 ) $value = abs($value); break; case 'default_ping_status': case 'default_comment_status': // Options that if not there have 0 value but need to be something like "closed" if ( $value == '0' || $value == '') $value = 'closed'; break; case 'blogdescription': case 'blogname': $value = addslashes($value); $value = wp_filter_post_kses( $value ); // calls stripslashes then addslashes $value = stripslashes($value); $value = wp_specialchars( $value ); break; case 'blog_charset': $value = preg_replace('/[^a-zA-Z0-9_-]/', '', $value); // strips slashes break; case 'date_format': case 'time_format': case 'mailserver_url': case 'mailserver_login': case 'mailserver_pass': case 'ping_sites': case 'upload_path': $value = strip_tags($value); $value = addslashes($value); $value = wp_filter_kses($value); // calls stripslashes then addslashes $value = stripslashes($value); break; case 'gmt_offset': $value = preg_replace('/[^0-9:.-]/', '', $value); // strips slashes break; case 'siteurl': case 'home': $value = stripslashes($value); $value = clean_url($value); break; default : break; } return $value; } function wp_parse_str( $string, &$array ) { parse_str( $string, $array ); if ( get_magic_quotes_gpc() ) $array = stripslashes_deep( $array ); // parse_str() adds slashes if magicquotes is on. See: http://php.net/parse_str $array = apply_filters( 'wp_parse_str', $array ); } ?> ���#wordpress/wp-includes/functions.php��5<?php require_once(dirname(__FILE__).'/compat.php'); function mysql2date($dateformatstring, $mysqlstring, $translate = true) { global $wp_locale; $m = $mysqlstring; if ( empty($m) ) { return false; } $i = mktime( (int) substr( $m, 11, 2 ), (int) substr( $m, 14, 2 ), (int) substr( $m, 17, 2 ), (int) substr( $m, 5, 2 ), (int) substr( $m, 8, 2 ), (int) substr( $m, 0, 4 ) ); if( 'U' == $dateformatstring ) return $i; if ( -1 == $i || false == $i ) $i = 0; if ( !empty($wp_locale->month) && !empty($wp_locale->weekday) && $translate ) { $datemonth = $wp_locale->get_month(date('m', $i)); $datemonth_abbrev = $wp_locale->get_month_abbrev($datemonth); $dateweekday = $wp_locale->get_weekday(date('w', $i)); $dateweekday_abbrev = $wp_locale->get_weekday_abbrev($dateweekday); $datemeridiem = $wp_locale->get_meridiem(date('a', $i)); $datemeridiem_capital = $wp_locale->get_meridiem(date('A', $i)); $dateformatstring = ' '.$dateformatstring; $dateformatstring = preg_replace("/([^\\\])D/", "\\1".backslashit($dateweekday_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])F/", "\\1".backslashit($datemonth), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])l/", "\\1".backslashit($dateweekday), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])M/", "\\1".backslashit($datemonth_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])a/", "\\1".backslashit($datemeridiem), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])A/", "\\1".backslashit($datemeridiem_capital), $dateformatstring); $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1); } $j = @date($dateformatstring, $i); if ( !$j ) { // for debug purposes // echo $i." ".$mysqlstring; } return $j; } function current_time($type, $gmt = 0) { switch ($type) { case 'mysql': if ( $gmt ) $d = gmdate('Y-m-d H:i:s'); else $d = gmdate('Y-m-d H:i:s', (time() + (get_option('gmt_offset') * 3600))); return $d; break; case 'timestamp': if ( $gmt ) $d = time(); else $d = time() + (get_option('gmt_offset') * 3600); return $d; break; } } function date_i18n($dateformatstring, $unixtimestamp) { global $wp_locale; $i = $unixtimestamp; if ( (!empty($wp_locale->month)) && (!empty($wp_locale->weekday)) ) { $datemonth = $wp_locale->get_month(date('m', $i)); $datemonth_abbrev = $wp_locale->get_month_abbrev($datemonth); $dateweekday = $wp_locale->get_weekday(date('w', $i)); $dateweekday_abbrev = $wp_locale->get_weekday_abbrev($dateweekday); $datemeridiem = $wp_locale->get_meridiem(date('a', $i)); $datemeridiem_capital = $wp_locale->get_meridiem(date('A', $i)); $dateformatstring = ' '.$dateformatstring; $dateformatstring = preg_replace("/([^\\\])D/", "\\1".backslashit($dateweekday_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])F/", "\\1".backslashit($datemonth), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])l/", "\\1".backslashit($dateweekday), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])M/", "\\1".backslashit($datemonth_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])a/", "\\1".backslashit($datemeridiem), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])A/", "\\1".backslashit($datemeridiem_capital), $dateformatstring); $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1); } $j = @date($dateformatstring, $i); return $j; } function get_weekstartend($mysqlstring, $start_of_week) { $my = substr($mysqlstring,0,4); $mm = substr($mysqlstring,8,2); $md = substr($mysqlstring,5,2); $day = mktime(0,0,0, $md, $mm, $my); $weekday = date('w',$day); $i = 86400; if ( $weekday < get_option('start_of_week') ) $weekday = 7 - (get_option('start_of_week') - $weekday); while ($weekday > get_option('start_of_week')) { $weekday = date('w',$day); if ( $weekday < get_option('start_of_week') ) $weekday = 7 - (get_option('start_of_week') - $weekday); $day = $day - 86400; $i = 0; } $week['start'] = $day + 86400 - $i; // $week['end'] = $day - $i + 691199; $week['end'] = $week['start'] + 604799; return $week; } function get_lastpostdate($timezone = 'server') { global $cache_lastpostdate, $pagenow, $wpdb, $blog_id; $add_seconds_blog = get_option('gmt_offset') * 3600; $add_seconds_server = date('Z'); if ( !isset($cache_lastpostdate[$blog_id][$timezone]) ) { switch(strtolower($timezone)) { case 'gmt': $lastpostdate = $wpdb->get_var("SELECT post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC"); // LIMIT 1 break; case 'blog': $lastpostdate = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC"); // LIMIT 1 break; case 'server': $lastpostdate = $wpdb->get_var("SELECT dateadd('second', " . $add_seconds_server ." , stringdate(post_date_gmt) ) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC"); // LIMIT 1 break; } $cache_lastpostdate[$blog_id][$timezone] = $lastpostdate; } else { $lastpostdate = $cache_lastpostdate[$blog_id][$timezone]; } return $lastpostdate; } function get_lastpostmodified($timezone = 'server') { global $cache_lastpostmodified, $pagenow, $wpdb, $blog_id; $add_seconds_blog = get_option('gmt_offset') * 3600; $add_seconds_server = date('Z'); if ( !isset($cache_lastpostmodified[$blog_id][$timezone]) ) { switch(strtolower($timezone)) { case 'gmt': $lastpostmodified = $wpdb->get_var("SELECT post_modified_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC"); // LIMIT 1 break; case 'blog': $lastpostmodified = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC"); // LIMIT 1 break; case 'server': $lastpostmodified = $wpdb->get_var("SELECT dateadd('second', " . $add_seconds_server . " , stringdate(post_modified_gmt) ) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC"); // LIMIT 1 break; } $lastpostdate = get_lastpostdate($timezone); if ( $lastpostdate > $lastpostmodified ) { $lastpostmodified = $lastpostdate; } $cache_lastpostmodified[$blog_id][$timezone] = $lastpostmodified; } else { $lastpostmodified = $cache_lastpostmodified[$blog_id][$timezone]; } return $lastpostmodified; } function maybe_unserialize($original) { if ( is_serialized($original) ) // don't attempt to unserialize data that wasn't serialized going in if ( false != $gm = @ unserialize($original) ) return $gm; return $original; } function is_serialized($data) { // if it isn't a string, it isn't serialized if ( !is_string($data) ) return false; $data = trim($data); if ( 'N;' == $data ) return true; if ( !preg_match('/^([adObis]):/', $data, $badions) ) return false; switch ( $badions[1] ) : case 'a' : case 'O' : case 's' : if ( preg_match("/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data) ) return true; break; case 'b' : case 'i' : case 'd' : if ( preg_match("/^{$badions[1]}:[0-9.E-]+;\$/", $data) ) return true; break; endswitch; return false; } function is_serialized_string($data) { // if it isn't a string, it isn't a serialized string if ( !is_string($data) ) return false; $data = trim($data); if ( preg_match('/^s:[0-9]+:.*;$/s',$data) ) // this should fetch all serialized strings return true; return false; } /* Options functions */ // expects $setting to already be SQL-escaped function get_option($setting) { global $wpdb; // Allow plugins to short-circuit options. $pre = apply_filters( 'pre_option_' . $setting, false ); if ( $pre ) return $pre; // prevent non-existent options from triggering multiple queries $notoptions = wp_cache_get('notoptions', 'options'); if ( isset($notoptions[$setting]) ) return false; $alloptions = wp_load_alloptions(); if ( isset($alloptions[$setting]) ) { $value = $alloptions[$setting]; } else { $value = wp_cache_get($setting, 'options'); if ( false == $value ) { if ( defined('WP_INSTALLING') ) $wpdb->hide_errors(); $row = $wpdb->get_row("SELECT option_value FROM $wpdb->options WHERE option_name = '$setting'");// LIMIT 1 if ( defined('WP_INSTALLING') ) $wpdb->show_errors(); if( is_object( $row) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values $value = $row->option_value; wp_cache_add($setting, $value, 'options'); } else { // option does not exist, so we must cache its non-existence $notoptions[$setting] = true; wp_cache_set('notoptions', $notoptions, 'options'); return false; } } } // If home is not set use siteurl. if ( 'home' == $setting && '' == $value ) return get_option('siteurl'); if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) $value = preg_replace('|/+$|', '', $value); return apply_filters( 'option_' . $setting, maybe_unserialize($value) ); } function wp_protect_special_option($option) { $protected = array('alloptions', 'notoptions'); if ( in_array($option, $protected) ) die(sprintf(__('%s is a protected WP option and may not be modified'), wp_specialchars($option))); } function form_option($option) { echo attribute_escape(get_option($option)); } function get_alloptions() { global $wpdb, $wp_queries; $wpdb->hide_errors(); if ( !$options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'") ) { $options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options"); } $wpdb->show_errors(); foreach ($options as $option) { // "When trying to design a foolproof system, // never underestimate the ingenuity of the fools :)" -- Dougal if ( 'siteurl' == $option->option_name ) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ( 'home' == $option->option_name ) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ( 'category_base' == $option->option_name ) $option->option_value = preg_replace('|/+$|', '', $option->option_value); $value = maybe_unserialize($option->option_value); $all_options->{$option->option_name} = apply_filters('pre_option_' . $option->option_name, $value); } return apply_filters('all_options', $all_options); } function wp_load_alloptions() { global $wpdb; $alloptions = wp_cache_get('alloptions', 'options'); if ( !$alloptions ) { $wpdb->hide_errors(); if ( !$alloptions_db = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'") ) $alloptions_db = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options"); $wpdb->show_errors(); $alloptions = array(); foreach ( (array) $alloptions_db as $o ) $alloptions[$o->option_name] = $o->option_value; wp_cache_add('alloptions', $alloptions, 'options'); } return $alloptions; } // expects $option_name to NOT be SQL-escaped function update_option($option_name, $newvalue) { global $wpdb; wp_protect_special_option($option_name); $safe_option_name = $wpdb->escape($option_name); if ( is_string($newvalue) ) $newvalue = trim($newvalue); // If the new and old values are the same, no need to update. $oldvalue = get_option($safe_option_name); if ( $newvalue == $oldvalue ) { return false; } if ( false == $oldvalue ) { add_option($option_name, $newvalue); return true; } $notoptions = wp_cache_get('notoptions', 'options'); if ( is_array($notoptions) && isset($notoptions[$option_name]) ) { unset($notoptions[$option_name]); wp_cache_set('notoptions', $notoptions, 'options'); } $_newvalue = $newvalue; $newvalue = maybe_serialize($newvalue); $alloptions = wp_load_alloptions(); if ( isset($alloptions[$option_name]) ) { $alloptions[$option_name] = $newvalue; wp_cache_set('alloptions', $alloptions, 'options'); } else { wp_cache_set($option_name, $newvalue, 'options'); } $newvalue = $wpdb->escape($newvalue); $option_name = $wpdb->escape($option_name); $wpdb->query("UPDATE $wpdb->options SET option_value = '$newvalue' WHERE option_name = '$option_name'"); if ( $wpdb->rows_affected == 1 ) { do_action("update_option_{$option_name}", $oldvalue, $_newvalue); return true; } return false; } // thx Alex Stapleton, http://alex.vort-x.net/blog/ // expects $name to NOT be SQL-escaped function add_option($name, $value = '', $description = '', $autoload = 'yes') { global $wpdb; wp_protect_special_option($name); $safe_name = $wpdb->escape($name); // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query $notoptions = wp_cache_get('notoptions', 'options'); if ( !is_array($notoptions) || !isset($notoptions[$name]) ) if ( false != get_option($safe_name) ) return; $value = maybe_serialize($value); $autoload = ( 'no' == $autoload ) ? 'no' : 'yes'; if ( 'yes' == $autoload ) { $alloptions = wp_load_alloptions(); $alloptions[$name] = $value; wp_cache_set('alloptions', $alloptions, 'options'); } else { wp_cache_set($name, $value, 'options'); } // This option exists now $notoptions = wp_cache_get('notoptions', 'options'); // yes, again... we need it to be fresh if ( is_array($notoptions) && isset($notoptions[$name]) ) { unset($notoptions[$name]); wp_cache_set('notoptions', $notoptions, 'options'); } $name = $wpdb->escape($name); $value = $wpdb->escape($value); $description = $wpdb->escape($description); $wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, option_description, autoload) VALUES ('$name', '$value', '$description', '$autoload')"); return; } function delete_option($name) { global $wpdb; wp_protect_special_option($name); // Get the ID, if no ID then return $option = $wpdb->get_row("SELECT option_id, autoload FROM $wpdb->options WHERE option_name = '$name'"); if ( !$option->option_id ) return false; $wpdb->query("DELETE FROM $wpdb->options WHERE option_name = '$name'"); if ( 'yes' == $option->autoload ) { $alloptions = wp_load_alloptions(); if ( isset($alloptions[$name]) ) { unset($alloptions[$name]); wp_cache_set('alloptions', $alloptions, 'options'); } } else { wp_cache_delete($name, 'options'); } return true; } function maybe_serialize($data) { if ( is_string($data) ) $data = trim($data); elseif ( is_array($data) || is_object($data) ) return serialize($data); if ( is_serialized($data) ) return serialize($data); return $data; } function gzip_compression() { if ( !get_option('gzipcompression') ) return false; if ( extension_loaded('zlib') ) { ob_start('ob_gzhandler'); } } function make_url_footnote($content) { preg_match_all('/<a(.+?)href=\"(.+?)\"(.*?)>(.+?)<\/a>/', $content, $matches); $j = 0; for ($i=0; $i<count($matches[0]); $i++) { $links_summary = (!$j) ? "\n" : $links_summary; $j++; $link_match = $matches[0][$i]; $link_number = '['.($i+1).']'; $link_url = $matches[2][$i]; $link_text = $matches[4][$i]; $content = str_replace($link_match, $link_text.' '.$link_number, $content); $link_url = ((strtolower(substr($link_url,0,7)) != 'http://') && (strtolower(substr($link_url,0,8)) != 'https://')) ? get_option('home') . $link_url : $link_url; $links_summary .= "\n".$link_number.' '.$link_url; } $content = strip_tags($content); $content .= $links_summary; return $content; } function xmlrpc_getposttitle($content) { global $post_default_title; if ( preg_match('/<title>(.+?)<\/title>/is', $content, $matchtitle) ) { $post_title = $matchtitle[0]; $post_title = preg_replace('/<title>/si', '', $post_title); $post_title = preg_replace('/<\/title>/si', '', $post_title); } else { $post_title = $post_default_title; } return $post_title; } function xmlrpc_getpostcategory($content) { global $post_default_category; if ( preg_match('/<category>(.+?)<\/category>/is', $content, $matchcat) ) { $post_category = trim($matchcat[1], ','); $post_category = explode(',', $post_category); } else { $post_category = $post_default_category; } return $post_category; } function xmlrpc_removepostdata($content) { $content = preg_replace('/<title>(.+?)<\/title>/si', '', $content); $content = preg_replace('/<category>(.+?)<\/category>/si', '', $content); $content = trim($content); return $content; } function debug_fopen($filename, $mode) { global $debug; if ( $debug == 1 ) { $fp = fopen($filename, $mode); return $fp; } else { return false; } } function debug_fwrite($fp, $string) { global $debug; if ( $debug == 1 ) { fwrite($fp, $string); } } function debug_fclose($fp) { global $debug; if ( $debug == 1 ) { fclose($fp); } } function do_enclose( $content, $post_ID ) { global $wp_version, $wpdb; include_once (ABSPATH . WPINC . '/class-IXR.php'); $log = debug_fopen(ABSPATH . '/enclosures.log', 'a'); $post_links = array(); debug_fwrite($log, 'BEGIN '.date('YmdHis', time())."\n"); $pung = get_enclosed( $post_ID ); $ltrs = '\w'; $gunk = '/#~:.?+=&%@!\-'; $punc = '.:?\-'; $any = $ltrs . $gunk . $punc; preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp); debug_fwrite($log, 'Post contents:'); debug_fwrite($log, $content."\n"); foreach($post_links_temp[0] as $link_test) { if ( !in_array($link_test, $pung) ) : // If we haven't pung it already $test = parse_url($link_test); if ( isset($test['query']) ) $post_links[] = $link_test; elseif (($test['path'] != '/') && ($test['path'] != '')) $post_links[] = $link_test; endif; } foreach ($post_links as $url) { if ( $url != '' && !$wpdb->get_var("SELECT post_id FROM $wpdb->postmeta WHERE post_id = " . $post_ID . " AND meta_key = 'enclosure' AND meta_value LIKE ('$url%')") ) { if ( $headers = wp_get_http_headers( $url) ) { $len = (int) $headers['content-length']; $type = $wpdb->escape( $headers['content-type'] ); $allowed_types = array( 'video', 'audio' ); if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) { $meta_value = "$url\n$len\n$type\n"; $wpdb->query( "INSERT INTO $wpdb->postmeta ( post_id , meta_key , meta_value ) VALUES ( $post_ID, 'enclosure' , '$meta_value')" ); } } } } } function wp_get_http_headers( $url, $red = 1 ) { global $wp_version; @set_time_limit( 60 ); if ( $red > 5 ) return false; $parts = parse_url( $url ); $file = $parts['path'] . ($parts['query'] ? '?'.$parts['query'] : ''); $host = $parts['host']; if ( !isset( $parts['port'] ) ) $parts['port'] = 80; $head = "HEAD $file HTTP/1.1\r\nHOST: $host\r\nUser-Agent: WordPress/" . $wp_version . "\r\n\r\n"; $fp = @fsockopen($host, $parts['port'], $err_num, $err_msg, 3); if ( !$fp ) return false; $response = ''; fputs( $fp, $head ); while ( !feof( $fp ) && strpos( $response, "\r\n\r\n" ) == false ) $response .= fgets( $fp, 2048 ); fclose( $fp ); preg_match_all('/(.*?): (.*)\r/', $response, $matches); $count = count($matches[1]); for ( $i = 0; $i < $count; $i++) { $key = strtolower($matches[1][$i]); $headers["$key"] = $matches[2][$i]; } preg_match('/.*([0-9]{3}).*/', $response, $return); $headers['response'] = $return[1]; // HTTP response code eg 204, 200, 404 $code = $headers['response']; if ( ('302' == $code || '301' == $code) && isset($headers['location']) ) return wp_get_http_headers( $headers['location'], ++$red ); return $headers; } function is_new_day() { global $day, $previousday; if ( $day != $previousday ) { return(1); } else { return(0); } } function update_post_cache(&$posts) { global $post_cache, $blog_id; if ( !$posts ) return; for ($i = 0; $i < count($posts); $i++) { $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i]; } } function clean_post_cache($id) { global $post_cache, $post_meta_cache, $category_cache, $blog_id; if ( isset( $post_cache[$blog_id][$id] ) ) unset( $post_cache[$blog_id][$id] ); if ( isset ($post_meta_cache[$blog_id][$id] ) ) unset( $post_meta_cache[$blog_id][$id] ); if ( isset( $category_cache[$blog_id][$id]) ) unset ( $category_cache[$blog_id][$id] ); } function update_page_cache(&$pages) { global $page_cache, $blog_id; if ( !$pages ) return; for ($i = 0; $i < count($pages); $i++) { $page_cache[$blog_id][$pages[$i]->ID] = &$pages[$i]; wp_cache_add($pages[$i]->ID, $pages[$i], 'pages'); } } function clean_page_cache($id) { global $page_cache, $blog_id; if ( isset( $page_cache[$blog_id][$id] ) ) unset( $page_cache[$blog_id][$id] ); wp_cache_delete($id, 'pages'); wp_cache_delete( 'all_page_ids', 'pages' ); wp_cache_delete( 'get_pages', 'page' ); } function update_post_category_cache($post_ids) { global $wpdb, $category_cache, $blog_id; if ( empty($post_ids) ) return; if ( is_array($post_ids) ) $post_id_list = implode(',', $post_ids); $post_id_array = (array) explode(',', $post_ids); $count = count( $post_id_array); for ( $i = 0; $i < $count; $i++ ) { $post_id = (int) $post_id_array[ $i ]; if ( isset( $category_cache[$blog_id][$post_id] ) ) { unset( $post_id_array[ $i ] ); continue; } } if ( count( $post_id_array ) == 0 ) return; $post_id_list = join( ',', $post_id_array ); // with already cached stuff removed $dogs = $wpdb->get_results("SELECT post_id, category_id FROM $wpdb->post2cat WHERE post_id IN ($post_id_list)"); if ( empty($dogs) ) return; foreach ($dogs as $catt) $category_cache[$blog_id][$catt->post_id][$catt->category_id] = &get_category($catt->category_id); } function update_post_caches(&$posts) { global $post_cache, $category_cache, $post_meta_cache; global $wpdb, $blog_id; // No point in doing all this work if we didn't match any posts. if ( !$posts ) return; // Get the categories for all the posts for ($i = 0; $i < count($posts); $i++) { $post_id_array[] = $posts[$i]->ID; $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i]; } $post_id_list = implode(',', $post_id_array); update_post_category_cache($post_id_list); update_postmeta_cache($post_id_list); } function update_postmeta_cache($post_id_list = '') { global $wpdb, $post_meta_cache, $blog_id; // We should validate this comma-separated list for the upcoming SQL query $post_id_list = preg_replace('|[^0-9,]|', '', $post_id_list); if ( empty( $post_id_list ) ) return false; // we're marking each post as having its meta cached (with no keys... empty array), to prevent posts with no meta keys from being queried again // any posts that DO have keys will have this empty array overwritten with a proper array, down below $post_id_array = (array) explode(',', $post_id_list); $count = count( $post_id_array); for ( $i = 0; $i < $count; $i++ ) { $post_id = (int) $post_id_array[ $i ]; if ( isset( $post_meta_cache[$blog_id][$post_id] ) ) { // If the meta is already cached unset( $post_id_array[ $i ] ); continue; } $post_meta_cache[$blog_id][$post_id] = array(); } if ( count( $post_id_array ) == 0 ) return; $post_id_list = join( ',', $post_id_array ); // with already cached stuff removeds // Get post-meta info if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN($post_id_list) ORDER BY post_id, meta_key", ARRAY_A) ) { // Change from flat structure to hierarchical: if ( !isset($post_meta_cache) ) $post_meta_cache[$blog_id] = array(); foreach ($meta_list as $metarow) { $mpid = (int) $metarow['post_id']; $mkey = $metarow['meta_key']; $mval = $metarow['meta_value']; // Force subkeys to be array type: if ( !isset($post_meta_cache[$blog_id][$mpid]) || !is_array($post_meta_cache[$blog_id][$mpid]) ) $post_meta_cache[$blog_id][$mpid] = array(); if ( !isset($post_meta_cache[$blog_id][$mpid]["$mkey"]) || !is_array($post_meta_cache[$blog_id][$mpid]["$mkey"]) ) $post_meta_cache[$blog_id][$mpid]["$mkey"] = array(); // Add a value to the current pid/key: $post_meta_cache[$blog_id][$mpid][$mkey][] = $mval; } } } function update_category_cache() { return true; } function clean_category_cache($id) { wp_cache_delete($id, 'category'); wp_cache_delete('all_category_ids', 'category'); wp_cache_delete('get_categories', 'category'); delete_option('category_children'); } /* add_query_arg: Returns a modified querystring by adding a single key & value or an associative array. Setting a key value to emptystring removes the key. Omitting oldquery_or_uri uses the $_SERVER value. Parameters: add_query_arg(newkey, newvalue, oldquery_or_uri) or add_query_arg(associative_array, oldquery_or_uri) */ function add_query_arg() { $ret = ''; if ( is_array(func_get_arg(0)) ) { if ( @func_num_args() < 2 || false == @func_get_arg(1) ) $uri = $_SERVER['REQUEST_URI']; else $uri = @func_get_arg(1); } else { if ( @func_num_args() < 3 || false == @func_get_arg(2) ) $uri = $_SERVER['REQUEST_URI']; else $uri = @func_get_arg(2); } //printf ("1{" . $uri . "}" ); if ( $frag = strstr($uri, '#') ) $uri = substr($uri, 0, -strlen($frag)); else $frag = ''; if ( preg_match('|^https?://|i', $uri, $matches) ) { $protocol = $matches[0]; $uri = substr($uri, strlen($protocol)); } else { $protocol = ''; } if (strpos($uri, '?') != false) { $parts = explode('?', $uri, 2); if ( 1 == count($parts) ) { $base = '?'; $query = $parts[0]; } else { $base = $parts[0] . '?'; $query = $parts[1]; } } elseif (!empty($protocol) || strpos($uri, '/') != false) { $base = $uri . "?"; $query = ''; } else { $base = '?'; $query = $uri; } wp_parse_str($query, $qs); $qs = urlencode_deep($qs); if ( is_array(func_get_arg(0)) ) { $kayvees = func_get_arg(0); $qs = array_merge($qs, $kayvees); } else { $qs[func_get_arg(0)] = func_get_arg(1); } foreach($qs as $k => $v) { if ( $v != FALSE ) { if ( $ret != '' ) $ret .= '&'; if ( empty($v) && !preg_match('|[?&]' . preg_quote($k, '|') . '=|', $query) ) $ret .= $k; else $ret .= "$k=$v"; } } //printf ("2{" . $ret . "}" ); $ret = trim($ret, '?'); //printf ("3{" . $ret . "}" ); $ret = $protocol . $base . $ret . $frag; $ret = rtrim($ret, '?'); //printf ("4{" . $ret . "}" ); return $ret; } /* remove_query_arg: Returns a modified querystring by removing a single key or an array of keys. Omitting oldquery_or_uri uses the $_SERVER value. Parameters: remove_query_arg(removekey, [oldquery_or_uri]) or remove_query_arg(removekeyarray, [oldquery_or_uri]) */ function remove_query_arg($key, $query=FALSE) { if ( is_array($key) ) { // removing multiple keys foreach ( (array) $key as $k ) $query = add_query_arg($k, FALSE, $query); return $query; } return add_query_arg($key, FALSE, $query); } function add_magic_quotes($array) { global $wpdb; foreach ($array as $k => $v) { if ( is_array($v) ) { $array[$k] = add_magic_quotes($v); } else { $array[$k] = $wpdb->escape($v); } } return $array; } function wp_remote_fopen( $uri ) { $timeout = 10; $parsed_url = @parse_url($uri); if ( !$parsed_url || !is_array($parsed_url) ) return false; if ( !isset($parsed_url['scheme']) || !in_array($parsed_url['scheme'], array('http','https')) ) $uri = 'http://' . $uri; if ( ini_get('allow_url_fopen') ) { $fp = @fopen( $uri, 'r' ); if ( !$fp ) return false; //stream_set_timeout($fp, $timeout); // Requires php 4.3 $linea = ''; while( $remote_read = fread($fp, 4096) ) $linea .= $remote_read; fclose($fp); return $linea; } else if ( function_exists('curl_init') ) { $handle = curl_init(); curl_setopt ($handle, CURLOPT_URL, $uri); curl_setopt ($handle, CURLOPT_CONNECTTIMEOUT, 1); curl_setopt ($handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($handle, CURLOPT_TIMEOUT, $timeout); $buffer = curl_exec($handle); curl_close($handle); return $buffer; } else { return false; } } function wp($query_vars = '') { global $wp; $wp->main($query_vars); } function status_header( $header ) { if ( 200 == $header ) $text = 'OK'; elseif ( 301 == $header ) $text = 'Moved Permanently'; elseif ( 302 == $header ) $text = 'Moved Temporarily'; elseif ( 304 == $header ) $text = 'Not Modified'; elseif ( 404 == $header ) $text = 'Not Found'; elseif ( 410 == $header ) $text = 'Gone'; $protocol = $_SERVER["SERVER_PROTOCOL"]; if ( ('HTTP/1.1' != $protocol) && ('HTTP/1.0' != $protocol) ) $protocol = 'HTTP/1.0'; $status_header = "$protocol $header $text"; $status_header = apply_filters('status_header', $status_header, $header, $text, $protocol); if ( version_compare( phpversion(), '4.3.0', '>=' ) ) { return @header( $status_header, true, $header ); } else { return @header( $status_header ); } } function nocache_headers() { @ header('Expires: Wed, 11 Jan 1984 05:00:00 GMT'); @ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); @ header('Cache-Control: no-cache, must-revalidate, max-age=0'); @ header('Pragma: no-cache'); } function cache_javascript_headers() { $expiresOffset = 864000; // 10 days header("Content-type: text/javascript; charset=" . get_bloginfo('charset')); header("Vary: Accept-Encoding"); // Handle proxies header("Expires: " . gmdate("D, d M Y H:i:s", time() + $expiresOffset) . " GMT"); } function get_num_queries() { global $wpdb; return $wpdb->num_queries; } function bool_from_yn($yn) { if ($yn == 'Y') return 1; return 0; } function do_feed() { global $wp_query; $feed = get_query_var('feed'); // Remove the pad, if present. $feed = preg_replace('/^_+/', '', $feed); if ( $feed == '' || $feed == 'feed' ) $feed = 'rss2'; $hook = 'do_feed_' . $feed; do_action($hook, $wp_query->is_comment_feed); } function do_feed_rdf() { load_template(ABSPATH . WPINC . '/feed-rdf.php'); } function do_feed_rss() { load_template(ABSPATH . WPINC . '/feed-rss.php'); } function do_feed_rss2($for_comments) { if ( $for_comments ) { load_template(ABSPATH . WPINC . '/feed-rss2-comments.php'); } else { load_template(ABSPATH . WPINC . '/feed-rss2.php'); } } function do_feed_atom($for_comments) { if ($for_comments) { load_template(ABSPATH . WPINC . '/feed-atom-comments.php'); } else { load_template(ABSPATH . WPINC . '/feed-atom.php'); } } function do_robots() { header('Content-type: text/plain; charset=utf-8'); do_action('do_robotstxt'); if ( '0' == get_option('blog_public') ) { echo "User-agent: *\n"; echo "Disallow: /\n"; } else { echo "User-agent: *\n"; echo "Disallow:\n"; } } function is_blog_installed() { global $wpdb; $wpdb->hide_errors(); $installed = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'"); $wpdb->show_errors(); $install_status = !empty( $installed ) ? TRUE : FALSE; return $install_status; } function wp_nonce_url($actionurl, $action = -1) { return wp_specialchars(add_query_arg('_wpnonce', wp_create_nonce($action), $actionurl)); } function wp_nonce_field($action = -1, $name = "_wpnonce", $referer = true) { $name = attribute_escape($name); echo '<input type="hidden" name="' . $name . '" value="' . wp_create_nonce($action) . '" />'; if ( $referer ) wp_referer_field(); } function wp_referer_field() { $ref = attribute_escape($_SERVER['REQUEST_URI']); echo '<input type="hidden" name="_wp_http_referer" value="'. $ref . '" />'; if ( wp_get_original_referer() ) { $original_ref = attribute_escape(stripslashes(wp_get_original_referer())); echo '<input type="hidden" name="_wp_original_http_referer" value="'. $original_ref . '" />'; } } function wp_original_referer_field() { echo '<input type="hidden" name="_wp_original_http_referer" value="' . attribute_escape(stripslashes($_SERVER['REQUEST_URI'])) . '" />'; } function wp_get_referer() { foreach ( array($_REQUEST['_wp_http_referer'], $_SERVER['HTTP_REFERER']) as $ref ) if ( !empty($ref) ) return $ref; return false; } function wp_get_original_referer() { if ( !empty($_REQUEST['_wp_original_http_referer']) ) return $_REQUEST['_wp_original_http_referer']; return false; } function wp_mkdir_p($target) { // from php.net/mkdir user contributed notes if (file_exists($target)) { if (! @ is_dir($target)) return false; else return true; } // Attempting to create the directory may clutter up our display. if (@ mkdir($target)) { $stat = @ stat(dirname($target)); $dir_perms = $stat['mode'] & 0007777; // Get the permission bits. @ chmod($target, $dir_perms); return true; } else { if ( is_dir(dirname($target)) ) return false; } // If the above failed, attempt to create the parent node, then try again. if (wp_mkdir_p(dirname($target))) return wp_mkdir_p($target); return false; } // Returns an array containing the current upload directory's path and url, or an error message. function wp_upload_dir() { $siteurl = get_option('siteurl'); //prepend ABSPATH to $dir and $siteurl to $url if they're not already there $path = str_replace(ABSPATH, '', trim(get_option('upload_path'))); $dir = ABSPATH . $path; $url = trailingslashit($siteurl) . $path; if ( $dir == ABSPATH ) { //the option was empty $dir = ABSPATH . 'wp-content/uploads'; } if ( defined('UPLOADS') ) { $dir = ABSPATH . UPLOADS; $url = trailingslashit($siteurl) . UPLOADS; } if ( get_option('uploads_use_yearmonth_folders')) { // Generate the yearly and monthly dirs $time = current_time( 'mysql' ); $y = substr( $time, 0, 4 ); $m = substr( $time, 5, 2 ); $dir = $dir . "/$y/$m"; $url = $url . "/$y/$m"; } // Make sure we have an uploads dir if ( ! wp_mkdir_p( $dir ) ) { $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), $dir); return array('error' => $message); } $uploads = array('path' => $dir, 'url' => $url, 'error' => false); return apply_filters('upload_dir', $uploads); } function wp_upload_bits($name, $type, $bits) { if ( empty($name) ) return array('error' => __("Empty filename")); $wp_filetype = wp_check_filetype($name); if ( !$wp_filetype['ext'] ) return array('error' => __("Invalid file type")); $upload = wp_upload_dir(); if ( $upload['error'] != false ) return $upload; $number = ''; $filename = $name; $path_parts = pathinfo($filename); $ext = $path_parts['extension']; if ( empty($ext) ) $ext = ''; else $ext = ".$ext"; while ( file_exists($upload['path'] . "/$filename") ) { if ( '' == "$number$ext" ) $filename = $filename . ++$number . $ext; else $filename = str_replace("$number$ext", ++$number . $ext, $filename); } $new_file = $upload['path'] . "/$filename"; if ( ! wp_mkdir_p( dirname($new_file) ) ) { $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file)); return array('error' => $message); } $ifp = @ fopen($new_file, 'wb'); if ( ! $ifp ) return array('error' => sprintf(__('Could not write file %s'), $new_file)); $success = @ fwrite($ifp, $bits); fclose($ifp); // Set correct file permissions $stat = @ stat(dirname($new_file)); $perms = $stat['mode'] & 0007777; $perms = $perms & 0000666; @ chmod($new_file, $perms); // Compute the URL $url = $upload['url'] . "/$filename"; return array('file' => $new_file, 'url' => $url, 'error' => false); } function wp_check_filetype($filename, $mimes = null) { // Accepted MIME types are set here as PCRE unless provided. $mimes = is_array($mimes) ? $mimes : apply_filters('upload_mimes', array ( 'jpg|jpeg|jpe' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', 'bmp' => 'image/bmp', 'tif|tiff' => 'image/tiff', 'ico' => 'image/x-icon', 'asf|asx|wax|wmv|wmx' => 'video/asf', 'avi' => 'video/avi', 'mov|qt' => 'video/quicktime', 'mpeg|mpg|mpe' => 'video/mpeg', 'txt|c|cc|h' => 'text/plain', 'rtx' => 'text/richtext', 'css' => 'text/css', 'htm|html' => 'text/html', 'mp3|mp4' => 'audio/mpeg', 'ra|ram' => 'audio/x-realaudio', 'wav' => 'audio/wav', 'ogg' => 'audio/ogg', 'mid|midi' => 'audio/midi', 'wma' => 'audio/wma', 'rtf' => 'application/rtf', 'js' => 'application/javascript', 'pdf' => 'application/pdf', 'doc' => 'application/msword', 'pot|pps|ppt' => 'application/vnd.ms-powerpoint', 'wri' => 'application/vnd.ms-write', 'xla|xls|xlt|xlw' => 'application/vnd.ms-excel', 'mdb' => 'application/vnd.ms-access', 'mpp' => 'application/vnd.ms-project', 'swf' => 'application/x-shockwave-flash', 'class' => 'application/java', 'tar' => 'application/x-tar', 'zip' => 'application/zip', 'gz|gzip' => 'application/x-gzip', 'exe' => 'application/x-msdownload' )); $type = false; $ext = false; foreach ($mimes as $ext_preg => $mime_match) { $ext_preg = '!\.(' . $ext_preg . ')$!i'; if ( preg_match($ext_preg, $filename, $ext_matches) ) { $type = $mime_match; $ext = $ext_matches[1]; break; } } return compact('ext', 'type'); } function wp_explain_nonce($action) { if ( $action != -1 && preg_match('/([a-z]+)-([a-z]+)(_(.+))?/', $action, $matches) ) { $verb = $matches[1]; $noun = $matches[2]; $trans = array(); $trans['update']['attachment'] = array(__('Are you sure you want to edit this attachment: "%s"?'), 'get_the_title'); $trans['add']['category'] = array(__('Are you sure you want to add this category?'), false); $trans['delete']['category'] = array(__('Are you sure you want to delete this category: "%s"?'), 'get_catname'); $trans['update']['category'] = array(__('Are you sure you want to edit this category: "%s"?'), 'get_catname'); $trans['delete']['comment'] = array(__('Are you sure you want to delete this comment: "%s"?'), 'use_id'); $trans['unapprove']['comment'] = array(__('Are you sure you want to unapprove this comment: "%s"?'), 'use_id'); $trans['approve']['comment'] = array(__('Are you sure you want to approve this comment: "%s"?'), 'use_id'); $trans['update']['comment'] = array(__('Are you sure you want to edit this comment: "%s"?'), 'use_id'); $trans['bulk']['comments'] = array(__('Are you sure you want to bulk modify comments?'), false); $trans['moderate']['comments'] = array(__('Are you sure you want to moderate comments?'), false); $trans['add']['bookmark'] = array(__('Are you sure you want to add this link?'), false); $trans['delete']['bookmark'] = array(__('Are you sure you want to delete this link: "%s"?'), 'use_id'); $trans['update']['bookmark'] = array(__('Are you sure you want to edit this link: "%s"?'), 'use_id'); $trans['bulk']['bookmarks'] = array(__('Are you sure you want to bulk modify links?'), false); $trans['add']['page'] = array(__('Are you sure you want to add this page?'), false); $trans['delete']['page'] = array(__('Are you sure you want to delete this page: "%s"?'), 'get_the_title'); $trans['update']['page'] = array(__('Are you sure you want to edit this page: "%s"?'), 'get_the_title'); $trans['edit']['plugin'] = array(__('Are you sure you want to edit this plugin file: "%s"?'), 'use_id'); $trans['activate']['plugin'] = array(__('Are you sure you want to activate this plugin: "%s"?'), 'use_id'); $trans['deactivate']['plugin'] = array(__('Are you sure you want to deactivate this plugin: "%s"?'), 'use_id'); $trans['add']['post'] = array(__('Are you sure you want to add this post?'), false); $trans['delete']['post'] = array(__('Are you sure you want to delete this post: "%s"?'), 'get_the_title'); $trans['update']['post'] = array(__('Are you sure you want to edit this post: "%s"?'), 'get_the_title'); $trans['add']['user'] = array(__('Are you sure you want to add this user?'), false); $trans['delete']['users'] = array(__('Are you sure you want to delete users?'), false); $trans['bulk']['users'] = array(__('Are you sure you want to bulk modify users?'), false); $trans['update']['user'] = array(__('Are you sure you want to edit this user: "%s"?'), 'get_author_name'); $trans['update']['profile'] = array(__('Are you sure you want to modify the profile for: "%s"?'), 'get_author_name'); $trans['update']['options'] = array(__('Are you sure you want to edit your settings?'), false); $trans['update']['permalink'] = array(__('Are you sure you want to change your permalink structure to: %s?'), 'use_id'); $trans['edit']['file'] = array(__('Are you sure you want to edit this file: "%s"?'), 'use_id'); $trans['edit']['theme'] = array(__('Are you sure you want to edit this theme file: "%s"?'), 'use_id'); $trans['switch']['theme'] = array(__('Are you sure you want to switch to this theme: "%s"?'), 'use_id'); if ( isset($trans[$verb][$noun]) ) { if ( !empty($trans[$verb][$noun][1]) ) { $lookup = $trans[$verb][$noun][1]; $object = $matches[4]; if ( 'use_id' != $lookup ) $object = call_user_func($lookup, $object); return sprintf($trans[$verb][$noun][0], $object); } else { return $trans[$verb][$noun][0]; } } } return apply_filters( 'explain_nonce_' . $verb . '-' . $noun, __('Are you sure you want to do this?'), $matches[4] ); } function wp_nonce_ays($action) { global $pagenow, $menu, $submenu, $parent_file, $submenu_file; $adminurl = get_option('siteurl') . '/wp-admin'; if ( wp_get_referer() ) $adminurl = clean_url(wp_get_referer()); $title = __('WordPress Confirmation'); // Remove extra layer of slashes. $_POST = stripslashes_deep($_POST ); if ( $_POST ) { $q = http_build_query($_POST); $q = explode( ini_get('arg_separator.output'), $q); $html .= "\t<form method='post' action='" . attribute_escape($pagenow) . "'>\n"; foreach ( (array) $q as $a ) { $v = substr(strstr($a, '='), 1); $k = substr($a, 0, -(strlen($v)+1)); $html .= "\t\t<input type='hidden' name='" . attribute_escape(urldecode($k)) . "' value='" . attribute_escape(urldecode($v)) . "' />\n"; } $html .= "\t\t<input type='hidden' name='_wpnonce' value='" . wp_create_nonce($action) . "' />\n"; $html .= "\t\t<div id='message' class='confirm fade'>\n\t\t<p>" . wp_specialchars(wp_explain_nonce($action)) . "</p>\n\t\t<p><a href='$adminurl'>" . __('No') . "</a> <input type='submit' value='" . __('Yes') . "' /></p>\n\t\t</div>\n\t</form>\n"; } else { $html .= "\t<div id='message' class='confirm fade'>\n\t<p>" . wp_specialchars(wp_explain_nonce($action)) . "</p>\n\t<p><a href='$adminurl'>" . __('No') . "</a> <a href='" . clean_url(add_query_arg( '_wpnonce', wp_create_nonce($action), $_SERVER['REQUEST_URI'] )) . "'>" . __('Yes') . "</a></p>\n\t</div>\n"; } $html .= "</body>\n</html>"; wp_die($html, $title); } function wp_die( $message, $title = '' ) { global $wp_locale; if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { if ( empty($title) ) { $error_data = $message->get_error_data(); if ( is_array($error_data) && isset($error_data['title']) ) $title = $error_data['title']; } $errors = $message->get_error_messages(); switch ( count($errors) ) : case 0 : $message = ''; break; case 1 : $message = "<p>{$errors[0]}</p>"; break; default : $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>"; break; endswitch; } elseif ( is_string($message) ) { $message = "<p>$message</p>"; } if (strpos($_SERVER['PHP_SELF'], 'wp-admin') != false) $admin_dir = ''; else $admin_dir = 'wp-admin/'; if ( !did_action('admin_head') ) : header('Content-Type: text/html; charset=utf-8'); if ( empty($title) ) $title = __('WordPress › Error'); ?> <!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" <?php if ( function_exists('language_attributes') ) language_attributes(); ?>> <head> <title><?php echo $title ?> text_direction) ) : ?>

    WordPress

    text_direction) { echo 'directionality : "rtl" ,'; echo 'theme_advanced_toolbar_align : "right" ,'; } } function _mce_load_rtl_plugin($input) { global $wp_locale; if ('rtl' == $wp_locale->text_direction) $input[] = 'directionality'; return $input; } function _mce_add_direction_buttons($input) { global $wp_locale; if ('rtl' == $wp_locale->text_direction) { $new_buttons = array('separator', 'ltr', 'rtl'); $input = array_merge($input, $new_buttons); } return $input; } function smilies_init() { global $wpsmiliestrans, $wp_smiliessearch, $wp_smiliesreplace; // don't bother setting up smilies if they are disabled if ( !get_option('use_smilies') ) return; if (!isset($wpsmiliestrans)) { $wpsmiliestrans = array( ':mrgreen:' => 'icon_mrgreen.gif', ':neutral:' => 'icon_neutral.gif', ':twisted:' => 'icon_twisted.gif', ':arrow:' => 'icon_arrow.gif', ':shock:' => 'icon_eek.gif', ':smile:' => 'icon_smile.gif', ':???:' => 'icon_confused.gif', ':cool:' => 'icon_cool.gif', ':evil:' => 'icon_evil.gif', ':grin:' => 'icon_biggrin.gif', ':idea:' => 'icon_idea.gif', ':oops:' => 'icon_redface.gif', ':razz:' => 'icon_razz.gif', ':roll:' => 'icon_rolleyes.gif', ':wink:' => 'icon_wink.gif', ':cry:' => 'icon_cry.gif', ':eek:' => 'icon_surprised.gif', ':lol:' => 'icon_lol.gif', ':mad:' => 'icon_mad.gif', ':sad:' => 'icon_sad.gif', '8-)' => 'icon_cool.gif', '8-O' => 'icon_eek.gif', ':-(' => 'icon_sad.gif', ':-)' => 'icon_smile.gif', ':-?' => 'icon_confused.gif', ':-D' => 'icon_biggrin.gif', ':-P' => 'icon_razz.gif', ':-o' => 'icon_surprised.gif', ':-x' => 'icon_mad.gif', ':-|' => 'icon_neutral.gif', ';-)' => 'icon_wink.gif', '8)' => 'icon_cool.gif', '8O' => 'icon_eek.gif', ':(' => 'icon_sad.gif', ':)' => 'icon_smile.gif', ':?' => 'icon_confused.gif', ':D' => 'icon_biggrin.gif', ':P' => 'icon_razz.gif', ':o' => 'icon_surprised.gif', ':x' => 'icon_mad.gif', ':|' => 'icon_neutral.gif', ';)' => 'icon_wink.gif', ':!:' => 'icon_exclaim.gif', ':?:' => 'icon_question.gif', ); } $siteurl = get_option('siteurl'); foreach ( (array) $wpsmiliestrans as $smiley => $img ) { $wp_smiliessearch[] = '/(\s|^)'.preg_quote($smiley, '/').'(\s|$)/'; $smiley_masked = htmlspecialchars(trim($smiley), ENT_QUOTES); $wp_smiliesreplace[] = " $smiley_masked "; } } function wp_parse_args( $args, $defaults = '' ) { if ( is_array( $args ) ) $r =& $args; else wp_parse_str( $args, $r ); if ( is_array( $defaults ) ) return array_merge( $defaults, $r ); else return $r; } function wp_maybe_load_widgets() { if ( !function_exists( 'dynamic_sidebar' ) ) { require_once ABSPATH . WPINC . '/widgets.php'; add_action( '_admin_menu', 'wp_widgets_add_menu' ); } } function wp_widgets_add_menu() { global $submenu; $submenu['themes.php'][7] = array( __( 'Widgets' ), 'switch_themes', 'widgets.php' ); ksort($submenu['themes.php'], SORT_NUMERIC); } // For PHP 5.2, make sure all output buffers are flushed // before our singletons our destroyed. function wp_ob_end_flush_all() { while ( @ob_end_flush() ); } ?> *wordpress/wp-includes/general-template.php' . __('Login') . ''; else $link = '' . __('Logout') . ''; echo apply_filters('loginout', $link); } function wp_register( $before = '
  • ', $after = '
  • ' ) { if ( ! is_user_logged_in() ) { if ( get_option('users_can_register') ) $link = $before . '' . __('Register') . '' . $after; else $link = ''; } else { $link = $before . '' . __('Site Admin') . '' . $after; } echo apply_filters('register', $link); } function wp_meta() { do_action('wp_meta'); } function bloginfo($show='') { $info = get_bloginfo($show); // Don't filter URL's. if (strpos($show, 'url') == false && strpos($show, 'directory') == false && strpos($show, 'home') == false) { $info = apply_filters('bloginfo', $info, $show); $info = convert_chars($info); } else { $info = apply_filters('bloginfo_url', $info, $show); } echo $info; } /** * Note: some of these values are DEPRECATED. Meaning they could be * taken out at any time and shouldn't be relied upon. Options * without "// DEPRECATED" are the preferred and recommended ways * to get the information. */ function get_bloginfo($show='') { switch($show) { case 'url' : case 'home' : // DEPRECATED case 'siteurl' : // DEPRECATED $output = get_option('home'); break; case 'wpurl' : $output = get_option('siteurl'); break; case 'description': $output = get_option('blogdescription'); break; case 'rdf_url': $output = get_feed_link('rdf'); break; case 'rss_url': $output = get_feed_link('rss'); break; case 'rss2_url': $output = get_feed_link('rss2'); break; case 'atom_url': $output = get_feed_link('atom'); break; case 'comments_atom_url': $output = get_feed_link('comments_atom'); break; case 'comments_rss2_url': $output = get_feed_link('comments_rss2'); break; case 'pingback_url': $output = get_option('siteurl') .'/xmlrpc.php'; break; case 'stylesheet_url': $output = get_stylesheet_uri(); break; case 'stylesheet_directory': $output = get_stylesheet_directory_uri(); break; case 'template_directory': case 'template_url': $output = get_template_directory_uri(); break; case 'admin_email': $output = get_option('admin_email'); break; case 'charset': $output = get_option('blog_charset'); if ('' == $output) $output = 'UTF-8'; break; case 'html_type' : $output = get_option('html_type'); break; case 'version': global $wp_version; $output = $wp_version; break; case 'language': $output = get_locale(); $output = str_replace('_', '-', $output); break; case 'text_direction': global $wp_locale; $output = $wp_locale->text_direction; break; case 'name': default: $output = get_option('blogname'); break; } return $output; } function wp_title($sep = '»', $display = true) { global $wpdb, $wp_locale, $wp_query; $cat = get_query_var('cat'); $p = get_query_var('p'); $name = get_query_var('name'); $category_name = get_query_var('category_name'); $author = get_query_var('author'); $author_name = get_query_var('author_name'); $m = get_query_var('m'); $year = get_query_var('year'); $monthnum = get_query_var('monthnum'); $day = get_query_var('day'); $title = ''; // If there's a category if ( !empty($cat) ) { // category exclusion if ( !stristr($cat,'-') ) $title = apply_filters('single_cat_title', get_the_category_by_ID($cat)); } elseif ( !empty($category_name) ) { if ( stristr($category_name,'/') ) { $category_name = explode('/',$category_name); if ( $category_name[count($category_name)-1] ) $category_name = $category_name[count($category_name)-1]; // no trailing slash else $category_name = $category_name[count($category_name)-2]; // there was a trailling slash } $title = $wpdb->get_var("SELECT cat_name FROM $wpdb->categories WHERE category_nicename = '$category_name'"); $title = apply_filters('single_cat_title', $title); } // If there's an author if ( !empty($author) ) { $title = get_userdata($author); $title = $title->display_name; } if ( !empty($author_name) ) { // We do a direct query here because we don't cache by nicename. $title = $wpdb->get_var("SELECT display_name FROM $wpdb->users WHERE user_nicename = '$author_name'"); } // If there's a month if ( !empty($m) ) { $my_year = substr($m, 0, 4); $my_month = $wp_locale->get_month(substr($m, 4, 2)); $my_day = intval(substr($m, 6, 2)); $title = "$my_year" . ($my_month ? "$sep $my_month" : "") . ($my_day ? "$sep $my_day" : ""); } if ( !empty($year) ) { $title = $year; if ( !empty($monthnum) ) $title .= " $sep " . $wp_locale->get_month($monthnum); if ( !empty($day) ) $title .= " $sep " . zeroise($day, 2); } // If there is a post if ( is_single() || is_page() ) { $post = $wp_query->get_queried_object(); $title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ); } $prefix = ''; if ( !empty($title) ) $prefix = " $sep "; $title = $prefix . $title; $title = apply_filters('wp_title', $title, $sep); // Send it out if ( $display ) echo $title; else return $title; } function single_post_title($prefix = '', $display = true) { global $wpdb; $p = get_query_var('p'); $name = get_query_var('name'); if ( intval($p) || '' != $name ) { if ( !$p ) $p = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$name'"); $post = & get_post($p); $title = $post->post_title; $title = apply_filters('single_post_title', $title); if ( $display ) echo $prefix.strip_tags($title); else return strip_tags($title); } } function single_cat_title($prefix = '', $display = true ) { $cat = intval( get_query_var('cat') ); if ( !empty($cat) && !(strtoupper($cat) == 'ALL') ) { $my_cat_name = apply_filters('single_cat_title', get_the_category_by_ID($cat)); if ( !empty($my_cat_name) ) { if ( $display ) echo $prefix.strip_tags($my_cat_name); else return strip_tags($my_cat_name); } } } function single_month_title($prefix = '', $display = true ) { global $wp_locale; $m = get_query_var('m'); $year = get_query_var('year'); $monthnum = get_query_var('monthnum'); if ( !empty($monthnum) && !empty($year) ) { $my_year = $year; $my_month = $wp_locale->get_month($monthnum); } elseif ( !empty($m) ) { $my_year = substr($m, 0, 4); $my_month = $wp_locale->get_month(substr($m, 4, 2)); } if ( empty($my_month) ) return false; $result = $prefix . $my_month . $prefix . $my_year; if ( !$display ) return $result; echo $result; } /* link navigation hack by Orien http://icecode.com/ */ function get_archives_link($url, $text, $format = 'html', $before = '', $after = '') { $text = wptexturize($text); $title_text = attribute_escape($text); $url = clean_url($url); if ('link' == $format) return "\t\n"; elseif ('option' == $format) return "\t\n"; elseif ('html' == $format) return "\t
  • $before$text$after
  • \n"; else // custom return "\t$before$text$after\n"; } function wp_get_archives($args = '') { global $wp_locale, $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('type' => 'monthly', 'limit' => '', 'format' => 'html', 'before' => '', 'after' => '', 'show_post_count' => false); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); if ( '' == $type ) $type = 'monthly'; // if ( '' != $limit ) { // $limit = (int) $limit; // $limit = ' LIMIT '.$limit; // } // this is what will separate dates on weekly archive links $archive_week_separator = '–'; // over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride $archive_date_format_over_ride = 0; // options for daily archive (only if you over-ride the general date format) $archive_day_date_format = 'Y/m/d'; // options for weekly archive (only if you over-ride the general date format) $archive_week_start_date_format = 'Y/m/d'; $archive_week_end_date_format = 'Y/m/d'; if ( !$archive_date_format_over_ride ) { $archive_day_date_format = get_option('date_format'); $archive_week_start_date_format = get_option('date_format'); $archive_week_end_date_format = get_option('date_format'); } $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); //filters $where = apply_filters('getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r ); $join = apply_filters('getarchives_join', "", $r); if ( 'monthly' == $type ) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, count(post_date) as posts FROM $wpdb->posts $join $where GROUP BY post_date ORDER BY post_date DESC"); // . $limit if ( $arcresults ) { $afterafter = $after; foreach ( $arcresults as $arcresult ) { $url = get_month_link($arcresult->year, $arcresult->month); $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year); if ( $show_post_count ) $after = ' ('.$arcresult->posts.')' . $afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } elseif ('yearly' == $type) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, count(post_date) as posts FROM $wpdb->posts $join $where GROUP BY post_date ORDER BY post_date DESC" ); // . $limit if ($arcresults) { $afterafter = $after; foreach ($arcresults as $arcresult) { $url = get_year_link($arcresult->year); $text = sprintf('%d', $arcresult->year); if ($show_post_count) $after = ' ('.$arcresult->posts.')' . $afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } elseif ( 'daily' == $type ) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, DAYOFMONTH(post_date) AS dayofmonth, count(post_date) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date DESC"); // . $limit if ( $arcresults ) { $afterafter = $after; foreach ( $arcresults as $arcresult ) { $url = get_day_link($arcresult->year, $arcresult->month, $arcresult->dayofmonth); $date = sprintf('%1$d-%2$02d-%3$02d 00:00:00', $arcresult->year, $arcresult->month, $arcresult->dayofmonth); $text = mysql2date($archive_day_date_format, $date); if ($show_post_count) $after = ' ('.$arcresult->posts.')'.$afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } elseif ( 'weekly' == $type ) { $start_of_week = get_option('start_of_week'); $arcresults = $wpdb->get_results("SELECT DISTINCT WEEK(post_date, $start_of_week) AS week, YEAR(post_date) AS yr, DATE_FORMAT(post_date, '%Y-%m-%d') AS yyyymmdd, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY WEEK(post_date, $start_of_week), YEAR(post_date) ORDER BY post_date DESC"); // .$limit $arc_w_last = ''; $afterafter = $after; if ( $arcresults ) { foreach ( $arcresults as $arcresult ) { if ( $arcresult->week != $arc_w_last ) { $arc_year = $arcresult->yr; $arc_w_last = $arcresult->week; $arc_week = get_weekstartend($arcresult->yyyymmdd, get_option('start_of_week')); $arc_week_start = date_i18n($archive_week_start_date_format, $arc_week['start']); $arc_week_end = date_i18n($archive_week_end_date_format, $arc_week['end']); $url = sprintf('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', get_option('home'), '', '?', '=', $arc_year, '&', '=', $arcresult->week); $text = $arc_week_start . $archive_week_separator . $arc_week_end; if ($show_post_count) $after = ' ('.$arcresult->posts.')'.$afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } } elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) { ('alpha' == $type) ? $orderby = "post_title ASC " : $orderby = "post_date DESC "; $arcresults = $wpdb->get_results("SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby"); // $limit if ( $arcresults ) { foreach ( $arcresults as $arcresult ) { if ( $arcresult->post_date != '1900-01-01 00:00:00' ) { $url = get_permalink($arcresult); $arc_title = $arcresult->post_title; if ( $arc_title ) $text = strip_tags(apply_filters('the_title', $arc_title)); else $text = $arcresult->ID; echo get_archives_link($url, $text, $format, $before, $after); } } } } } // Used in get_calendar function calendar_week_mod($num) { $base = 7; return ($num - $base*floor($num/$base)); } function get_calendar($initial = true) { global $wpdb, $m, $monthnum, $year, $timedifference, $wp_locale, $posts; $key = md5( $m . $monthnum . $year ); if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) { if ( isset( $cache[ $key ] ) ) { echo $cache[ $key ]; return; } } ob_start(); // Quick check. If we have no posts at all, abort! if ( !$posts ) { $gotsome = $wpdb->get_var("SELECT ID from $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC"); // LIMIT 1 if ( !$gotsome ) return; } if ( isset($_GET['w']) ) $w = ''.intval($_GET['w']); // week_begins = 0 stands for Sunday $week_begins = intval(get_option('start_of_week')); $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); // Let's figure out when we are if ( !empty($monthnum) && !empty($year) ) { $thismonth = ''.zeroise(intval($monthnum), 2); $thisyear = ''.intval($year); } elseif ( !empty($w) ) { // We need to get the month from MySQL $thisyear = ''.intval(substr($m, 0, 4)); $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's $thismonth = $wpdb->get_var("SELECT month(dateadd('day', " . $d . ", stringdate('" . $thisyear . ".01.01') ) )"); } elseif ( !empty($m) ) { $calendar = substr($m, 0, 6); $thisyear = ''.intval(substr($m, 0, 4)); if ( strlen($m) < 6 ) $thismonth = '01'; else $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2); } else { $thisyear = gmdate('Y', current_time('timestamp')); $thismonth = gmdate('m', current_time('timestamp')); } $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); // Get the next and previous month and year with at least one post $previous = $wpdb->get_row("SELECT DISTINCT MONTH(stringdate(post_date)) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date < stringdate('$thisyear-$thismonth-01') AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC"); //LIMIT 1 $next = $wpdb->get_row("SELECT DISTINCT MONTH(stringdate(post_date)) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date > stringdate('$thisyear-$thismonth-01') AND MONTH(stringdate( post_date) ) <> MONTH( stringdate( '$thisyear-$thismonth-01' ) ) AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date ASC"); //LIMIT 1 echo ''; $myweek = array(); for ( $wdcount=0; $wdcount<=6; $wdcount++ ) { $myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7); } foreach ( $myweek as $wd ) { $day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd); echo "\n\t\t"; } echo ' '; if ( $previous ) { echo "\n\t\t".''; } else { echo "\n\t\t".''; } echo "\n\t\t".''; if ( $next ) { echo "\n\t\t".''; } else { echo "\n\t\t".''; } echo ' '; // Get days with posts $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date) FROM $wpdb->posts WHERE MONTH(post_date) = $thismonth AND YEAR(post_date) = $thisyear AND post_type = 'post' AND post_status = 'publish' AND post_date < ('" . current_time('mysql') . "')", ARRAY_N); if ( $dayswithposts ) { foreach ( $dayswithposts as $daywith ) { $daywithpost[] = $daywith[0]; } } else { $daywithpost = array(); } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') != false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') != false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') != false) $ak_title_separator = "\n"; else $ak_title_separator = ', '; $ak_titles_for_day = array(); $ak_post_titles = $wpdb->get_results("SELECT post_title, DAYOFMONTH(post_date) as dom " ."FROM $wpdb->posts " ."WHERE YEAR(post_date) = $thisyear " ."AND MONTH(post_date) = $thismonth " ."AND post_date < ('".current_time('mysql')."') " ."AND post_type = 'post' AND post_status = 'publish'" ); if ( $ak_post_titles ) { foreach ( $ak_post_titles as $ak_post_title ) { $post_title = apply_filters( "the_title", $ak_post_title->post_title ); $post_title = str_replace('"', '"', wptexturize( $post_title )); if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) ) $ak_titles_for_day['day_'.$ak_post_title->dom] = ''; if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one $ak_titles_for_day["$ak_post_title->dom"] = $post_title; else $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title; } } // See how much we should pad in the beginning $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins); if ( 0 != $pad ) echo "\n\t\t".''; $daysinmonth = intval(date('t', $unixmonth)); for ( $day = 1; $day <= $daysinmonth; ++$day ) { if ( isset($newrow) && $newrow ) echo "\n\t\n\t\n\t\t"; $newrow = false; if ( $day == gmdate('j', (time() + (get_option('gmt_offset') * 3600))) && $thismonth == gmdate('m', time()+(get_option('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time()+(get_option('gmt_offset') * 3600)) ) echo ''; if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) ) $newrow = true; } $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins); if ( $pad != 0 && $pad != 7 ) echo "\n\t\t".''; echo "\n\t\n\t\n\t
    ' . $wp_locale->get_month($thismonth) . ' ' . date('Y', $unixmonth) . '
    $day_name
    « ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '  ' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' » 
     
    '; else echo ''; if ( in_array($day, $daywithpost) ) // any posts today? echo '$day"; else echo $day; echo ' 
    "; $output = ob_get_contents(); ob_end_clean(); echo $output; $cache[ $key ] = $output; wp_cache_add( 'get_calendar', $cache, 'calendar' ); } function delete_get_calendar_cache() { wp_cache_delete( 'get_calendar', 'calendar' ); } add_action( 'save_post', 'delete_get_calendar_cache' ); add_action( 'delete_post', 'delete_get_calendar_cache' ); add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); add_action( 'update_option_gmt_offset', 'delete_get_calendar_cache' ); add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); function allowed_tags() { global $allowedtags; $allowed = ''; foreach ( $allowedtags as $tag => $attributes ) { $allowed .= '<'.$tag; if ( 0 < count($attributes) ) { foreach ( $attributes as $attribute => $limits ) { $allowed .= ' '.$attribute.'=""'; } } $allowed .= '> '; } return htmlentities($allowed); } /***** Date/Time tags *****/ function the_date_xml() { global $post; echo mysql2date('Y-m-d', $post->post_date); //echo ""+$post->post_date; } function the_date($d='', $before='', $after='', $echo = true) { global $id, $post, $day, $previousday, $newday; $the_date = ''; if ( $day != $previousday ) { $the_date .= $before; if ( $d=='' ) $the_date .= mysql2date(get_option('date_format'), $post->post_date); else $the_date .= mysql2date($d, $post->post_date); $the_date .= $after; $previousday = $day; } $the_date = apply_filters('the_date', $the_date, $d, $before, $after); if ( $echo ) echo $the_date; else return $the_date; } function the_modified_date($d = '') { echo apply_filters('the_modified_date', get_the_modified_date($d), $d); } function get_the_modified_date($d = '') { if ( '' == $d ) $the_time = get_post_modified_time(get_option('date_format')); else $the_time = get_post_modified_time($d); return apply_filters('get_the_modified_date', $the_time, $d); } function the_time( $d = '' ) { echo apply_filters('the_time', get_the_time( $d ), $d); } function get_the_time( $d = '' ) { if ( '' == $d ) $the_time = get_post_time(get_option('time_format')); else $the_time = get_post_time($d); return apply_filters('get_the_time', $the_time, $d); } function get_post_time( $d = 'U', $gmt = false ) { // returns timestamp global $post; if ( $gmt ) $time = $post->post_date_gmt; else $time = $post->post_date; $time = mysql2date($d, $time); return apply_filters('get_the_time', $time, $d, $gmt); } function the_modified_time($d = '') { echo apply_filters('the_modified_time', get_the_modified_time($d), $d); } function get_the_modified_time($d = '') { if ( '' == $d ) $the_time = get_post_modified_time(get_option('time_format')); else $the_time = get_post_modified_time($d); return apply_filters('get_the_modified_time', $the_time, $d); } function get_post_modified_time( $d = 'U', $gmt = false ) { // returns timestamp global $post; if ( $gmt ) $time = $post->post_modified_gmt; else $time = $post->post_modified; $time = mysql2date($d, $time); return apply_filters('get_the_modified_time', $time, $d, $gmt); } function the_weekday() { global $wp_locale, $id, $post; $the_weekday = $wp_locale->get_weekday(mysql2date('w', $post->post_date)); $the_weekday = apply_filters('the_weekday', $the_weekday); echo $the_weekday; } function the_weekday_date($before='',$after='') { global $wp_locale, $id, $post, $day, $previousweekday; $the_weekday_date = ''; if ( $day != $previousweekday ) { $the_weekday_date .= $before; $the_weekday_date .= $wp_locale->get_weekday(mysql2date('w', $post->post_date)); $the_weekday_date .= $after; $previousweekday = $day; } $the_weekday_date = apply_filters('the_weekday_date', $the_weekday_date, $before, $after); echo $the_weekday_date; } function wp_head() { do_action('wp_head'); } function wp_footer() { do_action('wp_footer'); } function rsd_link() { echo ' \n"; } function noindex() { // If the blog is not public, tell robots to go away. if ( '0' == get_option('blog_public') ) echo "\n"; } function rich_edit_exists() { global $wp_rich_edit_exists; if ( !isset($wp_rich_edit_exists) ) $wp_rich_edit_exists = file_exists(ABSPATH . WPINC . '/js/tinymce/tiny_mce.js'); return $wp_rich_edit_exists; } function user_can_richedit() { global $wp_rich_edit, $pagenow; if ( !isset( $wp_rich_edit) ) { if ( get_user_option( 'rich_editing' ) == 'true' && ( ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval($match[1]) >= 420 ) || !preg_match( '!opera[ /][2-8]|konqueror|safari!i', $_SERVER['HTTP_USER_AGENT'] ) ) && 'comment.php' != $pagenow ) { $wp_rich_edit = true; } else { $wp_rich_edit = false; } } return apply_filters('user_can_richedit', $wp_rich_edit); } function the_editor($content, $id = 'content', $prev_id = 'title') { $rows = get_option('default_post_edit_rows'); if (($rows < 3) || ($rows > 100)) $rows = 12; $rows = "rows='$rows'"; if ( user_can_richedit() ) : add_filter('the_editor_content', 'wp_richedit_pre'); // The following line moves the border so that the active button "attaches" to the toolbar. Only IE needs it. ?>
    \n"); $the_editor_content = apply_filters('the_editor_content', $content); printf($the_editor, $the_editor_content); ?> '%_%', // http://example.com/all_posts.php%_% : %_% is replaced by format (below) 'format' => '?page=%#%', // ?page=%#% : %#% is replaced by the page number 'total' => 1, 'current' => 0, 'show_all' => false, 'prev_next' => true, 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'end_size' => 1, // How many numbers on either end including the end 'mid_size' => 2, // How many numbers to either side of current not including current 'type' => 'plain', 'add_args' => false // array of query args to aadd ); $args = wp_parse_args( $args, $defaults ); extract($args, EXTR_SKIP); // Who knows what else people pass in $args $total = (int) $total; if ( $total < 2 ) return; $current = (int) $current; $end_size = 0 < (int) $end_size ? (int) $end_size : 1; // Out of bounds? Make it the default. $mid_size = 0 <= (int) $mid_size ? (int) $mid_size : 2; $add_args = is_array($add_args) ? $add_args : false; $r = ''; $page_links = array(); $n = 0; $dots = false; if ( $prev_next && $current && 1 < $current ) : $link = str_replace('%_%', 2 == $current ? '' : $format, $base); $link = str_replace('%#%', $current - 1, $link); if ( $add_args ) $link = add_query_arg( $add_args, $link ); $page_links[] = ""; endif; for ( $n = 1; $n <= $total; $n++ ) : if ( $n == $current ) : $page_links[] = "$n"; $dots = true; else : if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : $link = str_replace('%_%', 1 == $n ? '' : $format, $base); $link = str_replace('%#%', $n, $link); if ( $add_args ) $link = add_query_arg( $add_args, $link ); $page_links[] = "$n"; $dots = true; elseif ( $dots && !$show_all ) : $page_links[] = "..."; $dots = false; endif; endif; endfor; if ( $prev_next && $current && ( $current < $total || -1 == $total ) ) : $link = str_replace('%_%', $format, $base); $link = str_replace('%#%', $current + 1, $link); if ( $add_args ) $link = add_query_arg( $add_args, $link ); $page_links[] = ""; endif; switch ( $type ) : case 'array' : return $page_links; break; case 'list' : $r .= "
      \n\t
    • "; $r .= join("
    • \n\t
    • ", $page_links); $r .= "
    • \n
    \n"; break; default : $r = join("\n", $page_links); break; endswitch; return $r; } ?> !wordpress/wp-includes/gettext.php,. Copyright (c) 2005 Nico Kaiser This file is part of PHP-gettext. PHP-gettext 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. PHP-gettext 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 PHP-gettext; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * Provides a simple gettext replacement that works independently from * the system's gettext abilities. * It can read MO files and use them for translating strings. * The files are passed to gettext_reader as a Stream (see streams.php) * * This version has the ability to cache all strings and translations to * speed up the string lookup. * While the cache is enabled by default, it can be switched off with the * second parameter in the constructor (e.g. whenusing very large MO files * that you don't want to keep in memory) */ class gettext_reader { //public: var $error = 0; // public variable that holds error code (0 if no error) //private: var $BYTEORDER = 0; // 0: low endian, 1: big endian var $STREAM = NULL; var $short_circuit = false; var $enable_cache = false; var $originals = NULL; // offset of original table var $translations = NULL; // offset of translation table var $pluralheader = NULL; // cache header field for plural forms var $select_string_function = NULL; // cache function, which chooses plural forms var $total = 0; // total string count var $table_originals = NULL; // table for original strings (offsets) var $table_translations = NULL; // table for translated strings (offsets) var $cache_translations = NULL; // original -> translation mapping /* Methods */ /** * Reads a 32bit Integer from the Stream * * @access private * @return Integer from the Stream */ function readint() { if ($this->BYTEORDER == 0) { // low endian $low_end = unpack('V', $this->STREAM->read(4)); return array_shift($low_end); } else { // big endian $big_end = unpack('N', $this->STREAM->read(4)); return array_shift($big_end); } } /** * Reads an array of Integers from the Stream * * @param int count How many elements should be read * @return Array of Integers */ function readintarray($count) { if ($this->BYTEORDER == 0) { // low endian return unpack('V'.$count, $this->STREAM->read(4 * $count)); } else { // big endian return unpack('N'.$count, $this->STREAM->read(4 * $count)); } } /** * Constructor * * @param object Reader the StreamReader object * @param boolean enable_cache Enable or disable caching of strings (default on) */ function gettext_reader($Reader, $enable_cache = true) { // If there isn't a StreamReader, turn on short circuit mode. if (! $Reader || isset($Reader->error) ) { $this->short_circuit = true; return; } // Caching can be turned off $this->enable_cache = $enable_cache; // $MAGIC1 = (int)0x950412de; //bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565 $MAGIC1 = (int) - 1794895138; // $MAGIC2 = (int)0xde120495; //bug $MAGIC2 = (int) - 569244523; // 64-bit fix $MAGIC3 = (int) 2500072158; $this->STREAM = $Reader; $magic = $this->readint(); if ($magic == ($MAGIC1 & 0xFFFFFFFF) || $magic == ($MAGIC3 & 0xFFFFFFFF)) { // to make sure it works for 64-bit platforms $this->BYTEORDER = 0; } elseif ($magic == ($MAGIC2 & 0xFFFFFFFF)) { $this->BYTEORDER = 1; } else { $this->error = 1; // not MO file return false; } // FIXME: Do we care about revision? We should. $revision = $this->readint(); $this->total = $this->readint(); $this->originals = $this->readint(); $this->translations = $this->readint(); } /** * Loads the translation tables from the MO file into the cache * If caching is enabled, also loads all strings into a cache * to speed up translation lookups * * @access private */ function load_tables() { if (is_array($this->cache_translations) && is_array($this->table_originals) && is_array($this->table_translations)) return; /* get original and translations tables */ $this->STREAM->seekto($this->originals); $this->table_originals = $this->readintarray($this->total * 2); $this->STREAM->seekto($this->translations); $this->table_translations = $this->readintarray($this->total * 2); if ($this->enable_cache) { $this->cache_translations = array (); /* read all strings in the cache */ for ($i = 0; $i < $this->total; $i++) { $this->STREAM->seekto($this->table_originals[$i * 2 + 2]); $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]); $this->STREAM->seekto($this->table_translations[$i * 2 + 2]); $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]); $this->cache_translations[$original] = $translation; } } } /** * Returns a string from the "originals" table * * @access private * @param int num Offset number of original string * @return string Requested string if found, otherwise '' */ function get_original_string($num) { $length = $this->table_originals[$num * 2 + 1]; $offset = $this->table_originals[$num * 2 + 2]; if (! $length) return ''; $this->STREAM->seekto($offset); $data = $this->STREAM->read($length); return (string)$data; } /** * Returns a string from the "translations" table * * @access private * @param int num Offset number of original string * @return string Requested string if found, otherwise '' */ function get_translation_string($num) { $length = $this->table_translations[$num * 2 + 1]; $offset = $this->table_translations[$num * 2 + 2]; if (! $length) return ''; $this->STREAM->seekto($offset); $data = $this->STREAM->read($length); return (string)$data; } /** * Binary search for string * * @access private * @param string string * @param int start (internally used in recursive function) * @param int end (internally used in recursive function) * @return int string number (offset in originals table) */ function find_string($string, $start = -1, $end = -1) { if (($start == -1) or ($end == -1)) { // find_string is called with only one parameter, set start end end $start = 0; $end = $this->total; } if (abs($start - $end) <= 1) { // We're done, now we either found the string, or it doesn't exist $txt = $this->get_original_string($start); if ($string == $txt) return $start; else return -1; } else if ($start > $end) { // start > end -> turn around and start over return $this->find_string($string, $end, $start); } else { // Divide table in two parts $half = (int)(($start + $end) / 2); $cmp = strcmp($string, $this->get_original_string($half)); if ($cmp == 0) // string is exactly in the middle => return it return $half; else if ($cmp < 0) // The string is in the upper half return $this->find_string($string, $start, $half); else // The string is in the lower half return $this->find_string($string, $half, $end); } } /** * Translates a string * * @access public * @param string string to be translated * @return string translated string (or original, if not found) */ function translate($string) { if ($this->short_circuit) return $string; $this->load_tables(); if ($this->enable_cache) { // Caching enabled, get translated string from cache if (array_key_exists($string, $this->cache_translations)) return $this->cache_translations[$string]; else return $string; } else { // Caching not enabled, try to find string $num = $this->find_string($string); if ($num == -1) return $string; else return $this->get_translation_string($num); } } /** * Get possible plural forms from MO header * * @access private * @return string plural form header */ function get_plural_forms() { // lets assume message number 0 is header // this is true, right? $this->load_tables(); // cache header field for plural forms if (! is_string($this->pluralheader)) { if ($this->enable_cache) { $header = $this->cache_translations[""]; } else { $header = $this->get_translation_string(0); } $header .= "\n"; //make sure our regex matches if (eregi("plural-forms: ([^\n]*)\n", $header, $regs)) $expr = $regs[1]; else $expr = "nplurals=2; plural=n == 1 ? 0 : 1;"; // add parentheses // important since PHP's ternary evaluates from left to right $expr.= ';'; $res= ''; $p= 0; for ($i= 0; $i < strlen($expr); $i++) { $ch= $expr[$i]; switch ($ch) { case '?': $res.= ' ? ('; $p++; break; case ':': $res.= ') : ('; break; case ';': $res.= str_repeat( ')', $p) . ';'; $p= 0; break; default: $res.= $ch; } } $this->pluralheader = $res; } return $this->pluralheader; } /** * Detects which plural form to take * * @access private * @param n count * @return int array index of the right plural form */ function select_string($n) { if (is_null($this->select_string_function)) { $string = $this->get_plural_forms(); if (preg_match("/nplurals\s*=\s*(\d+)\s*\;\s*plural\s*=\s*(.*?)\;+/", $string, $matches)) { $nplurals = $matches[1]; $expression = $matches[2]; $expression = str_replace("n", '$n', $expression); } else { $nplurals = 2; $expression = ' $n == 1 ? 0 : 1 '; } $func_body = " \$plural = ($expression); return (\$plural <= $nplurals)? \$plural : \$plural - 1;"; $this->select_string_function = create_function('$n', $func_body); } return call_user_func($this->select_string_function, $n); } /** * Plural version of gettext * * @access public * @param string single * @param string plural * @param string number * @return translated plural form */ function ngettext($single, $plural, $number) { if ($this->short_circuit) { if ($number != 1) return $plural; else return $single; } // find out the appropriate form $select = $this->select_string($number); // this should contains all strings separated by NULLs $key = $single.chr(0).$plural; if ($this->enable_cache) { if (! array_key_exists($key, $this->cache_translations)) { return ($number != 1) ? $plural : $single; } else { $result = $this->cache_translations[$key]; $list = explode(chr(0), $result); return $list[$select]; } } else { $num = $this->find_string($key); if ($num == -1) { return ($number != 1) ? $plural : $single; } else { $result = $this->get_translation_string($num); $list = explode(chr(0), $result); return $list[$select]; } } } } ?> $wordpress/wp-includes/images/rss.png PNG  IHDRH- pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F(IDATxڌOHTQ&^4H(0"Th-ZԢ]mpT $E-29X:{B,ߏw$maX6FMkhw, 4T:(1o %JK&{19X T!v+b *(hr@:Z81szRvH57v@cѻ~ 5`+`| VXʮG.&<Ї5lu-5=%|@{'RwQz߇-.n"&:*^]+ Bŧ+O7tQŧ#x~v6f᝼B(7Ju}a4-cCIh 1U0Qi'^BAq#6pmةE$OWjBZ# ʫJtCN dSgh7}ZJL%qqa.'Qh&\@ ,)CyH#~ӝ&Oc@GIENDB`3wordpress/wp-includes/images/smilies/icon_arrow.gifGIF89a EEE! ,WIjՕpELAgpj BUvsC; `"fs2([Lhբa~fX$;5wordpress/wp-includes/images/smilies/icon_biggrin.gifGIF89a EEE! ,YI jե"pIL@gpj)wjʛ pJQl:`J PJ4ZNB oYbe6;6wordpress/wp-includes/images/smilies/icon_confused.gifGIF89a EEE! ,XIjՕpCLA''vqj ?*pƂ!\ 'pd/N3(^0-U&kQ@7 3,Km;2wordpress/wp-includes/images/smilies/icon_cool.gifGIF89a EEE! ,YIjUpCLAgpj k+;vECp4xevE+mAPiN X:o(`e6;1wordpress/wp-includes/images/smilies/icon_cry.gifGIF89aEEE؁^^^! NETSCAPE2.0!,\ $AY(T.q 'CA+@An:AJaC" &8tp: 7tgUYj0x !N2Q)<&D#!!, $@HdҜM0lB! ,`@! , @&!! , @HdBI! , `dhB!! ,`@! , @&!! , @Hh "&i;1wordpress/wp-includes/images/smilies/icon_eek.gifGIF89a EEE! ,WI9jŔ"I"c0@6r +ﱫۮ00P6 F IEy,(i%`'pa6g1܀}g4$;2wordpress/wp-includes/images/smilies/icon_evil.gifGIF89aEEE*m!,i @h$*2FC5@NG @ ꚱ- h>h)@T]ᰥ"ij,cIwdGk+:G(F()Z#&(!;5wordpress/wp-includes/images/smilies/icon_exclaim.gifGIF89aEEEuŵ///qoWrpXJG)mkSSO&!,i`'AYhW6q'܂Ak' NG:@!n;"/` tZ(v 8θ,n RپIFr9;})%U)<&#!;2wordpress/wp-includes/images/smilies/icon_idea.gifGIF89a EEE! ,]I jUR"pL@g 0R;~C%q2d|>ORԌݶ(¢VhB 3 ̰,p;1wordpress/wp-includes/images/smilies/icon_lol.gifPGIF89a EEE! NETSCAPE2.0! ,ZI jեR",AyhTr 1r)\aɎC%<DiJ-A v; Y-4jQ҅xn x1cd"! , I$[8ͫa4 D! ,PH9j! ,0H)j! ,PH9j! ,0H)j;1wordpress/wp-includes/images/smilies/icon_mad.gifGIF89a EEE! ,[IjեpLA'a'j *`pP9ĞAf-+`W A& ;`mXk\ 0ò&;5wordpress/wp-includes/images/smilies/icon_mrgreen.gif]GIF89aܱگخ֬ҩΦʢȡƟĞ}|yroli~e|dx`!',zP(Sqi( G$@s40t6EcQlx }8 %`$P!F E" E#E%t$\J&EFD%#"! QIJIA;5wordpress/wp-includes/images/smilies/icon_neutral.gifGIF89a EEE! ,XIjՕpCLA' vpj A88r9ʊ)\ԓbd`a -e&kQ@73,Km;6wordpress/wp-includes/images/smilies/icon_question.gifGIF89aEEEuϾ/+_W߰of!,u&@YVNq' @k,TAIPgK@L`$[CJgMh%x \Szb Q[0$VF<2])<&G#!;2wordpress/wp-includes/images/smilies/icon_razz.gifGIF89aEEE333!,]IjեRpLA''𦫖qj *pƂJ" `<+kYa<v *~20̰,5;5wordpress/wp-includes/images/smilies/icon_redface.gifGIF89al[hhu҇isJEEE˃__H6{! NETSCAPE2.0!,f'MYWND'ڰьM@NnA`8]#c<P*ȈW[d|.8w @ mxD qj:<2ylR)<&D#!! , Q'~D8]0kHN.O\[͐ x H  ̓TAfPIxEhJTE!!2, H'NAJc3]j+WOT-$ERBgJ-ˑ%-3|nQu- ! , P'Ac:uX~n"A6;Fhl4C1`xf"05u0e|< PTADhJE!;6wordpress/wp-includes/images/smilies/icon_rolleyes.gifGIF89a EEE! NETSCAPE2.0! ,^I jUpL@'g𦫆E:%\PtdPA^;( 0=c2yO J>`c`@ia(fX5! , YVؠg! , F嬳Ԧ.!2 , P$-'! ,  "! , Fe+0ZE! , I!2T]U*B)@LMZXYr! , I%[8WA'&1^! , I!8K[BhPH(F;1wordpress/wp-includes/images/smilies/icon_sad.gifGIF89a EEE! ,XIjՕpCLA'1%&p'*pnCk3 'pe= ߧN3 U&ݳL@7 3, m;3wordpress/wp-includes/images/smilies/icon_smile.gifGIF89aEEE333!,[IjUpLA''vqj ?*pƂ!Ӣ X<+kYAb<v5Xj\ 0ò&;7wordpress/wp-includes/images/smilies/icon_surprised.gifGIF89a EEE! ,[IjU"pILA''𦫆qj *pƂ ":=+`,@VvaA6XT0ò&;5wordpress/wp-includes/images/smilies/icon_twisted.gifGIF89aEEE*333m!,k DhɘВ$*>DE5@NG @ ꚱ- h> h)8T]°ij,c pّJ<G(F1|FZ(%Z#&(!;2wordpress/wp-includes/images/smilies/icon_wink.gifGIF89a EEE! ,WIjՕpCLA'00%&p/*p`C%+fP4OpUł:`kLhբanfX$;1wordpress/wp-includes/images/smilies/.svn/entries t8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/images/smilies svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 icon_eek.gif file 2008-11-20T16:30:23.000000Z 52e43743e38a67d5d28845a104ca8c7d 2008-10-28T18:17:06.112729Z 97 paul has-props icon_confused.gif file 2008-11-20T16:30:23.000000Z 4affed1b55e5f73c9f0675ae7d0ad823 2008-10-28T18:17:06.112729Z 97 paul has-props icon_question.gif file 2008-11-20T16:30:23.000000Z 0518596a4eb94c32a2b2ed898bdc3549 2008-10-28T18:17:06.112729Z 97 paul has-props icon_sad.gif file 2008-11-20T16:30:23.000000Z 5a50535a06def9d01076772e5e9d235b 2008-10-28T18:17:06.112729Z 97 paul has-props icon_wink.gif file 2008-11-20T16:30:23.000000Z f058206bb8ff732dbe8e7aa10d74c9cd 2008-10-28T18:17:06.112729Z 97 paul has-props icon_smile.gif file 2008-11-20T16:30:23.000000Z 9ee646ffab71107d1a11407be52f33a5 2008-10-28T18:17:06.112729Z 97 paul has-props icon_neutral.gif file 2008-11-20T16:30:23.000000Z 4e8b7a51c7f60a2362a4f67fbbc937e7 2008-10-28T18:17:06.112729Z 97 paul has-props icon_surprised.gif file 2008-11-20T16:30:23.000000Z ae735b5dd659dc4b3b0f249ce59bef79 2008-10-28T18:17:06.112729Z 97 paul has-props icon_biggrin.gif file 2008-11-20T16:30:23.000000Z f970a6591668c625e4b9dbd3b7a450d7 2008-10-28T18:17:06.112729Z 97 paul has-props icon_exclaim.gif file 2008-11-20T16:30:23.000000Z da86bbf377f97d06047aa781a582c52f 2008-10-28T18:17:06.112729Z 97 paul has-props icon_twisted.gif file 2008-11-20T16:30:23.000000Z c9c3d12da1e9da699e490b86d24eee85 2008-10-28T18:17:06.112729Z 97 paul has-props icon_razz.gif file 2008-11-20T16:30:23.000000Z 7aec68426aa06f01e2b1ac250e5aee62 2008-10-28T18:17:06.112729Z 97 paul has-props icon_lol.gif file 2008-11-20T16:30:23.000000Z b76e7729d43c4a49182d020741285bef 2008-10-28T18:17:06.112729Z 97 paul has-props icon_redface.gif file 2008-11-20T16:30:23.000000Z d7e9d095432cbcf09375ffc782c30c23 2008-10-28T18:17:06.112729Z 97 paul has-props icon_arrow.gif file 2008-11-20T16:30:23.000000Z 394bffa679f650b7d2f22aa263cc06ba 2008-10-28T18:17:06.112729Z 97 paul has-props icon_cool.gif file 2008-11-20T16:30:23.000000Z 25c83ea511f206e88f214719dad9c88c 2008-10-28T18:17:06.112729Z 97 paul has-props icon_cry.gif file 2008-11-20T16:30:23.000000Z 7605eca95aaeda46e641745ef6f0e0b0 2008-10-28T18:17:06.112729Z 97 paul has-props icon_rolleyes.gif file 2008-11-20T16:30:23.000000Z 19071b1af987946e96dcef6ce0611c6b 2008-10-28T18:17:06.112729Z 97 paul has-props icon_mrgreen.gif file 2008-11-20T16:30:23.000000Z 54e8505227edae1e583cf2f9554abc3a 2008-10-28T18:17:06.112729Z 97 paul has-props icon_evil.gif file 2008-11-20T16:30:23.000000Z 178255bb3fe2c3aa790c1f8ec8738504 2008-10-28T18:17:06.112729Z 97 paul has-props icon_mad.gif file 2008-11-20T16:30:23.000000Z e4355c00894da1bd78341a6b54d20b56 2008-10-28T18:17:06.112729Z 97 paul has-props icon_idea.gif file 2008-11-20T16:30:23.000000Z aaebc9c048367118ba65e1da46bc3e08 2008-10-28T18:17:06.112729Z 97 paul has-props 0wordpress/wp-includes/images/smilies/.svn/format8 Kwordpress/wp-includes/images/smilies/.svn/prop-base/icon_arrow.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Mwordpress/wp-includes/images/smilies/.svn/prop-base/icon_biggrin.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Nwordpress/wp-includes/images/smilies/.svn/prop-base/icon_confused.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Jwordpress/wp-includes/images/smilies/.svn/prop-base/icon_cool.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Iwordpress/wp-includes/images/smilies/.svn/prop-base/icon_cry.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Iwordpress/wp-includes/images/smilies/.svn/prop-base/icon_eek.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Jwordpress/wp-includes/images/smilies/.svn/prop-base/icon_evil.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Mwordpress/wp-includes/images/smilies/.svn/prop-base/icon_exclaim.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Jwordpress/wp-includes/images/smilies/.svn/prop-base/icon_idea.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Iwordpress/wp-includes/images/smilies/.svn/prop-base/icon_lol.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Iwordpress/wp-includes/images/smilies/.svn/prop-base/icon_mad.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Mwordpress/wp-includes/images/smilies/.svn/prop-base/icon_mrgreen.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Mwordpress/wp-includes/images/smilies/.svn/prop-base/icon_neutral.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Nwordpress/wp-includes/images/smilies/.svn/prop-base/icon_question.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Jwordpress/wp-includes/images/smilies/.svn/prop-base/icon_razz.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Mwordpress/wp-includes/images/smilies/.svn/prop-base/icon_redface.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Nwordpress/wp-includes/images/smilies/.svn/prop-base/icon_rolleyes.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Iwordpress/wp-includes/images/smilies/.svn/prop-base/icon_sad.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Kwordpress/wp-includes/images/smilies/.svn/prop-base/icon_smile.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Owordpress/wp-includes/images/smilies/.svn/prop-base/icon_surprised.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Mwordpress/wp-includes/images/smilies/.svn/prop-base/icon_twisted.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Jwordpress/wp-includes/images/smilies/.svn/prop-base/icon_wink.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Kwordpress/wp-includes/images/smilies/.svn/text-base/icon_arrow.gif.svn-baseGIF89a EEE! ,WIjՕpELAgpj BUvsC; `"fs2([Lhբa~fX$;Mwordpress/wp-includes/images/smilies/.svn/text-base/icon_biggrin.gif.svn-baseGIF89a EEE! ,YI jե"pIL@gpj)wjʛ pJQl:`J PJ4ZNB oYbe6;Nwordpress/wp-includes/images/smilies/.svn/text-base/icon_confused.gif.svn-baseGIF89a EEE! ,XIjՕpCLA''vqj ?*pƂ!\ 'pd/N3(^0-U&kQ@7 3,Km;Jwordpress/wp-includes/images/smilies/.svn/text-base/icon_cool.gif.svn-baseGIF89a EEE! ,YIjUpCLAgpj k+;vECp4xevE+mAPiN X:o(`e6;Iwordpress/wp-includes/images/smilies/.svn/text-base/icon_cry.gif.svn-baseGIF89aEEE؁^^^! NETSCAPE2.0!,\ $AY(T.q 'CA+@An:AJaC" &8tp: 7tgUYj0x !N2Q)<&D#!!, $@HdҜM0lB! ,`@! , @&!! , @HdBI! , `dhB!! ,`@! , @&!! , @Hh "&i;Iwordpress/wp-includes/images/smilies/.svn/text-base/icon_eek.gif.svn-baseGIF89a EEE! ,WI9jŔ"I"c0@6r +ﱫۮ00P6 F IEy,(i%`'pa6g1܀}g4$;Jwordpress/wp-includes/images/smilies/.svn/text-base/icon_evil.gif.svn-baseGIF89aEEE*m!,i @h$*2FC5@NG @ ꚱ- h>h)@T]ᰥ"ij,cIwdGk+:G(F()Z#&(!;Mwordpress/wp-includes/images/smilies/.svn/text-base/icon_exclaim.gif.svn-baseGIF89aEEEuŵ///qoWrpXJG)mkSSO&!,i`'AYhW6q'܂Ak' NG:@!n;"/` tZ(v 8θ,n RپIFr9;})%U)<&#!;Jwordpress/wp-includes/images/smilies/.svn/text-base/icon_idea.gif.svn-baseGIF89a EEE! ,]I jUR"pL@g 0R;~C%q2d|>ORԌݶ(¢VhB 3 ̰,p;Iwordpress/wp-includes/images/smilies/.svn/text-base/icon_lol.gif.svn-basePGIF89a EEE! NETSCAPE2.0! ,ZI jեR",AyhTr 1r)\aɎC%<DiJ-A v; Y-4jQ҅xn x1cd"! , I$[8ͫa4 D! ,PH9j! ,0H)j! ,PH9j! ,0H)j;Iwordpress/wp-includes/images/smilies/.svn/text-base/icon_mad.gif.svn-baseGIF89a EEE! ,[IjեpLA'a'j *`pP9ĞAf-+`W A& ;`mXk\ 0ò&;Mwordpress/wp-includes/images/smilies/.svn/text-base/icon_mrgreen.gif.svn-base]GIF89aܱگخ֬ҩΦʢȡƟĞ}|yroli~e|dx`!',zP(Sqi( G$@s40t6EcQlx }8 %`$P!F E" E#E%t$\J&EFD%#"! QIJIA;Mwordpress/wp-includes/images/smilies/.svn/text-base/icon_neutral.gif.svn-baseGIF89a EEE! ,XIjՕpCLA' vpj A88r9ʊ)\ԓbd`a -e&kQ@73,Km;Nwordpress/wp-includes/images/smilies/.svn/text-base/icon_question.gif.svn-baseGIF89aEEEuϾ/+_W߰of!,u&@YVNq' @k,TAIPgK@L`$[CJgMh%x \Szb Q[0$VF<2])<&G#!;Jwordpress/wp-includes/images/smilies/.svn/text-base/icon_razz.gif.svn-baseGIF89aEEE333!,]IjեRpLA''𦫖qj *pƂJ" `<+kYa<v *~20̰,5;Mwordpress/wp-includes/images/smilies/.svn/text-base/icon_redface.gif.svn-baseGIF89al[hhu҇isJEEE˃__H6{! NETSCAPE2.0!,f'MYWND'ڰьM@NnA`8]#c<P*ȈW[d|.8w @ mxD qj:<2ylR)<&D#!! , Q'~D8]0kHN.O\[͐ x H  ̓TAfPIxEhJTE!!2, H'NAJc3]j+WOT-$ERBgJ-ˑ%-3|nQu- ! , P'Ac:uX~n"A6;Fhl4C1`xf"05u0e|< PTADhJE!;Nwordpress/wp-includes/images/smilies/.svn/text-base/icon_rolleyes.gif.svn-baseGIF89a EEE! NETSCAPE2.0! ,^I jUpL@'g𦫆E:%\PtdPA^;( 0=c2yO J>`c`@ia(fX5! , YVؠg! , F嬳Ԧ.!2 , P$-'! ,  "! , Fe+0ZE! , I!2T]U*B)@LMZXYr! , I%[8WA'&1^! , I!8K[BhPH(F;Iwordpress/wp-includes/images/smilies/.svn/text-base/icon_sad.gif.svn-baseGIF89a EEE! ,XIjՕpCLA'1%&p'*pnCk3 'pe= ߧN3 U&ݳL@7 3, m;Kwordpress/wp-includes/images/smilies/.svn/text-base/icon_smile.gif.svn-baseGIF89aEEE333!,[IjUpLA''vqj ?*pƂ!Ӣ X<+kYAb<v5Xj\ 0ò&;Owordpress/wp-includes/images/smilies/.svn/text-base/icon_surprised.gif.svn-baseGIF89a EEE! ,[IjU"pILA''𦫆qj *pƂ ":=+`,@VvaA6XT0ò&;Mwordpress/wp-includes/images/smilies/.svn/text-base/icon_twisted.gif.svn-baseGIF89aEEE*333m!,k DhɘВ$*>DE5@NG @ ꚱ- h> h)8T]°ij,c pّJ<G(F1|FZ(%Z#&(!;Jwordpress/wp-includes/images/smilies/.svn/text-base/icon_wink.gif.svn-baseGIF89a EEE! ,WIjՕpCLA'00%&p/*p`C%+fP4OpUł:`kLhբanfX$;)wordpress/wp-includes/images/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 smilies dir rss.png file 2008-11-20T16:30:23.000000Z 0ee254a56334189fd471afeec067186f 2008-10-28T18:17:06.112729Z 97 paul has-props (wordpress/wp-includes/images/.svn/format8  H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_F(IDATxڌOHTQ&^4H(0"Th-ZԢ]mpT $E-29X:{B,ߏw$maX6FMkhw, 4T:(1o %JK&{19X T!v+b *(hr@:Z81szRvH57v@cѻ~ 5`+`| VXʮG.&<Ї5lu-5=%|@{'RwQz߇-.n"&:*^]+ Bŧ+O7tQŧ#x~v6f᝼B(7Ju}a4-cCIh 1U0Qi'^BAq#6pmةE$OWjBZ# ʫJtCN dSgh7}ZJL%qqa.'Qh&\@ ,)CyH#~ӝ&Oc@GIENDB`$wordpress/wp-includes/js/autosave.js var autosaveLast = ''; var autosavePeriodical; function autosave_start_timer() { var form = $('post'); autosaveLast = form.post_title.value+form.content.value; // Keep autosave_interval in sync with edit_post(). autosavePeriodical = new PeriodicalExecuter(autosave, autosaveL10n.autosaveInterval); //Disable autosave after the form has been submitted if(form.addEventListener) { form.addEventListener("submit", function () { autosavePeriodical.currentlyExecuting = true; }, false); } if(form.attachEvent) { form.save ? form.save.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null; form.submit ? form.submit.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null; form.publish ? form.publish.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null; form.deletepost ? form.deletepost.attachEvent("onclick", function () { autosavePeriodical.currentlyExecuting = true; }) : null; } } addLoadEvent(autosave_start_timer) function autosave_cur_time() { var now = new Date(); return "" + ((now.getHours() >12) ? now.getHours() -12 : now.getHours()) + ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes() + ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds(); } function autosave_update_nonce() { var response = nonceAjax.response; document.getElementsByName('_wpnonce')[0].value = response; } function autosave_update_post_ID() { var response = autosaveAjax.response; var res = parseInt(response); var message; if(isNaN(res)) { message = autosaveL10n.errorText.replace(/%response%/g, response); } else { message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time()); $('post_ID').name = "post_ID"; $('post_ID').value = res; // We need new nonces nonceAjax = new sack(); nonceAjax.element = null; nonceAjax.setVar("action", "autosave-generate-nonces"); nonceAjax.setVar("post_ID", res); nonceAjax.setVar("cookie", document.cookie); nonceAjax.setVar("post_type", $('post_type').value); nonceAjax.requestFile = autosaveL10n.requestFile; nonceAjax.onCompletion = autosave_update_nonce; nonceAjax.method = "POST"; nonceAjax.runAJAX(); $('hiddenaction').value = 'editpost'; } $('autosave').innerHTML = message; autosave_enable_buttons(); } function autosave_loading() { $('autosave').innerHTML = autosaveL10n.savingText; } function autosave_saved() { var response = autosaveAjax.response; var res = parseInt(response); var message; if(isNaN(res)) { message = autosaveL10n.errorText.replace(/%response%/g, response); } else { message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time()); } $('autosave').innerHTML = message; autosave_enable_buttons(); } function autosave_disable_buttons() { var form = $('post'); form.save ? form.save.disabled = 'disabled' : null; form.submit ? form.submit.disabled = 'disabled' : null; form.publish ? form.publish.disabled = 'disabled' : null; form.deletepost ? form.deletepost.disabled = 'disabled' : null; setTimeout('autosave_enable_buttons();', 1000); // Re-enable 1 sec later. Just gives autosave a head start to avoid collisions. } function autosave_enable_buttons() { var form = $('post'); form.save ? form.save.disabled = '' : null; form.submit ? form.submit.disabled = '' : null; form.publish ? form.publish.disabled = '' : null; form.deletepost ? form.deletepost.disabled = '' : null; } function autosave() { var form = $('post'); var rich = ((typeof tinyMCE != "undefined") && tinyMCE.getInstanceById('content')) ? true : false; autosaveAjax = new sack(); /* Gotta do this up here so we can check the length when tinyMCE is in use */ if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 || rich == false ) { autosaveAjax.setVar("content", form.content.value); } else { // Don't run while the TinyMCE spellcheck is on. if(tinyMCE.selectedInstance.spellcheckerOn) return; tinyMCE.wpTriggerSave(); autosaveAjax.setVar("content", form.content.value); } if(form.post_title.value.length==0 || form.content.value.length==0 || form.post_title.value+form.content.value == autosaveLast) return; autosave_disable_buttons(); autosaveLast = form.post_title.value+form.content.value; cats = document.getElementsByName("post_category[]"); goodcats = ([]); for(i=0;i // WWW: http://www.mattkruse.com/ // // NOTICE: You may use this code for any purpose, commercial or // private, without any further permission from the author. You may // remove this notice from your final code if you wish, however it is // appreciated by the author if at least my web site address is kept. // // You may *NOT* re-distribute this code in any way except through its // use. That means, you can include it in your product, or your web // site, or any other form where the code is actually being used. You // may not put the plain javascript up on your site for download or // include it in your javascript libraries for download. // If you wish to share this code with others, please just point them // to the URL instead. // Please DO NOT link directly to my .js files from your site. Copy // the files to your server and use them there. Thank you. // =================================================================== /* SOURCE FILE: AnchorPosition.js */ /* AnchorPosition.js Author: Matt Kruse Last modified: 10/11/02 DESCRIPTION: These functions find the position of an tag in a document, so other elements can be positioned relative to it. COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small positioning errors - usually with Window positioning - occur on the Macintosh platform. FUNCTIONS: getAnchorPosition(anchorname) Returns an Object() having .x and .y properties of the pixel coordinates of the upper-left corner of the anchor. Position is relative to the PAGE. getAnchorWindowPosition(anchorname) Returns an Object() having .x and .y properties of the pixel coordinates of the upper-left corner of the anchor, relative to the WHOLE SCREEN. NOTES: 1) For popping up separate browser windows, use getAnchorWindowPosition. Otherwise, use getAnchorPosition 2) Your anchor tag MUST contain both NAME and ID attributes which are the same. For example: 3) There must be at least a space between for IE5.5 to see the anchor tag correctly. Do not do with no space. */ // getAnchorPosition(anchorname) // This function returns an object having .x and .y properties which are the coordinates // of the named anchor, relative to the page. function getAnchorPosition(anchorname) { // This function will return an Object with x and y properties var useWindow=false; var coordinates=new Object(); var x=0,y=0; // Browser capability sniffing var use_gebi=false, use_css=false, use_layers=false; if (document.getElementById) { use_gebi=true; } else if (document.all) { use_css=true; } else if (document.layers) { use_layers=true; } // Logic to find position if (use_gebi && document.all) { x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]); y=AnchorPosition_getPageOffsetTop(document.all[anchorname]); } else if (use_gebi) { var o=document.getElementById(anchorname); x=AnchorPosition_getPageOffsetLeft(o); y=AnchorPosition_getPageOffsetTop(o); } else if (use_css) { x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]); y=AnchorPosition_getPageOffsetTop(document.all[anchorname]); } else if (use_layers) { var found=0; for (var i=0; i tags may cause errors. USAGE: // Create an object for a WINDOW popup var win = new PopupWindow(); // Create an object for a DIV window using the DIV named 'mydiv' var win = new PopupWindow('mydiv'); // Set the window to automatically hide itself when the user clicks // anywhere else on the page except the popup win.autoHide(); // Show the window relative to the anchor name passed in win.showPopup(anchorname); // Hide the popup win.hidePopup(); // Set the size of the popup window (only applies to WINDOW popups win.setSize(width,height); // Populate the contents of the popup window that will be shown. If you // change the contents while it is displayed, you will need to refresh() win.populate(string); // set the URL of the window, rather than populating its contents // manually win.setUrl("http://www.site.com/"); // Refresh the contents of the popup win.refresh(); // Specify how many pixels to the right of the anchor the popup will appear win.offsetX = 50; // Specify how many pixels below the anchor the popup will appear win.offsetY = 100; NOTES: 1) Requires the functions in AnchorPosition.js 2) Your anchor tag MUST contain both NAME and ID attributes which are the same. For example: 3) There must be at least a space between for IE5.5 to see the anchor tag correctly. Do not do with no space. 4) When a PopupWindow object is created, a handler for 'onmouseup' is attached to any event handler you may have already defined. Do NOT define an event handler for 'onmouseup' after you define a PopupWindow object or the autoHide() will not work correctly. */ // Set the position of the popup window based on the anchor function PopupWindow_getXYPosition(anchorname) { var coordinates; if (this.type == "WINDOW") { coordinates = getAnchorWindowPosition(anchorname); } else { coordinates = getAnchorPosition(anchorname); } this.x = coordinates.x; this.y = coordinates.y; } // Set width/height of DIV/popup window function PopupWindow_setSize(width,height) { this.width = width; this.height = height; } // Fill the window with contents function PopupWindow_populate(contents) { this.contents = contents; this.populated = false; } // Set the URL to go to function PopupWindow_setUrl(url) { this.url = url; } // Set the window popup properties function PopupWindow_setWindowProperties(props) { this.windowProperties = props; } // Refresh the displayed contents of the popup function PopupWindow_refresh() { if (this.divName != null) { // refresh the DIV object if (this.use_gebi) { document.getElementById(this.divName).innerHTML = this.contents; } else if (this.use_css) { document.all[this.divName].innerHTML = this.contents; } else if (this.use_layers) { var d = document.layers[this.divName]; d.document.open(); d.document.writeln(this.contents); d.document.close(); } } else { if (this.popupWindow != null && !this.popupWindow.closed) { if (this.url!="") { this.popupWindow.location.href=this.url; } else { this.popupWindow.document.open(); this.popupWindow.document.writeln(this.contents); this.popupWindow.document.close(); } this.popupWindow.focus(); } } } // Position and show the popup, relative to an anchor object function PopupWindow_showPopup(anchorname) { this.getXYPosition(anchorname); this.x += this.offsetX; this.y += this.offsetY; if (!this.populated && (this.contents != "")) { this.populated = true; this.refresh(); } if (this.divName != null) { // Show the DIV object if (this.use_gebi) { document.getElementById(this.divName).style.left = this.x + "px"; document.getElementById(this.divName).style.top = this.y; document.getElementById(this.divName).style.visibility = "visible"; } else if (this.use_css) { document.all[this.divName].style.left = this.x; document.all[this.divName].style.top = this.y; document.all[this.divName].style.visibility = "visible"; } else if (this.use_layers) { document.layers[this.divName].left = this.x; document.layers[this.divName].top = this.y; document.layers[this.divName].visibility = "visible"; } } else { if (this.popupWindow == null || this.popupWindow.closed) { // If the popup window will go off-screen, move it so it doesn't if (this.x<0) { this.x=0; } if (this.y<0) { this.y=0; } if (screen && screen.availHeight) { if ((this.y + this.height) > screen.availHeight) { this.y = screen.availHeight - this.height; } } if (screen && screen.availWidth) { if ((this.x + this.width) > screen.availWidth) { this.x = screen.availWidth - this.width; } } var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ); this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+""); } this.refresh(); } } // Hide the popup function PopupWindow_hidePopup() { if (this.divName != null) { if (this.use_gebi) { document.getElementById(this.divName).style.visibility = "hidden"; } else if (this.use_css) { document.all[this.divName].style.visibility = "hidden"; } else if (this.use_layers) { document.layers[this.divName].visibility = "hidden"; } } else { if (this.popupWindow && !this.popupWindow.closed) { this.popupWindow.close(); this.popupWindow = null; } } } // Pass an event and return whether or not it was the popup DIV that was clicked function PopupWindow_isClicked(e) { if (this.divName != null) { if (this.use_layers) { var clickX = e.pageX; var clickY = e.pageY; var t = document.layers[this.divName]; if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) { return true; } else { return false; } } else if (document.all) { // Need to hard-code this to trap IE for error-handling var t = window.event.srcElement; while (t.parentElement != null) { if (t.id==this.divName) { return true; } t = t.parentElement; } return false; } else if (this.use_gebi && e) { var t = e.originalTarget; while (t.parentNode != null) { if (t.id==this.divName) { return true; } t = t.parentNode; } return false; } return false; } return false; } // Check an onMouseDown event to see if we should hide function PopupWindow_hideIfNotClicked(e) { if (this.autoHideEnabled && !this.isClicked(e)) { this.hidePopup(); } } // Call this to make the DIV disable automatically when mouse is clicked outside it function PopupWindow_autoHide() { this.autoHideEnabled = true; } // This global function checks all PopupWindow objects onmouseup to see if they should be hidden function PopupWindow_hidePopupWindows(e) { for (var i=0; i0) { this.type="DIV"; this.divName = arguments[0]; } else { this.type="WINDOW"; } this.use_gebi = false; this.use_css = false; this.use_layers = false; if (document.getElementById) { this.use_gebi = true; } else if (document.all) { this.use_css = true; } else if (document.layers) { this.use_layers = true; } else { this.type = "WINDOW"; } this.offsetX = 0; this.offsetY = 0; // Method mappings this.getXYPosition = PopupWindow_getXYPosition; this.populate = PopupWindow_populate; this.setUrl = PopupWindow_setUrl; this.setWindowProperties = PopupWindow_setWindowProperties; this.refresh = PopupWindow_refresh; this.showPopup = PopupWindow_showPopup; this.hidePopup = PopupWindow_hidePopup; this.setSize = PopupWindow_setSize; this.isClicked = PopupWindow_isClicked; this.autoHide = PopupWindow_autoHide; this.hideIfNotClicked = PopupWindow_hideIfNotClicked; } /* SOURCE FILE: ColorPicker2.js */ /* Last modified: 02/24/2003 DESCRIPTION: This widget is used to select a color, in hexadecimal #RRGGBB form. It uses a color "swatch" to display the standard 216-color web-safe palette. The user can then click on a color to select it. COMPATABILITY: See notes in AnchorPosition.js and PopupWindow.js. Only the latest DHTML-capable browsers will show the color and hex values at the bottom as your mouse goes over them. USAGE: // Create a new ColorPicker object using DHTML popup var cp = new ColorPicker(); // Create a new ColorPicker object using Window Popup var cp = new ColorPicker('window'); // Add a link in your page to trigger the popup. For example: Pick // Or use the built-in "select" function to do the dirty work for you: Pick // If using DHTML popup, write out the required DIV tag near the bottom // of your page. // Write the 'pickColor' function that will be called when the user clicks // a color and do something with the value. This is only required if you // want to do something other than simply populate a form field, which is // what the 'select' function will give you. function pickColor(color) { field.value = color; } NOTES: 1) Requires the functions in AnchorPosition.js and PopupWindow.js 2) Your anchor tag MUST contain both NAME and ID attributes which are the same. For example: 3) There must be at least a space between for IE5.5 to see the anchor tag correctly. Do not do with no space. 4) When a ColorPicker object is created, a handler for 'onmouseup' is attached to any event handler you may have already defined. Do NOT define an event handler for 'onmouseup' after you define a ColorPicker object or the color picker will not hide itself correctly. */ ColorPicker_targetInput = null; function ColorPicker_writeDiv() { document.writeln(""); } function ColorPicker_show(anchorname) { this.showPopup(anchorname); } function ColorPicker_pickColor(color,obj) { obj.hidePopup(); pickColor(color); } // A Default "pickColor" function to accept the color passed back from popup. // User can over-ride this with their own function. function pickColor(color) { if (ColorPicker_targetInput==null) { alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!"); return; } ColorPicker_targetInput.value = color; } // This function is the easiest way to popup the window, select a color, and // have the value populate a form field, which is what most people want to do. function ColorPicker_select(inputobj,linkname) { if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") { alert("colorpicker.select: Input object passed is not a valid form input object"); window.ColorPicker_targetInput=null; return; } window.ColorPicker_targetInput = inputobj; this.show(linkname); } // This function runs when you move your mouse over a color block, if you have a newer browser function ColorPicker_highlightColor(c) { var thedoc = (arguments.length>1)?arguments[1]:window.document; var d = thedoc.getElementById("colorPickerSelectedColor"); d.style.backgroundColor = c; d = thedoc.getElementById("colorPickerSelectedColorValue"); d.innerHTML = c; } function ColorPicker() { var windowMode = false; // Create a new PopupWindow object if (arguments.length==0) { var divname = "colorPickerDiv"; } else if (arguments[0] == "window") { var divname = ''; windowMode = true; } else { var divname = arguments[0]; } if (divname != "") { var cp = new PopupWindow(divname); } else { var cp = new PopupWindow(); cp.setSize(225,250); } // Object variables cp.currentValue = "#FFFFFF"; // Method Mappings cp.writeDiv = ColorPicker_writeDiv; cp.highlightColor = ColorPicker_highlightColor; cp.show = ColorPicker_show; cp.select = ColorPicker_select; // Code to populate color picker window var colors = new Array( "#4180B6","#69AEE7","#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099", "#3300CC","#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099", "#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066","#FF0099", "#FF00CC","#FF00FF","#7FFFFF","#7FFFFF","#7FF7F7","#7FEFEF","#7FE7E7","#7FDFDF","#7FD7D7","#7FCFCF","#7FC7C7","#7FBFBF", "#7FB7B7","#7FAFAF","#7FA7A7","#7F9F9F","#7F9797","#7F8F8F","#7F8787","#7F7F7F","#7F7777","#7F6F6F","#7F6767","#7F5F5F", "#7F5757","#7F4F4F","#7F4747","#7F3F3F","#7F3737","#7F2F2F","#7F2727","#7F1F1F","#7F1717","#7F0F0F","#7F0707","#7F0000", "#4180B6","#69AEE7","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333","#333366","#333399", "#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300","#993333","#993366","#993399", "#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#FF3300","#FF3333","#FF3366","#FF3399", "#FF33CC","#FF33FF","#FF7FFF","#FF7FFF","#F77FF7","#EF7FEF","#E77FE7","#DF7FDF","#D77FD7","#CF7FCF","#C77FC7","#BF7FBF", "#B77FB7","#AF7FAF","#A77FA7","#9F7F9F","#977F97","#8F7F8F","#877F87","#7F7F7F","#777F77","#6F7F6F","#677F67","#5F7F5F", "#577F57","#4F7F4F","#477F47","#3F7F3F","#377F37","#2F7F2F","#277F27","#1F7F1F","#177F17","#0F7F0F","#077F07","#007F00", "#4180B6","#69AEE7","#006600","#006633","#006666","#006699","#0066CC","#0066FF","#336600","#336633","#336666","#336699", "#3366CC","#3366FF","#666600","#666633","#666666","#666699","#6666CC","#6666FF","#996600","#996633","#996666","#996699", "#9966CC","#9966FF","#CC6600","#CC6633","#CC6666","#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699", "#FF66CC","#FF66FF","#FFFF7F","#FFFF7F","#F7F77F","#EFEF7F","#E7E77F","#DFDF7F","#D7D77F","#CFCF7F","#C7C77F","#BFBF7F", "#B7B77F","#AFAF7F","#A7A77F","#9F9F7F","#97977F","#8F8F7F","#87877F","#7F7F7F","#77777F","#6F6F7F","#67677F","#5F5F7F", "#57577F","#4F4F7F","#47477F","#3F3F7F","#37377F","#2F2F7F","#27277F","#1F1F7F","#17177F","#0F0F7F","#07077F","#00007F", "#4180B6","#69AEE7","#009900","#009933","#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999", "#3399CC","#3399FF","#669900","#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999", "#9999CC","#9999FF","#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999", "#FF99CC","#FF99FF","#3FFFFF","#3FFFFF","#3FF7F7","#3FEFEF","#3FE7E7","#3FDFDF","#3FD7D7","#3FCFCF","#3FC7C7","#3FBFBF", "#3FB7B7","#3FAFAF","#3FA7A7","#3F9F9F","#3F9797","#3F8F8F","#3F8787","#3F7F7F","#3F7777","#3F6F6F","#3F6767","#3F5F5F", "#3F5757","#3F4F4F","#3F4747","#3F3F3F","#3F3737","#3F2F2F","#3F2727","#3F1F1F","#3F1717","#3F0F0F","#3F0707","#3F0000", "#4180B6","#69AEE7","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99", "#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66","#99CC99", "#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33","#FFCC66","#FFCC99", "#FFCCCC","#FFCCFF","#FF3FFF","#FF3FFF","#F73FF7","#EF3FEF","#E73FE7","#DF3FDF","#D73FD7","#CF3FCF","#C73FC7","#BF3FBF", "#B73FB7","#AF3FAF","#A73FA7","#9F3F9F","#973F97","#8F3F8F","#873F87","#7F3F7F","#773F77","#6F3F6F","#673F67","#5F3F5F", "#573F57","#4F3F4F","#473F47","#3F3F3F","#373F37","#2F3F2F","#273F27","#1F3F1F","#173F17","#0F3F0F","#073F07","#003F00", "#4180B6","#69AEE7","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00","#33FF33","#33FF66","#33FF99", "#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF","#99FF00","#99FF33","#99FF66","#99FF99", "#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC","#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99", "#FFFFCC","#FFFFFF","#FFFF3F","#FFFF3F","#F7F73F","#EFEF3F","#E7E73F","#DFDF3F","#D7D73F","#CFCF3F","#C7C73F","#BFBF3F", "#B7B73F","#AFAF3F","#A7A73F","#9F9F3F","#97973F","#8F8F3F","#87873F","#7F7F3F","#77773F","#6F6F3F","#67673F","#5F5F3F", "#57573F","#4F4F3F","#47473F","#3F3F3F","#37373F","#2F2F3F","#27273F","#1F1F3F","#17173F","#0F0F3F","#07073F","#00003F", "#4180B6","#69AEE7","#FFFFFF","#FFEEEE","#FFDDDD","#FFCCCC","#FFBBBB","#FFAAAA","#FF9999","#FF8888","#FF7777","#FF6666", "#FF5555","#FF4444","#FF3333","#FF2222","#FF1111","#FF0000","#FF0000","#FF0000","#FF0000","#EE0000","#DD0000","#CC0000", "#BB0000","#AA0000","#990000","#880000","#770000","#660000","#550000","#440000","#330000","#220000","#110000","#000000", "#000000","#000000","#000000","#001111","#002222","#003333","#004444","#005555","#006666","#007777","#008888","#009999", "#00AAAA","#00BBBB","#00CCCC","#00DDDD","#00EEEE","#00FFFF","#00FFFF","#00FFFF","#00FFFF","#11FFFF","#22FFFF","#33FFFF", "#44FFFF","#55FFFF","#66FFFF","#77FFFF","#88FFFF","#99FFFF","#AAFFFF","#BBFFFF","#CCFFFF","#DDFFFF","#EEFFFF","#FFFFFF", "#4180B6","#69AEE7","#FFFFFF","#EEFFEE","#DDFFDD","#CCFFCC","#BBFFBB","#AAFFAA","#99FF99","#88FF88","#77FF77","#66FF66", "#55FF55","#44FF44","#33FF33","#22FF22","#11FF11","#00FF00","#00FF00","#00FF00","#00FF00","#00EE00","#00DD00","#00CC00", "#00BB00","#00AA00","#009900","#008800","#007700","#006600","#005500","#004400","#003300","#002200","#001100","#000000", "#000000","#000000","#000000","#110011","#220022","#330033","#440044","#550055","#660066","#770077","#880088","#990099", "#AA00AA","#BB00BB","#CC00CC","#DD00DD","#EE00EE","#FF00FF","#FF00FF","#FF00FF","#FF00FF","#FF11FF","#FF22FF","#FF33FF", "#FF44FF","#FF55FF","#FF66FF","#FF77FF","#FF88FF","#FF99FF","#FFAAFF","#FFBBFF","#FFCCFF","#FFDDFF","#FFEEFF","#FFFFFF", "#4180B6","#69AEE7","#FFFFFF","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF","#7777FF","#6666FF", "#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000EE","#0000DD","#0000CC", "#0000BB","#0000AA","#000099","#000088","#000077","#000066","#000055","#000044","#000033","#000022","#000011","#000000", "#000000","#000000","#000000","#111100","#222200","#333300","#444400","#555500","#666600","#777700","#888800","#999900", "#AAAA00","#BBBB00","#CCCC00","#DDDD00","#EEEE00","#FFFF00","#FFFF00","#FFFF00","#FFFF00","#FFFF11","#FFFF22","#FFFF33", "#FFFF44","#FFFF55","#FFFF66","#FFFF77","#FFFF88","#FFFF99","#FFFFAA","#FFFFBB","#FFFFCC","#FFFFDD","#FFFFEE","#FFFFFF", "#4180B6","#69AEE7","#FFFFFF","#FFFFFF","#FBFBFB","#F7F7F7","#F3F3F3","#EFEFEF","#EBEBEB","#E7E7E7","#E3E3E3","#DFDFDF", "#DBDBDB","#D7D7D7","#D3D3D3","#CFCFCF","#CBCBCB","#C7C7C7","#C3C3C3","#BFBFBF","#BBBBBB","#B7B7B7","#B3B3B3","#AFAFAF", "#ABABAB","#A7A7A7","#A3A3A3","#9F9F9F","#9B9B9B","#979797","#939393","#8F8F8F","#8B8B8B","#878787","#838383","#7F7F7F", "#7B7B7B","#777777","#737373","#6F6F6F","#6B6B6B","#676767","#636363","#5F5F5F","#5B5B5B","#575757","#535353","#4F4F4F", "#4B4B4B","#474747","#434343","#3F3F3F","#3B3B3B","#373737","#333333","#2F2F2F","#2B2B2B","#272727","#232323","#1F1F1F", "#1B1B1B","#171717","#131313","#0F0F0F","#0B0B0B","#070707","#030303","#000000","#000000","#000000","#000000","#000000"); var total = colors.length; var width = 72; var cp_contents = ""; var windowRef = (windowMode)?"window.opener.":""; if (windowMode) { cp_contents += "Select Color"; cp_contents += "
    "; } cp_contents += ""; var use_highlight = (document.getElementById || document.all)?true:false; for (var i=0; i '; if ( ((i+1)>=total) || (((i+1) % width) == 0)) { cp_contents += ""; } } // If the browser supports dynamically changing TD cells, add the fancy stuff if (document.getElementById) { var width1 = Math.floor(width/2); var width2 = width = width1; cp_contents += ""; } cp_contents += "
     #FFFFFF
    "; if (windowMode) { cp_contents += "
    "; } // end populate code // Write the contents to the popup object cp.populate(cp_contents+"\n"); // Move the table down a bit so you can see it cp.offsetY = 25; cp.autoHide(); return cp; } )wordpress/wp-includes/js/crop/cropper.css .imgCrop_wrap { /* width: 500px; @done_in_js */ /* height: 375px; @done_in_js */ position: relative; cursor: crosshair; } /* an extra classname is applied for Opera < 9.0 to fix it's lack of opacity support */ .imgCrop_wrap.opera8 .imgCrop_overlay, .imgCrop_wrap.opera8 .imgCrop_clickArea { background-color: transparent; } /* fix for IE displaying all boxes at line-height by default, although they are still 1 pixel high until we combine them with the pointless span */ .imgCrop_wrap, .imgCrop_wrap * { font-size: 0; } .imgCrop_overlay { background-color: #000; opacity: 0.5; filter:alpha(opacity=50); position: absolute; width: 100%; height: 100%; } .imgCrop_selArea { position: absolute; /* @done_in_js top: 20px; left: 20px; width: 200px; height: 200px; background: transparent url(castle.jpg) no-repeat -210px -110px; */ cursor: move; z-index: 2; } /* clickArea is all a fix for IE 5.5 & 6 to allow the user to click on the given area */ .imgCrop_clickArea { width: 100%; height: 100%; background-color: #FFF; opacity: 0.01; filter:alpha(opacity=01); } .imgCrop_marqueeHoriz { position: absolute; width: 100%; height: 1px; background: transparent url(marqueeHoriz.gif) repeat-x 0 0; z-index: 3; } .imgCrop_marqueeVert { position: absolute; height: 100%; width: 1px; background: transparent url(marqueeVert.gif) repeat-y 0 0; z-index: 3; } .imgCrop_marqueeNorth { top: 0; left: 0; } .imgCrop_marqueeEast { top: 0; right: 0; } .imgCrop_marqueeSouth { bottom: 0px; left: 0; } .imgCrop_marqueeWest { top: 0; left: 0; } .imgCrop_handle { position: absolute; border: 1px solid #333; width: 6px; height: 6px; background: #FFF; opacity: 0.5; filter:alpha(opacity=50); z-index: 4; } /* fix IE 5 box model */ * html .imgCrop_handle { width: 8px; height: 8px; wid\th: 6px; hei\ght: 6px; } .imgCrop_handleN { top: -3px; left: 0; /* margin-left: 49%; @done_in_js */ cursor: n-resize; } .imgCrop_handleNE { top: -3px; right: -3px; cursor: ne-resize; } .imgCrop_handleE { top: 0; right: -3px; /* margin-top: 49%; @done_in_js */ cursor: e-resize; } .imgCrop_handleSE { right: -3px; bottom: -3px; cursor: se-resize; } .imgCrop_handleS { right: 0; bottom: -3px; /* margin-right: 49%; @done_in_js */ cursor: s-resize; } .imgCrop_handleSW { left: -3px; bottom: -3px; cursor: sw-resize; } .imgCrop_handleW { top: 0; left: -3px; /* margin-top: 49%; @done_in_js */ cursor: e-resize; } .imgCrop_handleNW { top: -3px; left: -3px; cursor: nw-resize; } /** * Create an area to click & drag around on as the default browser behaviour is to let you drag the image */ .imgCrop_dragArea { width: 100%; height: 100%; z-index: 200; position: absolute; top: 0; left: 0; } .imgCrop_previewWrap { /* width: 200px; @done_in_js */ /* height: 200px; @done_in_js */ overflow: hidden; position: relative; } .imgCrop_previewWrap img { position: absolute; }(wordpress/wp-includes/js/crop/cropper.js@e/** * Copyright (c) 2006, David Spurr (http://www.defusion.org.uk/) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * http://www.opensource.org/licenses/bsd-license.php * * See scriptaculous.js for full scriptaculous licence */ var CropDraggable=Class.create(); Object.extend(Object.extend(CropDraggable.prototype,Draggable.prototype),{initialize:function(_1){ this.options=Object.extend({drawMethod:function(){ }},arguments[1]||{}); this.element=$(_1); this.handle=this.element; this.delta=this.currentDelta(); this.dragging=false; this.eventMouseDown=this.initDrag.bindAsEventListener(this); Event.observe(this.handle,"mousedown",this.eventMouseDown); Draggables.register(this); },draw:function(_2){ var _3=Position.cumulativeOffset(this.element); var d=this.currentDelta(); _3[0]-=d[0]; _3[1]-=d[1]; var p=[0,1].map(function(i){ return (_2[i]-_3[i]-this.offset[i]); }.bind(this)); this.options.drawMethod(p); }}); var Cropper={}; Cropper.Img=Class.create(); Cropper.Img.prototype={initialize:function(_7,_8){ this.options=Object.extend({ratioDim:{x:0,y:0},minWidth:0,minHeight:0,displayOnInit:false,onEndCrop:Prototype.emptyFunction,captureKeys:true},_8||{}); if(this.options.minWidth>0&&this.options.minHeight>0){ this.options.ratioDim.x=this.options.minWidth; this.options.ratioDim.y=this.options.minHeight; } this.img=$(_7); this.clickCoords={x:0,y:0}; this.dragging=false; this.resizing=false; this.isWebKit=/Konqueror|Safari|KHTML/.test(navigator.userAgent); this.isIE=/MSIE/.test(navigator.userAgent); this.isOpera8=/Opera\s[1-8]/.test(navigator.userAgent); this.ratioX=0; this.ratioY=0; this.attached=false; $A(document.getElementsByTagName("script")).each(function(s){ if(s.src.match(/cropper\.js/)){ var _a=s.src.replace(/cropper\.js(.*)?/,""); var _b=document.createElement("link"); _b.rel="stylesheet"; _b.type="text/css"; _b.href=_a+"cropper.css"; _b.media="screen"; document.getElementsByTagName("head")[0].appendChild(_b); } }); if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0){ var _c=this.getGCD(this.options.ratioDim.x,this.options.ratioDim.y); this.ratioX=this.options.ratioDim.x/_c; this.ratioY=this.options.ratioDim.y/_c; } this.subInitialize(); if(this.img.complete||this.isWebKit){ this.onLoad(); }else{ Event.observe(this.img,"load",this.onLoad.bindAsEventListener(this)); } },getGCD:function(a,b){return 1; if(b==0){ return a; } return this.getGCD(b,a%b); },onLoad:function(){ var _f="imgCrop_"; var _10=this.img.parentNode; var _11=""; if(this.isOpera8){ _11=" opera8"; } this.imgWrap=Builder.node("div",{"class":_f+"wrap"+_11}); if(this.isIE){ this.north=Builder.node("div",{"class":_f+"overlay "+_f+"north"},[Builder.node("span")]); this.east=Builder.node("div",{"class":_f+"overlay "+_f+"east"},[Builder.node("span")]); this.south=Builder.node("div",{"class":_f+"overlay "+_f+"south"},[Builder.node("span")]); this.west=Builder.node("div",{"class":_f+"overlay "+_f+"west"},[Builder.node("span")]); var _12=[this.north,this.east,this.south,this.west]; }else{ this.overlay=Builder.node("div",{"class":_f+"overlay"}); var _12=[this.overlay]; } this.dragArea=Builder.node("div",{"class":_f+"dragArea"},_12); this.handleN=Builder.node("div",{"class":_f+"handle "+_f+"handleN"}); this.handleNE=Builder.node("div",{"class":_f+"handle "+_f+"handleNE"}); this.handleE=Builder.node("div",{"class":_f+"handle "+_f+"handleE"}); this.handleSE=Builder.node("div",{"class":_f+"handle "+_f+"handleSE"}); this.handleS=Builder.node("div",{"class":_f+"handle "+_f+"handleS"}); this.handleSW=Builder.node("div",{"class":_f+"handle "+_f+"handleSW"}); this.handleW=Builder.node("div",{"class":_f+"handle "+_f+"handleW"}); this.handleNW=Builder.node("div",{"class":_f+"handle "+_f+"handleNW"}); this.selArea=Builder.node("div",{"class":_f+"selArea"},[Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeNorth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeEast"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeSouth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeWest"},[Builder.node("span")]),this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW,Builder.node("div",{"class":_f+"clickArea"})]); Element.setStyle($(this.selArea),{backgroundColor:"transparent",backgroundRepeat:"no-repeat",backgroundPosition:"0 0"}); this.imgWrap.appendChild(this.img); this.imgWrap.appendChild(this.dragArea); this.dragArea.appendChild(this.selArea); this.dragArea.appendChild(Builder.node("div",{"class":_f+"clickArea"})); _10.appendChild(this.imgWrap); Event.observe(this.dragArea,"mousedown",this.startDrag.bindAsEventListener(this)); Event.observe(document,"mousemove",this.onDrag.bindAsEventListener(this)); Event.observe(document,"mouseup",this.endCrop.bindAsEventListener(this)); var _13=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW]; for(var i=0;i<_13.length;i++){ Event.observe(_13[i],"mousedown",this.startResize.bindAsEventListener(this)); } if(this.options.captureKeys){ Event.observe(document,"keydown",this.handleKeys.bindAsEventListener(this)); } new CropDraggable(this.selArea,{drawMethod:this.moveArea.bindAsEventListener(this)}); this.setParams(); },setParams:function(){ this.imgW=this.img.width; this.imgH=this.img.height; if(!this.isIE){ Element.setStyle($(this.overlay),{width:this.imgW+"px",height:this.imgH+"px"}); Element.hide($(this.overlay)); Element.setStyle($(this.selArea),{backgroundImage:"url("+this.img.src+")"}); }else{ Element.setStyle($(this.north),{height:0}); Element.setStyle($(this.east),{width:0,height:0}); Element.setStyle($(this.south),{height:0}); Element.setStyle($(this.west),{width:0,height:0}); } Element.setStyle($(this.imgWrap),{"width":this.imgW+"px","height":this.imgH+"px"}); Element.hide($(this.selArea)); var _15=Position.positionedOffset(this.imgWrap); this.wrapOffsets={"top":_15[1],"left":_15[0]}; var _16={x1:0,y1:0,x2:0,y2:0}; this.setAreaCoords(_16); if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0&&this.options.displayOnInit){ _16.x1=Math.ceil((this.imgW-this.options.ratioDim.x)/2); _16.y1=Math.ceil((this.imgH-this.options.ratioDim.y)/2); _16.x2=_16.x1+this.options.ratioDim.x; _16.y2=_16.y1+this.options.ratioDim.y; Element.show(this.selArea); this.drawArea(); this.endCrop(); } this.attached=true; },remove:function(){ this.attached=false; this.imgWrap.parentNode.insertBefore(this.img,this.imgWrap); this.imgWrap.parentNode.removeChild(this.imgWrap); Event.stopObserving(this.dragArea,"mousedown",this.startDrag.bindAsEventListener(this)); Event.stopObserving(document,"mousemove",this.onDrag.bindAsEventListener(this)); Event.stopObserving(document,"mouseup",this.endCrop.bindAsEventListener(this)); var _17=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW]; for(var i=0;i<_17.length;i++){ Event.stopObserving(_17[i],"mousedown",this.startResize.bindAsEventListener(this)); } if(this.options.captureKeys){ Event.stopObserving(document,"keydown",this.handleKeys.bindAsEventListener(this)); } },reset:function(){ if(!this.attached){ this.onLoad(); }else{ this.setParams(); } this.endCrop(); },handleKeys:function(e){ var dir={x:0,y:0}; if(!this.dragging){ switch(e.keyCode){ case (37): dir.x=-1; break; case (38): dir.y=-1; break; case (39): dir.x=1; break; case (40): dir.y=1; break; } if(dir.x!=0||dir.y!=0){ if(e.shiftKey){ dir.x*=10; dir.y*=10; } this.moveArea([this.areaCoords.x1+dir.x,this.areaCoords.y1+dir.y]); Event.stop(e); } } },calcW:function(){ return (this.areaCoords.x2-this.areaCoords.x1); },calcH:function(){ return (this.areaCoords.y2-this.areaCoords.y1); },moveArea:function(_1b){ this.setAreaCoords({x1:_1b[0],y1:_1b[1],x2:_1b[0]+this.calcW(),y2:_1b[1]+this.calcH()},true); this.drawArea(); },cloneCoords:function(_1c){ return {x1:_1c.x1,y1:_1c.y1,x2:_1c.x2,y2:_1c.y2}; },setAreaCoords:function(_1d,_1e,_1f,_20,_21){ var _22=typeof _1e!="undefined"?_1e:false; var _23=typeof _1f!="undefined"?_1f:false; if(_1e){ var _24=_1d.x2-_1d.x1; var _25=_1d.y2-_1d.y1; if(_1d.x1<0){ _1d.x1=0; _1d.x2=_24; } if(_1d.y1<0){ _1d.y1=0; _1d.y2=_25; } if(_1d.x2>this.imgW){ _1d.x2=this.imgW; _1d.x1=this.imgW-_24; } if(_1d.y2>this.imgH){ _1d.y2=this.imgH; _1d.y1=this.imgH-_25; } }else{ if(_1d.x1<0){ _1d.x1=0; } if(_1d.y1<0){ _1d.y1=0; } if(_1d.x2>this.imgW){ _1d.x2=this.imgW; } if(_1d.y2>this.imgH){ _1d.y2=this.imgH; } if(typeof (_20)!="undefined"){ if(this.ratioX>0){ this.applyRatio(_1d,{x:this.ratioX,y:this.ratioY},_20,_21); }else{ if(_23){ this.applyRatio(_1d,{x:1,y:1},_20,_21); } } var _26={a1:_1d.x1,a2:_1d.x2}; var _27={a1:_1d.y1,a2:_1d.y2}; var _28=this.options.minWidth; var _29=this.options.minHeight; if((_28==0||_29==0)&&_23){ if(_28>0){ _29=_28; }else{ if(_29>0){ _28=_29; } } } this.applyMinDimension(_26,_28,_20.x,{min:0,max:this.imgW}); this.applyMinDimension(_27,_29,_20.y,{min:0,max:this.imgH}); _1d={x1:_26.a1,y1:_27.a1,x2:_26.a2,y2:_27.a2}; } } this.areaCoords=_1d; },applyMinDimension:function(_2a,_2b,_2c,_2d){ if((_2a.a2-_2a.a1)<_2b){ if(_2c==1){ _2a.a2=_2a.a1+_2b; }else{ _2a.a1=_2a.a2-_2b; } if(_2a.a1<_2d.min){ _2a.a1=_2d.min; _2a.a2=_2b; }else{ if(_2a.a2>_2d.max){ _2a.a1=_2d.max-_2b; _2a.a2=_2d.max; } } } },applyRatio:function(_2e,_2f,_30,_31){ var _32; if(_31=="N"||_31=="S"){ _32=this.applyRatioToAxis({a1:_2e.y1,b1:_2e.x1,a2:_2e.y2,b2:_2e.x2},{a:_2f.y,b:_2f.x},{a:_30.y,b:_30.x},{min:0,max:this.imgW}); _2e.x1=_32.b1; _2e.y1=_32.a1; _2e.x2=_32.b2; _2e.y2=_32.a2; }else{ _32=this.applyRatioToAxis({a1:_2e.x1,b1:_2e.y1,a2:_2e.x2,b2:_2e.y2},{a:_2f.x,b:_2f.y},{a:_30.x,b:_30.y},{min:0,max:this.imgH}); _2e.x1=_32.a1; _2e.y1=_32.b1; _2e.x2=_32.a2; _2e.y2=_32.b2; } },applyRatioToAxis:function(_33,_34,_35,_36){ var _37=Object.extend(_33,{}); var _38=_37.a2-_37.a1; var _3a=Math.floor(_38*_34.b/_34.a); var _3b; var _3c; var _3d=null; if(_35.b==1){ _3b=_37.b1+_3a; if(_3b>_36.max){ _3b=_36.max; _3d=_3b-_37.b1; } _37.b2=_3b; }else{ _3b=_37.b2-_3a; if(_3b<_36.min){ _3b=_36.min; _3d=_3b+_37.b2; } _37.b1=_3b; } if(_3d!=null){ _3c=Math.floor(_3d*_34.a/_34.b); if(_35.a==1){ _37.a2=_37.a1+_3c; }else{ _37.a1=_37.a1=_37.a2-_3c; } } return _37; },drawArea:function(){ if(!this.isIE){ Element.show($(this.overlay)); } var _3e=this.calcW(); var _3f=this.calcH(); var _40=this.areaCoords.x2; var _41=this.areaCoords.y2; var _42=this.selArea.style; _42.left=this.areaCoords.x1+"px"; _42.top=this.areaCoords.y1+"px"; _42.width=_3e+"px"; _42.height=_3f+"px"; var _43=Math.ceil((_3e-6)/2)+"px"; var _44=Math.ceil((_3f-6)/2)+"px"; this.handleN.style.left=_43; this.handleE.style.top=_44; this.handleS.style.left=_43; this.handleW.style.top=_44; if(this.isIE){ this.north.style.height=this.areaCoords.y1+"px"; var _45=this.east.style; _45.top=this.areaCoords.y1+"px"; _45.height=_3f+"px"; _45.left=_40+"px"; _45.width=(this.img.width-_40)+"px"; var _46=this.south.style; _46.top=_41+"px"; _46.height=(this.img.height-_41)+"px"; var _47=this.west.style; _47.top=this.areaCoords.y1+"px"; _47.height=_3f+"px"; _47.width=this.areaCoords.x1+"px"; }else{ _42.backgroundPosition="-"+this.areaCoords.x1+"px "+"-"+this.areaCoords.y1+"px"; } this.subDrawArea(); this.forceReRender(); },forceReRender:function(){ if(this.isIE||this.isWebKit){ var n=document.createTextNode(" "); var d,el,fixEL,i; if(this.isIE){ fixEl=this.selArea; }else{ if(this.isWebKit){ fixEl=document.getElementsByClassName("imgCrop_marqueeSouth",this.imgWrap)[0]; d=Builder.node("div",""); d.style.visibility="hidden"; var _4a=["SE","S","SW"]; for(i=0;i<_4a.length;i++){ el=document.getElementsByClassName("imgCrop_handle"+_4a[i],this.selArea)[0]; if(el.childNodes.length){ el.removeChild(el.childNodes[0]); } el.appendChild(d); } } } fixEl.appendChild(n); fixEl.removeChild(n); } },startResize:function(e){ this.startCoords=this.cloneCoords(this.areaCoords); this.resizing=true; this.resizeHandle=Element.classNames(Event.element(e)).toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/,""); Event.stop(e); },startDrag:function(e){ Element.show(this.selArea); this.clickCoords=this.getCurPos(e); this.setAreaCoords({x1:this.clickCoords.x,y1:this.clickCoords.y,x2:this.clickCoords.x,y2:this.clickCoords.y}); this.dragging=true; this.onDrag(e); Event.stop(e); },getCurPos:function(e){ return curPos={x:Event.pointerX(e)-this.wrapOffsets.left,y:Event.pointerY(e)-this.wrapOffsets.top}; },onDrag:function(e){ var _4f=null; if(this.dragging||this.resizing){ var _50=this.getCurPos(e); var _51=this.cloneCoords(this.areaCoords); var _52={x:1,y:1}; } if(this.dragging){ if(_50.x0&&this.options.minHeight>0){ this.previewWrap=$(this.options.previewWrap); this.previewImg=this.img.cloneNode(false); this.options.displayOnInit=true; this.hasPreviewImg=true; Element.addClassName(this.previewWrap,"imgCrop_previewWrap"); Element.setStyle(this.previewWrap,{width:this.options.minWidth+"px",height:this.options.minHeight+"px"}); this.previewWrap.appendChild(this.previewImg); } },subDrawArea:function(){ if(this.hasPreviewImg){ var _58=this.calcW(); var _59=this.calcH(); var _5a={x:this.imgW/_58,y:this.imgH/_59}; var _5b={x:_58/this.options.minWidth,y:_59/this.options.minHeight}; var _5c={w:Math.ceil(this.options.minWidth*_5a.x)+"px",h:Math.ceil(this.options.minHeight*_5a.y)+"px",x:"-"+Math.ceil(this.areaCoords.x1/_5b.x)+"px",y:"-"+Math.ceil(this.areaCoords.y1/_5b.y)+"px"}; var _5d=this.previewImg.style; _5d.width=_5c.w; _5d.height=_5c.h; _5d.left=_5c.x; _5d.top=_5c.y; } }}); .wordpress/wp-includes/js/crop/marqueeHoriz.gifeGIF89a ! NETSCAPE2.0! ,    "4xp À! , A"`A! , G@ Lxp`A! , G(h C! , ࿁ "4xp À! , A"`A! , @@ Lxp`A!,  @+h ;-wordpress/wp-includes/js/crop/marqueeVert.gifuGIF89a(! NETSCAPE2.0! ,(   "4xp Å! ,(A"`! ,(G@ Lxp` ! ,(G(h C! ,(࿁ "4xp Å! ,(A"`! ,(@@ Lxp` !,( @+h C;*wordpress/wp-includes/js/crop/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/crop svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 marqueeHoriz.gif file 2008-11-20T16:30:26.000000Z 9b4c27fccf817923f59b78fa6099c376 2008-10-28T18:17:06.112729Z 97 paul has-props cropper.css file 2008-11-20T16:30:26.000000Z de9cb42ec723c60deb69440104800c22 2008-10-28T18:17:06.112729Z 97 paul marqueeVert.gif file 2008-11-20T16:30:26.000000Z 2b2adfe6df6517f146b5b7c5b86eda42 2008-10-28T18:17:06.112729Z 97 paul has-props cropper.js file 2008-11-20T16:30:26.000000Z 1d97b296d918482e1273c56fbff6a8e2 2008-10-28T18:17:06.112729Z 97 paul )wordpress/wp-includes/js/crop/.svn/format8 Fwordpress/wp-includes/js/crop/.svn/prop-base/marqueeHoriz.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ewordpress/wp-includes/js/crop/.svn/prop-base/marqueeVert.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Awordpress/wp-includes/js/crop/.svn/text-base/cropper.css.svn-base .imgCrop_wrap { /* width: 500px; @done_in_js */ /* height: 375px; @done_in_js */ position: relative; cursor: crosshair; } /* an extra classname is applied for Opera < 9.0 to fix it's lack of opacity support */ .imgCrop_wrap.opera8 .imgCrop_overlay, .imgCrop_wrap.opera8 .imgCrop_clickArea { background-color: transparent; } /* fix for IE displaying all boxes at line-height by default, although they are still 1 pixel high until we combine them with the pointless span */ .imgCrop_wrap, .imgCrop_wrap * { font-size: 0; } .imgCrop_overlay { background-color: #000; opacity: 0.5; filter:alpha(opacity=50); position: absolute; width: 100%; height: 100%; } .imgCrop_selArea { position: absolute; /* @done_in_js top: 20px; left: 20px; width: 200px; height: 200px; background: transparent url(castle.jpg) no-repeat -210px -110px; */ cursor: move; z-index: 2; } /* clickArea is all a fix for IE 5.5 & 6 to allow the user to click on the given area */ .imgCrop_clickArea { width: 100%; height: 100%; background-color: #FFF; opacity: 0.01; filter:alpha(opacity=01); } .imgCrop_marqueeHoriz { position: absolute; width: 100%; height: 1px; background: transparent url(marqueeHoriz.gif) repeat-x 0 0; z-index: 3; } .imgCrop_marqueeVert { position: absolute; height: 100%; width: 1px; background: transparent url(marqueeVert.gif) repeat-y 0 0; z-index: 3; } .imgCrop_marqueeNorth { top: 0; left: 0; } .imgCrop_marqueeEast { top: 0; right: 0; } .imgCrop_marqueeSouth { bottom: 0px; left: 0; } .imgCrop_marqueeWest { top: 0; left: 0; } .imgCrop_handle { position: absolute; border: 1px solid #333; width: 6px; height: 6px; background: #FFF; opacity: 0.5; filter:alpha(opacity=50); z-index: 4; } /* fix IE 5 box model */ * html .imgCrop_handle { width: 8px; height: 8px; wid\th: 6px; hei\ght: 6px; } .imgCrop_handleN { top: -3px; left: 0; /* margin-left: 49%; @done_in_js */ cursor: n-resize; } .imgCrop_handleNE { top: -3px; right: -3px; cursor: ne-resize; } .imgCrop_handleE { top: 0; right: -3px; /* margin-top: 49%; @done_in_js */ cursor: e-resize; } .imgCrop_handleSE { right: -3px; bottom: -3px; cursor: se-resize; } .imgCrop_handleS { right: 0; bottom: -3px; /* margin-right: 49%; @done_in_js */ cursor: s-resize; } .imgCrop_handleSW { left: -3px; bottom: -3px; cursor: sw-resize; } .imgCrop_handleW { top: 0; left: -3px; /* margin-top: 49%; @done_in_js */ cursor: e-resize; } .imgCrop_handleNW { top: -3px; left: -3px; cursor: nw-resize; } /** * Create an area to click & drag around on as the default browser behaviour is to let you drag the image */ .imgCrop_dragArea { width: 100%; height: 100%; z-index: 200; position: absolute; top: 0; left: 0; } .imgCrop_previewWrap { /* width: 200px; @done_in_js */ /* height: 200px; @done_in_js */ overflow: hidden; position: relative; } .imgCrop_previewWrap img { position: absolute; }@wordpress/wp-includes/js/crop/.svn/text-base/cropper.js.svn-base@e/** * Copyright (c) 2006, David Spurr (http://www.defusion.org.uk/) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of the David Spurr nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * http://www.opensource.org/licenses/bsd-license.php * * See scriptaculous.js for full scriptaculous licence */ var CropDraggable=Class.create(); Object.extend(Object.extend(CropDraggable.prototype,Draggable.prototype),{initialize:function(_1){ this.options=Object.extend({drawMethod:function(){ }},arguments[1]||{}); this.element=$(_1); this.handle=this.element; this.delta=this.currentDelta(); this.dragging=false; this.eventMouseDown=this.initDrag.bindAsEventListener(this); Event.observe(this.handle,"mousedown",this.eventMouseDown); Draggables.register(this); },draw:function(_2){ var _3=Position.cumulativeOffset(this.element); var d=this.currentDelta(); _3[0]-=d[0]; _3[1]-=d[1]; var p=[0,1].map(function(i){ return (_2[i]-_3[i]-this.offset[i]); }.bind(this)); this.options.drawMethod(p); }}); var Cropper={}; Cropper.Img=Class.create(); Cropper.Img.prototype={initialize:function(_7,_8){ this.options=Object.extend({ratioDim:{x:0,y:0},minWidth:0,minHeight:0,displayOnInit:false,onEndCrop:Prototype.emptyFunction,captureKeys:true},_8||{}); if(this.options.minWidth>0&&this.options.minHeight>0){ this.options.ratioDim.x=this.options.minWidth; this.options.ratioDim.y=this.options.minHeight; } this.img=$(_7); this.clickCoords={x:0,y:0}; this.dragging=false; this.resizing=false; this.isWebKit=/Konqueror|Safari|KHTML/.test(navigator.userAgent); this.isIE=/MSIE/.test(navigator.userAgent); this.isOpera8=/Opera\s[1-8]/.test(navigator.userAgent); this.ratioX=0; this.ratioY=0; this.attached=false; $A(document.getElementsByTagName("script")).each(function(s){ if(s.src.match(/cropper\.js/)){ var _a=s.src.replace(/cropper\.js(.*)?/,""); var _b=document.createElement("link"); _b.rel="stylesheet"; _b.type="text/css"; _b.href=_a+"cropper.css"; _b.media="screen"; document.getElementsByTagName("head")[0].appendChild(_b); } }); if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0){ var _c=this.getGCD(this.options.ratioDim.x,this.options.ratioDim.y); this.ratioX=this.options.ratioDim.x/_c; this.ratioY=this.options.ratioDim.y/_c; } this.subInitialize(); if(this.img.complete||this.isWebKit){ this.onLoad(); }else{ Event.observe(this.img,"load",this.onLoad.bindAsEventListener(this)); } },getGCD:function(a,b){return 1; if(b==0){ return a; } return this.getGCD(b,a%b); },onLoad:function(){ var _f="imgCrop_"; var _10=this.img.parentNode; var _11=""; if(this.isOpera8){ _11=" opera8"; } this.imgWrap=Builder.node("div",{"class":_f+"wrap"+_11}); if(this.isIE){ this.north=Builder.node("div",{"class":_f+"overlay "+_f+"north"},[Builder.node("span")]); this.east=Builder.node("div",{"class":_f+"overlay "+_f+"east"},[Builder.node("span")]); this.south=Builder.node("div",{"class":_f+"overlay "+_f+"south"},[Builder.node("span")]); this.west=Builder.node("div",{"class":_f+"overlay "+_f+"west"},[Builder.node("span")]); var _12=[this.north,this.east,this.south,this.west]; }else{ this.overlay=Builder.node("div",{"class":_f+"overlay"}); var _12=[this.overlay]; } this.dragArea=Builder.node("div",{"class":_f+"dragArea"},_12); this.handleN=Builder.node("div",{"class":_f+"handle "+_f+"handleN"}); this.handleNE=Builder.node("div",{"class":_f+"handle "+_f+"handleNE"}); this.handleE=Builder.node("div",{"class":_f+"handle "+_f+"handleE"}); this.handleSE=Builder.node("div",{"class":_f+"handle "+_f+"handleSE"}); this.handleS=Builder.node("div",{"class":_f+"handle "+_f+"handleS"}); this.handleSW=Builder.node("div",{"class":_f+"handle "+_f+"handleSW"}); this.handleW=Builder.node("div",{"class":_f+"handle "+_f+"handleW"}); this.handleNW=Builder.node("div",{"class":_f+"handle "+_f+"handleNW"}); this.selArea=Builder.node("div",{"class":_f+"selArea"},[Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeNorth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeEast"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeHoriz "+_f+"marqueeSouth"},[Builder.node("span")]),Builder.node("div",{"class":_f+"marqueeVert "+_f+"marqueeWest"},[Builder.node("span")]),this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW,Builder.node("div",{"class":_f+"clickArea"})]); Element.setStyle($(this.selArea),{backgroundColor:"transparent",backgroundRepeat:"no-repeat",backgroundPosition:"0 0"}); this.imgWrap.appendChild(this.img); this.imgWrap.appendChild(this.dragArea); this.dragArea.appendChild(this.selArea); this.dragArea.appendChild(Builder.node("div",{"class":_f+"clickArea"})); _10.appendChild(this.imgWrap); Event.observe(this.dragArea,"mousedown",this.startDrag.bindAsEventListener(this)); Event.observe(document,"mousemove",this.onDrag.bindAsEventListener(this)); Event.observe(document,"mouseup",this.endCrop.bindAsEventListener(this)); var _13=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW]; for(var i=0;i<_13.length;i++){ Event.observe(_13[i],"mousedown",this.startResize.bindAsEventListener(this)); } if(this.options.captureKeys){ Event.observe(document,"keydown",this.handleKeys.bindAsEventListener(this)); } new CropDraggable(this.selArea,{drawMethod:this.moveArea.bindAsEventListener(this)}); this.setParams(); },setParams:function(){ this.imgW=this.img.width; this.imgH=this.img.height; if(!this.isIE){ Element.setStyle($(this.overlay),{width:this.imgW+"px",height:this.imgH+"px"}); Element.hide($(this.overlay)); Element.setStyle($(this.selArea),{backgroundImage:"url("+this.img.src+")"}); }else{ Element.setStyle($(this.north),{height:0}); Element.setStyle($(this.east),{width:0,height:0}); Element.setStyle($(this.south),{height:0}); Element.setStyle($(this.west),{width:0,height:0}); } Element.setStyle($(this.imgWrap),{"width":this.imgW+"px","height":this.imgH+"px"}); Element.hide($(this.selArea)); var _15=Position.positionedOffset(this.imgWrap); this.wrapOffsets={"top":_15[1],"left":_15[0]}; var _16={x1:0,y1:0,x2:0,y2:0}; this.setAreaCoords(_16); if(this.options.ratioDim.x>0&&this.options.ratioDim.y>0&&this.options.displayOnInit){ _16.x1=Math.ceil((this.imgW-this.options.ratioDim.x)/2); _16.y1=Math.ceil((this.imgH-this.options.ratioDim.y)/2); _16.x2=_16.x1+this.options.ratioDim.x; _16.y2=_16.y1+this.options.ratioDim.y; Element.show(this.selArea); this.drawArea(); this.endCrop(); } this.attached=true; },remove:function(){ this.attached=false; this.imgWrap.parentNode.insertBefore(this.img,this.imgWrap); this.imgWrap.parentNode.removeChild(this.imgWrap); Event.stopObserving(this.dragArea,"mousedown",this.startDrag.bindAsEventListener(this)); Event.stopObserving(document,"mousemove",this.onDrag.bindAsEventListener(this)); Event.stopObserving(document,"mouseup",this.endCrop.bindAsEventListener(this)); var _17=[this.handleN,this.handleNE,this.handleE,this.handleSE,this.handleS,this.handleSW,this.handleW,this.handleNW]; for(var i=0;i<_17.length;i++){ Event.stopObserving(_17[i],"mousedown",this.startResize.bindAsEventListener(this)); } if(this.options.captureKeys){ Event.stopObserving(document,"keydown",this.handleKeys.bindAsEventListener(this)); } },reset:function(){ if(!this.attached){ this.onLoad(); }else{ this.setParams(); } this.endCrop(); },handleKeys:function(e){ var dir={x:0,y:0}; if(!this.dragging){ switch(e.keyCode){ case (37): dir.x=-1; break; case (38): dir.y=-1; break; case (39): dir.x=1; break; case (40): dir.y=1; break; } if(dir.x!=0||dir.y!=0){ if(e.shiftKey){ dir.x*=10; dir.y*=10; } this.moveArea([this.areaCoords.x1+dir.x,this.areaCoords.y1+dir.y]); Event.stop(e); } } },calcW:function(){ return (this.areaCoords.x2-this.areaCoords.x1); },calcH:function(){ return (this.areaCoords.y2-this.areaCoords.y1); },moveArea:function(_1b){ this.setAreaCoords({x1:_1b[0],y1:_1b[1],x2:_1b[0]+this.calcW(),y2:_1b[1]+this.calcH()},true); this.drawArea(); },cloneCoords:function(_1c){ return {x1:_1c.x1,y1:_1c.y1,x2:_1c.x2,y2:_1c.y2}; },setAreaCoords:function(_1d,_1e,_1f,_20,_21){ var _22=typeof _1e!="undefined"?_1e:false; var _23=typeof _1f!="undefined"?_1f:false; if(_1e){ var _24=_1d.x2-_1d.x1; var _25=_1d.y2-_1d.y1; if(_1d.x1<0){ _1d.x1=0; _1d.x2=_24; } if(_1d.y1<0){ _1d.y1=0; _1d.y2=_25; } if(_1d.x2>this.imgW){ _1d.x2=this.imgW; _1d.x1=this.imgW-_24; } if(_1d.y2>this.imgH){ _1d.y2=this.imgH; _1d.y1=this.imgH-_25; } }else{ if(_1d.x1<0){ _1d.x1=0; } if(_1d.y1<0){ _1d.y1=0; } if(_1d.x2>this.imgW){ _1d.x2=this.imgW; } if(_1d.y2>this.imgH){ _1d.y2=this.imgH; } if(typeof (_20)!="undefined"){ if(this.ratioX>0){ this.applyRatio(_1d,{x:this.ratioX,y:this.ratioY},_20,_21); }else{ if(_23){ this.applyRatio(_1d,{x:1,y:1},_20,_21); } } var _26={a1:_1d.x1,a2:_1d.x2}; var _27={a1:_1d.y1,a2:_1d.y2}; var _28=this.options.minWidth; var _29=this.options.minHeight; if((_28==0||_29==0)&&_23){ if(_28>0){ _29=_28; }else{ if(_29>0){ _28=_29; } } } this.applyMinDimension(_26,_28,_20.x,{min:0,max:this.imgW}); this.applyMinDimension(_27,_29,_20.y,{min:0,max:this.imgH}); _1d={x1:_26.a1,y1:_27.a1,x2:_26.a2,y2:_27.a2}; } } this.areaCoords=_1d; },applyMinDimension:function(_2a,_2b,_2c,_2d){ if((_2a.a2-_2a.a1)<_2b){ if(_2c==1){ _2a.a2=_2a.a1+_2b; }else{ _2a.a1=_2a.a2-_2b; } if(_2a.a1<_2d.min){ _2a.a1=_2d.min; _2a.a2=_2b; }else{ if(_2a.a2>_2d.max){ _2a.a1=_2d.max-_2b; _2a.a2=_2d.max; } } } },applyRatio:function(_2e,_2f,_30,_31){ var _32; if(_31=="N"||_31=="S"){ _32=this.applyRatioToAxis({a1:_2e.y1,b1:_2e.x1,a2:_2e.y2,b2:_2e.x2},{a:_2f.y,b:_2f.x},{a:_30.y,b:_30.x},{min:0,max:this.imgW}); _2e.x1=_32.b1; _2e.y1=_32.a1; _2e.x2=_32.b2; _2e.y2=_32.a2; }else{ _32=this.applyRatioToAxis({a1:_2e.x1,b1:_2e.y1,a2:_2e.x2,b2:_2e.y2},{a:_2f.x,b:_2f.y},{a:_30.x,b:_30.y},{min:0,max:this.imgH}); _2e.x1=_32.a1; _2e.y1=_32.b1; _2e.x2=_32.a2; _2e.y2=_32.b2; } },applyRatioToAxis:function(_33,_34,_35,_36){ var _37=Object.extend(_33,{}); var _38=_37.a2-_37.a1; var _3a=Math.floor(_38*_34.b/_34.a); var _3b; var _3c; var _3d=null; if(_35.b==1){ _3b=_37.b1+_3a; if(_3b>_36.max){ _3b=_36.max; _3d=_3b-_37.b1; } _37.b2=_3b; }else{ _3b=_37.b2-_3a; if(_3b<_36.min){ _3b=_36.min; _3d=_3b+_37.b2; } _37.b1=_3b; } if(_3d!=null){ _3c=Math.floor(_3d*_34.a/_34.b); if(_35.a==1){ _37.a2=_37.a1+_3c; }else{ _37.a1=_37.a1=_37.a2-_3c; } } return _37; },drawArea:function(){ if(!this.isIE){ Element.show($(this.overlay)); } var _3e=this.calcW(); var _3f=this.calcH(); var _40=this.areaCoords.x2; var _41=this.areaCoords.y2; var _42=this.selArea.style; _42.left=this.areaCoords.x1+"px"; _42.top=this.areaCoords.y1+"px"; _42.width=_3e+"px"; _42.height=_3f+"px"; var _43=Math.ceil((_3e-6)/2)+"px"; var _44=Math.ceil((_3f-6)/2)+"px"; this.handleN.style.left=_43; this.handleE.style.top=_44; this.handleS.style.left=_43; this.handleW.style.top=_44; if(this.isIE){ this.north.style.height=this.areaCoords.y1+"px"; var _45=this.east.style; _45.top=this.areaCoords.y1+"px"; _45.height=_3f+"px"; _45.left=_40+"px"; _45.width=(this.img.width-_40)+"px"; var _46=this.south.style; _46.top=_41+"px"; _46.height=(this.img.height-_41)+"px"; var _47=this.west.style; _47.top=this.areaCoords.y1+"px"; _47.height=_3f+"px"; _47.width=this.areaCoords.x1+"px"; }else{ _42.backgroundPosition="-"+this.areaCoords.x1+"px "+"-"+this.areaCoords.y1+"px"; } this.subDrawArea(); this.forceReRender(); },forceReRender:function(){ if(this.isIE||this.isWebKit){ var n=document.createTextNode(" "); var d,el,fixEL,i; if(this.isIE){ fixEl=this.selArea; }else{ if(this.isWebKit){ fixEl=document.getElementsByClassName("imgCrop_marqueeSouth",this.imgWrap)[0]; d=Builder.node("div",""); d.style.visibility="hidden"; var _4a=["SE","S","SW"]; for(i=0;i<_4a.length;i++){ el=document.getElementsByClassName("imgCrop_handle"+_4a[i],this.selArea)[0]; if(el.childNodes.length){ el.removeChild(el.childNodes[0]); } el.appendChild(d); } } } fixEl.appendChild(n); fixEl.removeChild(n); } },startResize:function(e){ this.startCoords=this.cloneCoords(this.areaCoords); this.resizing=true; this.resizeHandle=Element.classNames(Event.element(e)).toString().replace(/([^N|NE|E|SE|S|SW|W|NW])+/,""); Event.stop(e); },startDrag:function(e){ Element.show(this.selArea); this.clickCoords=this.getCurPos(e); this.setAreaCoords({x1:this.clickCoords.x,y1:this.clickCoords.y,x2:this.clickCoords.x,y2:this.clickCoords.y}); this.dragging=true; this.onDrag(e); Event.stop(e); },getCurPos:function(e){ return curPos={x:Event.pointerX(e)-this.wrapOffsets.left,y:Event.pointerY(e)-this.wrapOffsets.top}; },onDrag:function(e){ var _4f=null; if(this.dragging||this.resizing){ var _50=this.getCurPos(e); var _51=this.cloneCoords(this.areaCoords); var _52={x:1,y:1}; } if(this.dragging){ if(_50.x0&&this.options.minHeight>0){ this.previewWrap=$(this.options.previewWrap); this.previewImg=this.img.cloneNode(false); this.options.displayOnInit=true; this.hasPreviewImg=true; Element.addClassName(this.previewWrap,"imgCrop_previewWrap"); Element.setStyle(this.previewWrap,{width:this.options.minWidth+"px",height:this.options.minHeight+"px"}); this.previewWrap.appendChild(this.previewImg); } },subDrawArea:function(){ if(this.hasPreviewImg){ var _58=this.calcW(); var _59=this.calcH(); var _5a={x:this.imgW/_58,y:this.imgH/_59}; var _5b={x:_58/this.options.minWidth,y:_59/this.options.minHeight}; var _5c={w:Math.ceil(this.options.minWidth*_5a.x)+"px",h:Math.ceil(this.options.minHeight*_5a.y)+"px",x:"-"+Math.ceil(this.areaCoords.x1/_5b.x)+"px",y:"-"+Math.ceil(this.areaCoords.y1/_5b.y)+"px"}; var _5d=this.previewImg.style; _5d.width=_5c.w; _5d.height=_5c.h; _5d.left=_5c.x; _5d.top=_5c.y; } }}); Fwordpress/wp-includes/js/crop/.svn/text-base/marqueeHoriz.gif.svn-baseeGIF89a ! NETSCAPE2.0! ,    "4xp À! , A"`A! , G@ Lxp`A! , G(h C! , ࿁ "4xp À! , A"`A! , @@ Lxp`A!,  @+h ;Ewordpress/wp-includes/js/crop/.svn/text-base/marqueeVert.gif.svn-baseuGIF89a(! NETSCAPE2.0! ,(   "4xp Å! ,(A"`! ,(G@ Lxp` ! ,(G(h C! ,(࿁ "4xp Å! ,(A"`! ,(@@ Lxp` !,( @+h C;wordpress/wp-includes/js/dbx.jsJ*// DBX2.05 :: Docking Boxes (dbx) // ***************************************************** // DOM scripting by brothercake -- http://www.brothercake.com/ // GNU Lesser General Public License -- http://www.gnu.org/licenses/lgpl.html //****************************************************** var dbx;function dbxManager(sid){dbx = this;if(!/^[-_a-z0-9]+$/i.test(sid)) { alert('Error from dbxManager:\n"' + sid + '" is an invalid session ID'); return; }this.supported = !(document.getElementsByTagName('*').length == 0 || (navigator.vendor == 'KDE' && typeof window.sidebar == 'undefined'));if(!this.supported) { return; }this.etype = typeof document.addEventListener != 'undefined' ? 'addEventListener' : typeof document.attachEvent != 'undefined' ? 'attachEvent' : 'none';this.eprefix = (this.etype == 'attachEvent' ? 'on' : '');if(typeof window.opera != 'undefined' && parseFloat(navigator.userAgent.toLowerCase().split(/opera[\/ ]/)[1].split(' ')[0], 10) < 7.5){this.etype = 'none';}if(this.etype == 'none') { this.supported = false; return; }this.running = 0;this.sid = sid;this.savedata = {};this.cookiestate = this.getCookieState();};dbxManager.prototype.setCookieState = function(){var now = new Date();now.setTime(now.getTime() + (365*24*60*60*1000));var str = '';for(j in this.savedata){if(typeof this.savedata[j]!='function'){str += j + '=' + this.savedata[j] + '&'}}this.state = str.replace(/^(.+)&$/, '$1');this.cookiestring = this.state.replace(/,/g, '|');this.cookiestring = this.cookiestring.replace(/=/g, ':');if(typeof this.onstatechange == 'undefined' || this.onstatechange()){document.cookie = 'dbx-' + this.sid + '='+ this.cookiestring+ '; expires=' + now.toGMTString()+ '; path=/';}};dbxManager.prototype.getCookieState = function(){this.cookiestate = null;if(document.cookie){if(document.cookie.indexOf('dbx-' + this.sid)!=-1){this.cookie = document.cookie.split('dbx-' + this.sid + '=')[1].split(';')[0].split('&');for(var i in this.cookie){if(typeof this.cookie[i]!='function'){this.cookie[i] = this.cookie[i].replace(/\|/g, ',');this.cookie[i]= this.cookie[i].replace(/:/g, '=');this.cookie[i] = this.cookie[i].split('=');this.cookie[i][1] = this.cookie[i][1].split(',');}}this.cookiestate = {};for(i in this.cookie){if(typeof this.cookie[i]!='function'){this.cookiestate[this.cookie[i][0]] = this.cookie[i][1];}}}}return this.cookiestate;};dbxManager.prototype.addDataMember = function(gid, order){this.savedata[gid] = order;};dbxManager.prototype.createElement = function(tag){return typeof document.createElementNS != 'undefined' ? document.createElementNS('http://www.w3.org/1999/xhtml', tag) : document.createElement(tag);};dbxManager.prototype.getTarget = function(e, pattern, node){if(typeof node != 'undefined'){var target = node;}else{target = typeof e.target != 'undefined' ? e.target : e.srcElement;}var regex = new RegExp(pattern, '');while(!regex.test(target.className)){target = target.parentNode;}return target;};function dbxGroup(gid, dir, thresh, fix, ani, togs, def, open, close, move, toggle, kmove, ktoggle, syntax){if(!/^[-_a-z0-9]+$/i.test(gid)) { alert('Error from dbxGroup:\n"' + gid + '" is an invalid container ID'); return; }this.container = document.getElementById(gid);if(this.container == null || !dbx.supported) { return; }var self = this;this.gid = gid;this.dragok = false;this.box = null;this.vertical = dir == 'vertical';this.threshold = parseInt(thresh, 10);this.restrict = fix == 'yes';this.resolution = parseInt(ani, 10);this.toggles = togs == 'yes';this.defopen = def != 'closed';this.vocab = {'open' : open,'close' : close,'move' : move,'toggle' : toggle,'kmove' : kmove,'ktoggle' : ktoggle,'syntax' : syntax};this.container.style.position = 'relative';this.container.style.display = 'block';if(typeof window.opera != 'undefined'){this.container.style.display = 'run-in';}this.boxes = [];this.buttons = [];this.order = [];this.eles = this.container.getElementsByTagName('*');for(var i=0; i 0)){var sibling = this.boxes[positions[i + (positive ? 1 : -1)][0]];if(this.resolution > 0){var visipos = { 'x' : parent.offsetLeft, 'y' : parent.offsetTop };var siblingpos = { 'x' : sibling.offsetLeft, 'y' : sibling.offsetTop };}var obj = { 'insert' : (positive ? sibling : parent), 'before' : (positive ? parent : sibling) };this.container.insertBefore(obj.insert, obj.before);if(this.resolution > 0){var animators ={'sibling' : new dbxAnimator(this, sibling, siblingpos, this.resolution, true, anchor),'parent' : new dbxAnimator(this, parent, visipos, this.resolution, true, anchor)};}else{anchor.focus();}break;}}}this.getBoxOrder();}};dbxGroup.prototype.compare = function(a, b){return a[1] - b[1];};dbxGroup.prototype.createTooltip = function(isopen, anchor){if(this.keydown){this.tooltip = this.container.appendChild(dbx.createElement('span'));this.tooltip.style.visibility = 'hidden';this.tooltip.className = 'dbx-tooltip';if(isopen != null){this.tooltip.appendChild(document.createTextNode(this.vocab.kmove + this.vocab.ktoggle.replace('%toggle%', isopen ? this.vocab.close : this.vocab.open)));}else{this.tooltip.appendChild(document.createTextNode(this.vocab.kmove));}var parent = dbx.getTarget(null, 'dbx\-box', anchor);this.tooltip.style.left = parent.offsetLeft + 'px';this.tooltip.style.top = parent.offsetTop + 'px';var tooltip = this.tooltip;window.setTimeout(function(){if(tooltip != null) { tooltip.style.visibility = 'visible'; }}, 500);}};dbxGroup.prototype.removeTooltip = function(){if(this.tooltip != null){this.tooltip.parentNode.removeChild(this.tooltip);this.tooltip = null;}};dbxGroup.prototype.mousedown = function(e, box){var node = typeof e.target != 'undefined' ? e.target : e.srcElement;if(node.nodeName == '#text') { node = node.parentNode; }if(!/dbx\-(toggle|box|group)/i.test(node.className)){while(!/dbx\-(handle|box|group)/i.test(node.className)){node = node.parentNode;}}if(/dbx\-handle/i.test(node.className)){this.removeTooltip();this.released = false;this.initial = { 'x' : e.clientX, 'y' : e.clientY };this.current = { 'x' : 0, 'y' : 0 };this.createCloneBox(box);if(typeof e.preventDefault != 'undefined' ) { e.preventDefault(); }if(typeof document.onselectstart != 'undefined'){document.onselectstart = function() { return false; }}}};dbxGroup.prototype.mousemove = function(e){if(this.dragok && this.box != null){this.positive = this.vertical ? (e.clientY > this.current.y ? true : false) : (e.clientX > this.current.x ? true : false);this.current = { 'x' : e.clientX, 'y' : e.clientY };var overall = { 'x' : this.current.x - this.initial.x, 'y' : this.current.y - this.initial.y };if(((overall.x >= 0 && overall.x <= this.threshold) || (overall.x <= 0 && overall.x >= 0 - this.threshold))&&((overall.y >= 0 && overall.y <= this.threshold) || (overall.y <= 0 && overall.y >= 0 - this.threshold))){this.current.x -= overall.x;this.current.y -= overall.y;}if(this.released || overall.x > this.threshold || overall.x < (0 - this.threshold) || overall.y > this.threshold || overall.y < (0 - this.threshold)){dbx.group = this.container;dbx.box = this.box;dbx.event = e;if(typeof dbx.onboxdrag == 'undefined' || dbx.onboxdrag()){this.released = true;if(!this.restrict || !this.vertical) { this.boxclone.style.left = (this.current.x - this.difference.x) + 'px'; }if(!this.restrict || this.vertical) { this.boxclone.style.top = (this.current.y - this.difference.y) + 'px'; }this.moveOriginalToPosition(this.current.x, this.current.y);if(typeof e.preventDefault != 'undefined' ) { e.preventDefault(); }}}}return true;};dbxGroup.prototype.mouseup = function(e){if(this.box != null){this.moveOriginalToPosition(e.clientX, e.clientY);this.removeCloneBox();this.getBoxOrder();if(typeof document.onselectstart != 'undefined'){document.onselectstart = function() { return true; }}}this.dragok = false;};dbxGroup.prototype.keypress = function(e, anchor){if(/^(3[7-9])|(40)$/.test(e.keyCode)){this.removeTooltip();if((this.vertical && /^(38|40)$/.test(e.keyCode)) || (!this.vertical && /^(37|39)$/.test(e.keyCode))){this.shiftBoxPosition(e, anchor, /^[3][78]$/.test(e.keyCode) ? false : true);if(typeof e.preventDefault != 'undefined') { e.preventDefault(); }else { return false; }typeof e.stopPropagation != 'undefined' ? e.stopPropagation() : e.cancelBubble = true;this.keydown = false;}}return true;};dbxGroup.prototype.getBoxOrder = function(){this.order = [];var len = this.eles.length;for(var j=0; j boxprops.xy && cloneprops.xy < boxprops.xy)||(!this.positive && cloneprops.xy < boxprops.xy && cloneprops.xy + cloneprops.wh > boxprops.xy)){if(this.boxes[i] == this.box) { return; }var sibling = this.box.nextSibling;while(sibling.className == null || !/dbx\-box/.test(sibling.className)){sibling = sibling.nextSibling;}if(this.boxes[i] == sibling) { return; }if(this.resolution > 0){if(this.box[this.vertical ? 'offsetTop' : 'offsetLeft'] < boxprops.xy){var visibox = this.boxes[i].previousSibling;while(visibox.className == null || !/dbx\-box/.test(visibox.className)){visibox = visibox.previousSibling;}}else{visibox = this.boxes[i];}var visipos = { 'x' : visibox.offsetLeft, 'y' : visibox.offsetTop };}var prepos = { 'x' : this.box.offsetLeft, 'y' : this.box.offsetTop };this.container.insertBefore(this.box, this.boxes[i]);this.initial.x += (this.box.offsetLeft - prepos.x);this.initial.y += (this.box.offsetTop - prepos.y);if(this.resolution > 0 && visibox != this.box){var animator = new dbxAnimator(this, visibox, visipos, this.resolution, false, null);}else{}break;}}};function dbxAnimator(caller, box, pos, res, kbd, anchor){this.caller = caller;this.box = box;this.timer = null;var before = pos[this.caller.vertical ? 'y' : 'x'];var after = this.box[this.caller.vertical ? 'offsetTop' : 'offsetLeft'];if(before != after){if(dbx.running > this.caller.boxes.length - 1) { return; }var clone = this.caller.createClone(this.box, 29999, arguments[2]);clone.style.visibility = 'visible';this.box.style.visibility = 'hidden';this.animateClone(clone,before,after > before ? after - before : 0 - (before - after),this.caller.vertical ? 'top' : 'left',res,kbd,anchor);}};dbxAnimator.prototype.animateClone = function(clone, current, change, dir, res, kbd, anchor){var self = this;var count = 0;dbx.running ++;this.timer = window.setInterval(function(){count ++;current += change / res;clone.style[dir] = current + 'px';if(count == res){window.clearTimeout(self.timer);self.timer = null;dbx.running --;self.caller.container.removeChild(clone);self.box.style.visibility = 'visible';if(kbd){if(anchor != null && anchor.parentNode.style.visibility != 'hidden'){anchor.focus();}else if(self.caller.toggles){var button = self.caller.buttons[parseInt(self.box.className.split('dbxid')[1],10)];if(button != null && typeof button.isactive != 'undefined'){button.focus();}}}}}, 20);};if(typeof window.attachEvent != 'undefined'){window.attachEvent('onunload', function(){var ev = ['mousedown', 'mousemove', 'mouseup', 'mouseout', 'click', 'keydown', 'keyup', 'focus', 'blur', 'selectstart', 'statechange', 'boxdrag', 'boxopen', 'boxclose'];var el = ev.length;var dl = document.all.length;for(var i=0; i35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('k.f2={2r:u(M){E q.1E(u(){if(!M.aR||!M.aZ)E;D el=q;el.2l={aq:M.aq||cO,aR:M.aR,aZ:M.aZ,8e:M.8e||\'fV\',aJ:M.aJ||\'fV\',2Y:M.2Y&&2g M.2Y==\'u\'?M.2Y:I,3i:M.2Y&&2g M.3i==\'u\'?M.3i:I,7U:M.7U&&2g M.7U==\'u\'?M.7U:I,as:k(M.aR,q),8f:k(M.aZ,q),H:M.H||8J,67:M.67||0};el.2l.8f.2G().B(\'W\',\'9R\').eq(0).B({W:el.2l.aq+\'U\',19:\'2B\'}).2T();el.2l.as.1E(u(2N){q.7X=2N}).gC(u(){k(q).2R(el.2l.aJ)},u(){k(q).4i(el.2l.aJ)}).1J(\'5h\',u(e){if(el.2l.67==q.7X)E;el.2l.as.eq(el.2l.67).4i(el.2l.8e).2T().eq(q.7X).2R(el.2l.8e).2T();el.2l.8f.eq(el.2l.67).5w({W:0},el.2l.H,u(){q.14.19=\'1o\';if(el.2l.3i){el.2l.3i.1D(el,[q])}}).2T().eq(q.7X).1Y().5w({W:el.2l.aq},el.2l.H,u(){q.14.19=\'2B\';if(el.2l.2Y){el.2l.2Y.1D(el,[q])}}).2T();if(el.2l.7U){el.2l.7U.1D(el,[q,el.2l.8f.K(q.7X),el.2l.as.K(el.2l.67),el.2l.8f.K(el.2l.67)])}el.2l.67=q.7X}).eq(0).2R(el.2l.8e).2T();k(q).B(\'W\',k(q).B(\'W\')).B(\'2U\',\'2K\')})}};k.fn.gN=k.f2.2r;k.aA={2r:u(M){E q.1E(u(){D el=q;D 7E=2*18.2Q/f1;D an=2*18.2Q;if(k(el).B(\'Y\')!=\'2s\'&&k(el).B(\'Y\')!=\'1P\'){k(el).B(\'Y\',\'2s\')}el.1l={1R:k(M.1R,q),2F:M.2F,6q:M.6q,aD:M.aD,an:an,1N:k.1a.2o(q),Y:k.1a.3w(q),26:18.2Q/2,bi:M.bi,8p:M.6r,6r:[],aG:I,7E:2*18.2Q/f1};el.1l.fB=(el.1l.1N.w-el.1l.2F)/2;el.1l.7D=(el.1l.1N.h-el.1l.6q-el.1l.6q*el.1l.8p)/2;el.1l.2D=2*18.2Q/el.1l.1R.1N();el.1l.ba=el.1l.1N.w/2;el.1l.b9=el.1l.1N.h/2-el.1l.6q*el.1l.8p;D ak=1h.3F(\'22\');k(ak).B({Y:\'1P\',3I:1,Q:0,O:0});k(el).1S(ak);el.1l.1R.1E(u(2N){a6=k(\'1T\',q).K(0);W=T(el.1l.6q*el.1l.8p);if(k.3a.4t){3E=1h.3F(\'1T\');k(3E).B(\'Y\',\'1P\');3E.2J=a6.2J;3E.14.5E=\'gE 9n:9w.9y.cC(1G=60, 14=1, gB=0, gA=0, gv=0, gF=0)\'}P{3E=1h.3F(\'3E\');if(3E.fD){4L=3E.fD("2d");3E.14.Y=\'1P\';3E.14.W=W+\'U\';3E.14.Z=el.1l.2F+\'U\';3E.W=W;3E.Z=el.1l.2F;4L.gu();4L.gO(0,W);4L.gk(1,-1);4L.gp(a6,0,0,el.1l.2F,W);4L.6H();4L.gm="gG-4l";D ap=4L.hy(0,0,0,W);ap.fs(1,"fr(1V, 1V, 1V, 1)");ap.fs(0,"fr(1V, 1V, 1V, 0.6)");4L.hx=ap;if(hA.hB.3J(\'hw\')!=-1){4L.hv()}P{4L.hu(0,0,el.1l.2F,W)}}}el.1l.6r[2N]=3E;k(ak).1S(3E)}).1J(\'9z\',u(e){el.1l.aG=1b;el.1l.H=el.1l.7E*0.1*el.1l.H/18.3S(el.1l.H);E I}).1J(\'8B\',u(e){el.1l.aG=I;E I});k.aA.7T(el);el.1l.H=el.1l.7E*0.2;el.1l.ht=1X.6V(u(){el.1l.26+=el.1l.H;if(el.1l.26>an)el.1l.26=0;k.aA.7T(el)},20);k(el).1J(\'8B\',u(){el.1l.H=el.1l.7E*0.2*el.1l.H/18.3S(el.1l.H)}).1J(\'3D\',u(e){if(el.1l.aG==I){1s=k.1a.4a(e);fz=el.1l.1N.w-1s.x+el.1l.Y.x;el.1l.H=el.1l.bi*el.1l.7E*(el.1l.1N.w/2-fz)/(el.1l.1N.w/2)}})})},7T:u(el){el.1l.1R.1E(u(2N){b8=el.1l.26+2N*el.1l.2D;x=el.1l.fB*18.5H(b8);y=el.1l.7D*18.83(b8);f9=T(2a*(el.1l.7D+y)/(2*el.1l.7D));fk=(el.1l.7D+y)/(2*el.1l.7D);Z=T((el.1l.2F-el.1l.aD)*fk+el.1l.aD);W=T(Z*el.1l.6q/el.1l.2F);q.14.Q=el.1l.b9+y-W/2+"U";q.14.O=el.1l.ba+x-Z/2+"U";q.14.Z=Z+"U";q.14.W=W+"U";q.14.3I=f9;el.1l.6r[2N].14.Q=T(el.1l.b9+y+W-1-W/2)+"U";el.1l.6r[2N].14.O=T(el.1l.ba+x-Z/2)+"U";el.1l.6r[2N].14.Z=Z+"U";el.1l.6r[2N].14.W=T(W*el.1l.8p)+"U"})}};k.fn.hI=k.aA.2r;k.23({G:{c8:u(p,n,1W,1H,1m){E((-18.5H(p*18.2Q)/2)+0.5)*1H+1W},hK:u(p,n,1W,1H,1m){E 1H*(n/=1m)*n*n+1W},fl:u(p,n,1W,1H,1m){E-1H*((n=n/1m-1)*n*n*n-1)+1W},hm:u(p,n,1W,1H,1m){if((n/=1m/2)<1)E 1H/2*n*n*n*n+1W;E-1H/2*((n-=2)*n*n*n-2)+1W},8l:u(p,n,1W,1H,1m){if((n/=1m)<(1/2.75)){E 1H*(7.aB*n*n)+1W}P if(n<(2/2.75)){E 1H*(7.aB*(n-=(1.5/2.75))*n+.75)+1W}P if(n<(2.5/2.75)){E 1H*(7.aB*(n-=(2.25/2.75))*n+.gY)+1W}P{E 1H*(7.aB*(n-=(2.h2/2.75))*n+.gX)+1W}},cr:u(p,n,1W,1H,1m){if(k.G.8l)E 1H-k.G.8l(p,1m-n,0,1H,1m)+1W;E 1W+1H},gW:u(p,n,1W,1H,1m){if(k.G.cr&&k.G.8l)if(n<1m/2)E k.G.cr(p,n*2,0,1H,1m)*.5+1W;E k.G.8l(p,n*2-1m,0,1H,1m)*.5+1H*.5+1W;E 1W+1H},gQ:u(p,n,1W,1H,1m){D a,s;if(n==0)E 1W;if((n/=1m)==1)E 1W+1H;a=1H*0.3;p=1m*.3;if(a<18.3S(1H)){a=1H;s=p/4}P{s=p/(2*18.2Q)*18.cb(1H/a)}E-(a*18.6b(2,10*(n-=1))*18.83((n*1m-s)*(2*18.2Q)/p))+1W},gT:u(p,n,1W,1H,1m){D a,s;if(n==0)E 1W;if((n/=1m/2)==2)E 1W+1H;a=1H*0.3;p=1m*.3;if(a<18.3S(1H)){a=1H;s=p/4}P{s=p/(2*18.2Q)*18.cb(1H/a)}E a*18.6b(2,-10*n)*18.83((n*1m-s)*(2*18.2Q)/p)+1H+1W},gV:u(p,n,1W,1H,1m){D a,s;if(n==0)E 1W;if((n/=1m/2)==2)E 1W+1H;a=1H*0.3;p=1m*.3;if(a<18.3S(1H)){a=1H;s=p/4}P{s=p/(2*18.2Q)*18.cb(1H/a)}if(n<1){E-.5*(a*18.6b(2,10*(n-=1))*18.83((n*1m-s)*(2*18.2Q)/p))+1W}E a*18.6b(2,-10*(n-=1))*18.83((n*1m-s)*(2*18.2Q)/p)*.5+1H+1W}}});k.6n={2r:u(M){E q.1E(u(){D el=q;el.1F={1R:k(M.1R,q),1Z:k(M.1Z,q),1M:k.1a.3w(q),2F:M.2F,ax:M.ax,7Y:M.7Y,ge:M.ge,51:M.51,6x:M.6x};k.6n.aH(el,0);k(1X).1J(\'gU\',u(){el.1F.1M=k.1a.3w(el);k.6n.aH(el,0);k.6n.7T(el)});k.6n.7T(el);el.1F.1R.1J(\'9z\',u(){k(el.1F.ax,q).K(0).14.19=\'2B\'}).1J(\'8B\',u(){k(el.1F.ax,q).K(0).14.19=\'1o\'});k(1h).1J(\'3D\',u(e){D 1s=k.1a.4a(e);D 5s=0;if(el.1F.51&&el.1F.51==\'cv\')D aI=1s.x-el.1F.1M.x-(el.4c-el.1F.2F*el.1F.1R.1N())/2-el.1F.2F/2;P if(el.1F.51&&el.1F.51==\'2L\')D aI=1s.x-el.1F.1M.x-el.4c+el.1F.2F*el.1F.1R.1N();P D aI=1s.x-el.1F.1M.x;D fP=18.6b(1s.y-el.1F.1M.y-el.5W/2,2);el.1F.1R.1E(u(2N){45=18.ez(18.6b(aI-2N*el.1F.2F,2)+fP);45-=el.1F.2F/2;45=45<0?0:45;45=45>el.1F.7Y?el.1F.7Y:45;45=el.1F.7Y-45;bB=el.1F.6x*45/el.1F.7Y;q.14.Z=el.1F.2F+bB+\'U\';q.14.O=el.1F.2F*2N+5s+\'U\';5s+=bB});k.6n.aH(el,5s)})})},aH:u(el,5s){if(el.1F.51)if(el.1F.51==\'cv\')el.1F.1Z.K(0).14.O=(el.4c-el.1F.2F*el.1F.1R.1N())/2-5s/2+\'U\';P if(el.1F.51==\'O\')el.1F.1Z.K(0).14.O=-5s/el.1F.1R.1N()+\'U\';P if(el.1F.51==\'2L\')el.1F.1Z.K(0).14.O=(el.4c-el.1F.2F*el.1F.1R.1N())-5s/2+\'U\';el.1F.1Z.K(0).14.Z=el.1F.2F*el.1F.1R.1N()+5s+\'U\'},7T:u(el){el.1F.1R.1E(u(2N){q.14.Z=el.1F.2F+\'U\';q.14.O=el.1F.2F*2N+\'U\'})}};k.fn.hi=k.6n.2r;k.N={1c:S,8R:S,3A:S,2I:S,4y:S,cl:S,1d:S,2h:S,1R:S,5o:u(){k.N.8R.5o();if(k.N.3A){k.N.3A.2G()}},4w:u(){k.N.1R=S;k.N.2h=S;k.N.4y=k.N.1d.2y;if(k.N.1c.B(\'19\')==\'2B\'){if(k.N.1d.1f.fx){3m(k.N.1d.1f.fx.1u){1e\'c6\':k.N.1c.7a(k.N.1d.1f.fx.1m,k.N.5o);1r;1e\'1z\':k.N.1c.fq(k.N.1d.1f.fx.1m,k.N.5o);1r;1e\'a7\':k.N.1c.g3(k.N.1d.1f.fx.1m,k.N.5o);1r}}P{k.N.1c.2G()}if(k.N.1d.1f.3i)k.N.1d.1f.3i.1D(k.N.1d,[k.N.1c,k.N.3A])}P{k.N.5o()}1X.bH(k.N.2I)},dQ:u(){D 1d=k.N.1d;D 4d=k.N.aY(1d);if(1d&&4d.3o!=k.N.4y&&4d.3o.1g>=1d.1f.aL){k.N.4y=4d.3o;k.N.cl=4d.3o;81={2n:k(1d).1p(\'hj\')||\'2n\',2y:4d.3o};k.hl({1u:\'hk\',81:k.hf(81),he:u(fZ){1d.1f.4e=k(\'3o\',fZ);1N=1d.1f.4e.1N();if(1N>0){D 5p=\'\';1d.1f.4e.1E(u(2N){5p+=\'<8P 4I="\'+k(\'2y\',q).3g()+\'" 8K="\'+2N+\'" 14="9b: ad;">\'+k(\'3g\',q).3g()+\'\'});if(1d.1f.aU){D 3M=k(\'2y\',1d.1f.4e.K(0)).3g();1d.2y=4d.3j+3M+1d.1f.3N+4d.66;k.N.6J(1d,4d.3o.1g!=3M.1g?(4d.3j.1g+4d.3o.1g):3M.1g,4d.3o.1g!=3M.1g?(4d.3j.1g+3M.1g):3M.1g)}if(1N>0){k.N.cj(1d,5p)}P{k.N.4w()}}P{k.N.4w()}},5N:1d.1f.aN})}},cj:u(1d,5p){k.N.8R.3x(5p);k.N.1R=k(\'8P\',k.N.8R.K(0));k.N.1R.9z(k.N.di).1J(\'5h\',k.N.dj);D Y=k.1a.3w(1d);D 1N=k.1a.2o(1d);k.N.1c.B(\'Q\',Y.y+1N.hb+\'U\').B(\'O\',Y.x+\'U\').2R(1d.1f.aM);if(k.N.3A){k.N.3A.B(\'19\',\'2B\').B(\'Q\',Y.y+1N.hb+\'U\').B(\'O\',Y.x+\'U\').B(\'Z\',k.N.1c.B(\'Z\')).B(\'W\',k.N.1c.B(\'W\'))}k.N.2h=0;k.N.1R.K(0).3l=1d.1f.7H;k.N.8Q(1d,1d.1f.4e.K(0),\'7J\');if(k.N.1c.B(\'19\')==\'1o\'){if(1d.1f.bV){D cp=k.1a.aT(1d,1b);D cm=k.1a.6U(1d,1b);k.N.1c.B(\'Z\',1d.4c-(k.dF?(cp.l+cp.r+cm.l+cm.r):0)+\'U\')}if(1d.1f.fx){3m(1d.1f.fx.1u){1e\'c6\':k.N.1c.7f(1d.1f.fx.1m);1r;1e\'1z\':k.N.1c.fo(1d.1f.fx.1m);1r;1e\'a7\':k.N.1c.gb(1d.1f.fx.1m);1r}}P{k.N.1c.1Y()}if(k.N.1d.1f.2Y)k.N.1d.1f.2Y.1D(k.N.1d,[k.N.1c,k.N.3A])}},dO:u(){D 1d=q;if(1d.1f.4e){k.N.4y=1d.2y;k.N.cl=1d.2y;D 5p=\'\';1d.1f.4e.1E(u(2N){2y=k(\'2y\',q).3g().6c();fY=1d.2y.6c();if(2y.3J(fY)==0){5p+=\'<8P 4I="\'+k(\'2y\',q).3g()+\'" 8K="\'+2N+\'" 14="9b: ad;">\'+k(\'3g\',q).3g()+\'\'}});if(5p!=\'\'){k.N.cj(1d,5p);q.1f.9x=1b;E}}1d.1f.4e=S;q.1f.9x=I},6J:u(2n,26,2T){if(2n.b1){D 6t=2n.b1();6t.hp(1b);6t.dI("ck",26);6t.ha("ck",-2T+26);6t.8C()}P if(2n.aF){2n.aF(26,2T)}P{if(2n.5q){2n.5q=26;2n.dN=2T}}2n.6K()},f0:u(2n){if(2n.5q)E 2n.5q;P if(2n.b1){D 6t=1h.6J.dZ();D eX=6t.h9();E 0-eX.dI(\'ck\',-h6)}},aY:u(2n){D 4P={2y:2n.2y,3j:\'\',66:\'\',3o:\'\'};if(2n.1f.aQ){D 8N=I;D 5q=k.N.f0(2n)||0;D 4T=4P.2y.7C(2n.1f.3N);24(D i=0;i<4T.1g;i++){if((4P.3j.1g+4T[i].1g>=5q||5q==0)&&!8N){if(4P.3j.1g<=5q)4P.3o=4T[i];P 4P.66+=4T[i]+(4T[i]!=\'\'?2n.1f.3N:\'\');8N=1b}P if(8N){4P.66+=4T[i]+(4T[i]!=\'\'?2n.1f.3N:\'\')}if(!8N){4P.3j+=4T[i]+(4T.1g>1?2n.1f.3N:\'\')}}}P{4P.3o=4P.2y}E 4P},bU:u(e){1X.bH(k.N.2I);D 1d=k.N.aY(q);D 3K=e.7L||e.7K||-1;if(/13|27|35|36|38|40|9/.48(3K)&&k.N.1R){if(1X.2k){1X.2k.bT=1b;1X.2k.c0=I}P{e.aP();e.aW()}if(k.N.2h!=S)k.N.1R.K(k.N.2h||0).3l=\'\';P k.N.2h=-1;3m(3K){1e 9:1e 13:if(k.N.2h==-1)k.N.2h=0;D 2h=k.N.1R.K(k.N.2h||0);D 3M=2h.5C(\'4I\');q.2y=1d.3j+3M+q.1f.3N+1d.66;k.N.4y=1d.3o;k.N.6J(q,1d.3j.1g+3M.1g+q.1f.3N.1g,1d.3j.1g+3M.1g+q.1f.3N.1g);k.N.4w();if(q.1f.68){4u=T(2h.5C(\'8K\'))||0;k.N.8Q(q,q.1f.4e.K(4u),\'68\')}if(q.7W)q.7W(I);E 3K!=13;1r;1e 27:q.2y=1d.3j+k.N.4y+q.1f.3N+1d.66;q.1f.4e=S;k.N.4w();if(q.7W)q.7W(I);E I;1r;1e 35:k.N.2h=k.N.1R.1N()-1;1r;1e 36:k.N.2h=0;1r;1e 38:k.N.2h--;if(k.N.2h<0)k.N.2h=k.N.1R.1N()-1;1r;1e 40:k.N.2h++;if(k.N.2h==k.N.1R.1N())k.N.2h=0;1r}k.N.8Q(q,q.1f.4e.K(k.N.2h||0),\'7J\');k.N.1R.K(k.N.2h||0).3l=q.1f.7H;if(k.N.1R.K(k.N.2h||0).7W)k.N.1R.K(k.N.2h||0).7W(I);if(q.1f.aU){D aK=k.N.1R.K(k.N.2h||0).5C(\'4I\');q.2y=1d.3j+aK+q.1f.3N+1d.66;if(k.N.4y.1g!=aK.1g)k.N.6J(q,1d.3j.1g+k.N.4y.1g,1d.3j.1g+aK.1g)}E I}k.N.dO.1D(q);if(q.1f.9x==I){if(1d.3o!=k.N.4y&&1d.3o.1g>=q.1f.aL)k.N.2I=1X.9T(k.N.dQ,q.1f.54);if(k.N.1R){k.N.4w()}}E 1b},8Q:u(2n,3o,1u){if(2n.1f[1u]){D 81={};ar=3o.f3(\'*\');24(i=0;i\');k.N.3A=k(\'#ds\')}k(\'2e\',1h).1S(\'<22 id="dr" 14="Y: 1P; Q: 0; O: 0; z-cZ: h3; 19: 1o;"><9h 14="6w: 0;8F: 0; h1-14: 1o; z-cZ: h0;">&7k;\');k.N.1c=k(\'#dr\');k.N.8R=k(\'9h\',k.N.1c)}E q.1E(u(){if(q.4Y!=\'ch\'&&q.5C(\'1u\')!=\'3g\')E;q.1f={};q.1f.aN=M.aN;q.1f.aL=18.3S(T(M.aL)||1);q.1f.aM=M.aM?M.aM:\'\';q.1f.7H=M.7H?M.7H:\'\';q.1f.68=M.68&&M.68.1K==2A?M.68:S;q.1f.2Y=M.2Y&&M.2Y.1K==2A?M.2Y:S;q.1f.3i=M.3i&&M.3i.1K==2A?M.3i:S;q.1f.7J=M.7J&&M.7J.1K==2A?M.7J:S;q.1f.bV=M.bV||I;q.1f.aQ=M.aQ||I;q.1f.3N=q.1f.aQ?(M.3N||\', \'):\'\';q.1f.aU=M.aU?1b:I;q.1f.54=18.3S(T(M.54)||aC);if(M.fx&&M.fx.1K==7M){if(!M.fx.1u||!/c6|1z|a7/.48(M.fx.1u)){M.fx.1u=\'1z\'}if(M.fx.1u==\'1z\'&&!k.fx.1z)E;if(M.fx.1u==\'a7\'&&!k.fx.61)E;M.fx.1m=18.3S(T(M.fx.1m)||8J);if(M.fx.1m>q.1f.54){M.fx.1m=q.1f.54-2a}q.1f.fx=M.fx}q.1f.4e=S;q.1f.9x=I;k(q).1p(\'bU\',\'eN\').6K(u(){k.N.1d=q;k.N.4y=q.2y}).dH(k.N.eJ).6y(k.N.bU).5B(u(){k.N.2I=1X.9T(k.N.4w,hM)})})}};k.fn.hR=k.N.2r;k.1y={2I:S,4Q:S,29:S,2D:10,26:u(el,4J,2D,eG){k.1y.4Q=el;k.1y.29=4J;k.1y.2D=T(2D)||10;k.1y.2I=1X.6V(k.1y.eF,T(eG)||40)},eF:u(){24(i=0;i0&&k.1y.29[i].2X.y+k.1y.29[i].2X.t>69.y){k.1y.29[i].3d-=k.1y.2D}P if(k.1y.29[i].2X.t<=k.1y.29[i].2X.h&&k.1y.29[i].2X.t+k.1y.29[i].2X.hb<69.y+69.hb){k.1y.29[i].3d+=k.1y.2D}if(k.1y.29[i].2X.l>0&&k.1y.29[i].2X.x+k.1y.29[i].2X.l>69.x){k.1y.29[i].3c-=k.1y.2D}P if(k.1y.29[i].2X.l<=k.1y.29[i].2X.hP&&k.1y.29[i].2X.l+k.1y.29[i].2X.1C<69.x+69.1C){k.1y.29[i].3c+=k.1y.2D}}},8o:u(){1X.5T(k.1y.2I);k.1y.4Q=S;k.1y.29=S;24(i in k.1y.29){k.1y.29[i].2X=S}}};k.11={1c:S,F:S,4U:u(){E q.1E(u(){if(q.9I){q.A.5e.3q(\'5v\',k.11.bN);q.A=S;q.9I=I;if(k.3a.4t){q.bE="eN"}P{q.14.hq=\'\';q.14.e1=\'\';q.14.e7=\'\'}}})},bN:u(e){if(k.11.F!=S){k.11.9A(e);E I}D C=q.3U;k(1h).1J(\'3D\',k.11.bX).1J(\'5P\',k.11.9A);C.A.1s=k.1a.4a(e);C.A.4B=C.A.1s;C.A.7q=I;C.A.ho=q!=q.3U;k.11.F=C;if(C.A.5i&&q!=q.3U){bS=k.1a.3w(C.31);bQ=k.1a.2o(C);bR={x:T(k.B(C,\'O\'))||0,y:T(k.B(C,\'Q\'))||0};dx=C.A.4B.x-bS.x-bQ.1C/2-bR.x;dy=C.A.4B.y-bS.y-bQ.hb/2-bR.y;k.3b.5c(C,[dx,dy])}E k.7n||I},ea:u(e){D C=k.11.F;C.A.7q=1b;D 9G=C.14;C.A.7V=k.B(C,\'19\');C.A.4n=k.B(C,\'Y\');if(!C.A.cz)C.A.cz=C.A.4n;C.A.2c={x:T(k.B(C,\'O\'))||0,y:T(k.B(C,\'Q\'))||0};C.A.9B=0;C.A.ai=0;if(k.3a.4t){D bW=k.1a.6U(C,1b);C.A.9B=bW.l||0;C.A.ai=bW.t||0}C.A.1B=k.23(k.1a.3w(C),k.1a.2o(C));if(C.A.4n!=\'2s\'&&C.A.4n!=\'1P\'){9G.Y=\'2s\'}k.11.1c.5o();D 5g=C.fI(1b);k(5g).B({19:\'2B\',O:\'2P\',Q:\'2P\'});5g.14.5K=\'0\';5g.14.5z=\'0\';5g.14.5k=\'0\';5g.14.5j=\'0\';k.11.1c.1S(5g);D 3Y=k.11.1c.K(0).14;if(C.A.bD){3Y.Z=\'9F\';3Y.W=\'9F\'}P{3Y.W=C.A.1B.hb+\'U\';3Y.Z=C.A.1B.1C+\'U\'}3Y.19=\'2B\';3Y.5K=\'2P\';3Y.5z=\'2P\';3Y.5k=\'2P\';3Y.5j=\'2P\';k.23(C.A.1B,k.1a.2o(5g));if(C.A.2V){if(C.A.2V.O){C.A.2c.x+=C.A.1s.x-C.A.1B.x-C.A.2V.O;C.A.1B.x=C.A.1s.x-C.A.2V.O}if(C.A.2V.Q){C.A.2c.y+=C.A.1s.y-C.A.1B.y-C.A.2V.Q;C.A.1B.y=C.A.1s.y-C.A.2V.Q}if(C.A.2V.2L){C.A.2c.x+=C.A.1s.x-C.A.1B.x-C.A.1B.hb+C.A.2V.2L;C.A.1B.x=C.A.1s.x-C.A.1B.1C+C.A.2V.2L}if(C.A.2V.4D){C.A.2c.y+=C.A.1s.y-C.A.1B.y-C.A.1B.hb+C.A.2V.4D;C.A.1B.y=C.A.1s.y-C.A.1B.hb+C.A.2V.4D}}C.A.2v=C.A.2c.x;C.A.2q=C.A.2c.y;if(C.A.8s||C.A.2p==\'94\'){8U=k.1a.6U(C.31,1b);C.A.1B.x=C.8t+(k.3a.4t?0:k.3a.7I?-8U.l:8U.l);C.A.1B.y=C.8G+(k.3a.4t?0:k.3a.7I?-8U.t:8U.t);k(C.31).1S(k.11.1c.K(0))}if(C.A.2p){k.11.c5(C);C.A.5t.2p=k.11.ce}if(C.A.5i){k.3b.ct(C)}3Y.O=C.A.1B.x-C.A.9B+\'U\';3Y.Q=C.A.1B.y-C.A.ai+\'U\';3Y.Z=C.A.1B.1C+\'U\';3Y.W=C.A.1B.hb+\'U\';k.11.F.A.9E=I;if(C.A.gx){C.A.5t.6a=k.11.c7}if(C.A.3I!=I){k.11.1c.B(\'3I\',C.A.3I)}if(C.A.1G){k.11.1c.B(\'1G\',C.A.1G);if(1X.71){k.11.1c.B(\'5E\',\'8V(1G=\'+C.A.1G*2a+\')\')}}if(C.A.7O){k.11.1c.2R(C.A.7O);k.11.1c.K(0).7c.14.19=\'1o\'}if(C.A.4o)C.A.4o.1D(C,[5g,C.A.2c.x,C.A.2c.y]);if(k.1x&&k.1x.8D>0){k.1x.ed(C)}if(C.A.46==I){9G.19=\'1o\'}E I},c5:u(C){if(C.A.2p.1K==b0){if(C.A.2p==\'94\'){C.A.28=k.23({x:0,y:0},k.1a.2o(C.31));D 8S=k.1a.6U(C.31,1b);C.A.28.w=C.A.28.1C-8S.l-8S.r;C.A.28.h=C.A.28.hb-8S.t-8S.b}P if(C.A.2p==\'1h\'){D bY=k.1a.bm();C.A.28={x:0,y:0,w:bY.w,h:bY.h}}}P if(C.A.2p.1K==7F){C.A.28={x:T(C.A.2p[0])||0,y:T(C.A.2p[1])||0,w:T(C.A.2p[2])||0,h:T(C.A.2p[3])||0}}C.A.28.dx=C.A.28.x-C.A.1B.x;C.A.28.dy=C.A.28.y-C.A.1B.y},9H:u(F){if(F.A.8s||F.A.2p==\'94\'){k(\'2e\',1h).1S(k.11.1c.K(0))}k.11.1c.5o().2G().B(\'1G\',1);if(1X.71){k.11.1c.B(\'5E\',\'8V(1G=2a)\')}},9A:u(e){k(1h).3q(\'3D\',k.11.bX).3q(\'5P\',k.11.9A);if(k.11.F==S){E}D F=k.11.F;k.11.F=S;if(F.A.7q==I){E I}if(F.A.44==1b){k(F).B(\'Y\',F.A.4n)}D 9G=F.14;if(F.5i){k.11.1c.B(\'9b\',\'8j\')}if(F.A.7O){k.11.1c.4i(F.A.7O)}if(F.A.6N==I){if(F.A.fx>0){if(!F.A.1O||F.A.1O==\'4j\'){D x=12 k.fx(F,{1m:F.A.fx},\'O\');x.1L(F.A.2c.x,F.A.8y)}if(!F.A.1O||F.A.1O==\'49\'){D y=12 k.fx(F,{1m:F.A.fx},\'Q\');y.1L(F.A.2c.y,F.A.8v)}}P{if(!F.A.1O||F.A.1O==\'4j\')F.14.O=F.A.8y+\'U\';if(!F.A.1O||F.A.1O==\'49\')F.14.Q=F.A.8v+\'U\'}k.11.9H(F);if(F.A.46==I){k(F).B(\'19\',F.A.7V)}}P if(F.A.fx>0){F.A.9E=1b;D dh=I;if(k.1x&&k.1t&&F.A.44){dh=k.1a.3w(k.1t.1c.K(0))}k.11.1c.5w({O:dh?dh.x:F.A.1B.x,Q:dh?dh.y:F.A.1B.y},F.A.fx,u(){F.A.9E=I;if(F.A.46==I){F.14.19=F.A.7V}k.11.9H(F)})}P{k.11.9H(F);if(F.A.46==I){k(F).B(\'19\',F.A.7V)}}if(k.1x&&k.1x.8D>0){k.1x.eO(F)}if(k.1t&&F.A.44){k.1t.fC(F)}if(F.A.2Z&&(F.A.8y!=F.A.2c.x||F.A.8v!=F.A.2c.y)){F.A.2Z.1D(F,F.A.b3||[0,0,F.A.8y,F.A.8v])}if(F.A.3T)F.A.3T.1D(F);E I},c7:u(x,y,dx,dy){if(dx!=0)dx=T((dx+(q.A.gx*dx/18.3S(dx))/2)/q.A.gx)*q.A.gx;if(dy!=0)dy=T((dy+(q.A.gy*dy/18.3S(dy))/2)/q.A.gy)*q.A.gy;E{dx:dx,dy:dy,x:0,y:0}},ce:u(x,y,dx,dy){dx=18.3L(18.3r(dx,q.A.28.dx),q.A.28.w+q.A.28.dx-q.A.1B.1C);dy=18.3L(18.3r(dy,q.A.28.dy),q.A.28.h+q.A.28.dy-q.A.1B.hb);E{dx:dx,dy:dy,x:0,y:0}},bX:u(e){if(k.11.F==S||k.11.F.A.9E==1b){E}D F=k.11.F;F.A.4B=k.1a.4a(e);if(F.A.7q==I){45=18.ez(18.6b(F.A.1s.x-F.A.4B.x,2)+18.6b(F.A.1s.y-F.A.4B.y,2));if(450){k.1x.al(F)}E I},2r:u(o){if(!k.11.1c){k(\'2e\',1h).1S(\'<22 id="e8">\');k.11.1c=k(\'#e8\');D el=k.11.1c.K(0);D 4J=el.14;4J.Y=\'1P\';4J.19=\'1o\';4J.9b=\'8j\';4J.eu=\'1o\';4J.2U=\'2K\';if(1X.71){el.bE="e4"}P{4J.gi=\'1o\';4J.e7=\'1o\';4J.e1=\'1o\'}}if(!o){o={}}E q.1E(u(){if(q.9I||!k.1a)E;if(1X.71){q.gh=u(){E I};q.gj=u(){E I}}D el=q;D 5e=o.3v?k(q).gf(o.3v):k(q);if(k.3a.4t){5e.1E(u(){q.bE="e4"})}P{5e.B(\'-gI-7R-8C\',\'1o\');5e.B(\'7R-8C\',\'1o\');5e.B(\'-gH-7R-8C\',\'1o\')}q.A={5e:5e,6N:o.6N?1b:I,46:o.46?1b:I,44:o.44?o.44:I,5i:o.5i?o.5i:I,8s:o.8s?o.8s:I,3I:o.3I?T(o.3I)||0:I,1G:o.1G?2m(o.1G):I,fx:T(o.fx)||S,6R:o.6R?o.6R:I,5t:{},1s:{},4o:o.4o&&o.4o.1K==2A?o.4o:I,3T:o.3T&&o.3T.1K==2A?o.3T:I,2Z:o.2Z&&o.2Z.1K==2A?o.2Z:I,1O:/49|4j/.48(o.1O)?o.1O:I,6M:o.6M?T(o.6M)||0:0,2V:o.2V?o.2V:I,bD:o.bD?1b:I,7O:o.7O||I};if(o.5t&&o.5t.1K==2A)q.A.5t.7R=o.5t;if(o.4m&&o.4m.1K==2A)q.A.4m=o.4m;if(o.2p&&((o.2p.1K==b0&&(o.2p==\'94\'||o.2p==\'1h\'))||(o.2p.1K==7F&&o.2p.1g==4))){q.A.2p=o.2p}if(o.2O){q.A.2O=o.2O}if(o.6a){if(2g o.6a==\'gz\'){q.A.gx=T(o.6a)||1;q.A.gy=T(o.6a)||1}P if(o.6a.1g==2){q.A.gx=T(o.6a[0])||1;q.A.gy=T(o.6a[1])||1}}if(o.3H&&o.3H.1K==2A){q.A.3H=o.3H}q.9I=1b;5e.1E(u(){q.3U=el});5e.1J(\'5v\',k.11.bN)})}};k.fn.23({aS:k.11.4U,7t:k.11.2r});k.1x={du:u(5J,5G,7Q,7S){E 5J<=k.11.F.A.2v&&(5J+7Q)>=(k.11.F.A.2v+k.11.F.A.1B.w)&&5G<=k.11.F.A.2q&&(5G+7S)>=(k.11.F.A.2q+k.11.F.A.1B.h)?1b:I},cV:u(5J,5G,7Q,7S){E!(5J>(k.11.F.A.2v+k.11.F.A.1B.w)||(5J+7Q)(k.11.F.A.2q+k.11.F.A.1B.h)||(5G+7S)k.11.F.A.4B.x&&5Gk.11.F.A.4B.y?1b:I},5r:I,3Q:{},8D:0,3P:{},ed:u(C){if(k.11.F==S){E}D i;k.1x.3Q={};D bJ=I;24(i in k.1x.3P){if(k.1x.3P[i]!=S){D 1j=k.1x.3P[i].K(0);if(k(k.11.F).is(\'.\'+1j.1i.a)){if(1j.1i.m==I){1j.1i.p=k.23(k.1a.7G(1j),k.1a.74(1j));1j.1i.m=1b}if(1j.1i.ac){k.1x.3P[i].2R(1j.1i.ac)}k.1x.3Q[i]=k.1x.3P[i];if(k.1t&&1j.1i.s&&k.11.F.A.44){1j.1i.el=k(\'.\'+1j.1i.a,1j);C.14.19=\'1o\';k.1t.cT(1j);1j.1i.ay=k.1t.8x(k.1p(1j,\'id\')).7l;C.14.19=C.A.7V;bJ=1b}if(1j.1i.9i){1j.1i.9i.1D(k.1x.3P[i].K(0),[k.11.F])}}}}if(bJ){k.1t.26()}},dS:u(){k.1x.3Q={};24(i in k.1x.3P){if(k.1x.3P[i]!=S){D 1j=k.1x.3P[i].K(0);if(k(k.11.F).is(\'.\'+1j.1i.a)){1j.1i.p=k.23(k.1a.7G(1j),k.1a.74(1j));if(1j.1i.ac){k.1x.3P[i].2R(1j.1i.ac)}k.1x.3Q[i]=k.1x.3P[i];if(k.1t&&1j.1i.s&&k.11.F.A.44){1j.1i.el=k(\'.\'+1j.1i.a,1j);C.14.19=\'1o\';k.1t.cT(1j);C.14.19=C.A.7V}}}}},al:u(e){if(k.11.F==S){E}k.1x.5r=I;D i;D bK=I;D eQ=0;24(i in k.1x.3Q){D 1j=k.1x.3Q[i].K(0);if(k.1x.5r==I&&k.1x[1j.1i.t](1j.1i.p.x,1j.1i.p.y,1j.1i.p.1C,1j.1i.p.hb)){if(1j.1i.hc&&1j.1i.h==I){k.1x.3Q[i].2R(1j.1i.hc)}if(1j.1i.h==I&&1j.1i.7x){bK=1b}1j.1i.h=1b;k.1x.5r=1j;if(k.1t&&1j.1i.s&&k.11.F.A.44){k.1t.1c.K(0).3l=1j.1i.eV;k.1t.al(1j)}eQ++}P if(1j.1i.h==1b){if(1j.1i.7y){1j.1i.7y.1D(1j,[e,k.11.1c.K(0).7c,1j.1i.fx])}if(1j.1i.hc){k.1x.3Q[i].4i(1j.1i.hc)}1j.1i.h=I}}if(k.1t&&!k.1x.5r&&k.11.F.44){k.1t.1c.K(0).14.19=\'1o\'}if(bK){k.1x.5r.1i.7x.1D(k.1x.5r,[e,k.11.1c.K(0).7c])}},eO:u(e){D i;24(i in k.1x.3Q){D 1j=k.1x.3Q[i].K(0);if(1j.1i.ac){k.1x.3Q[i].4i(1j.1i.ac)}if(1j.1i.hc){k.1x.3Q[i].4i(1j.1i.hc)}if(1j.1i.s){k.1t.7s[k.1t.7s.1g]=i}if(1j.1i.9l&&1j.1i.h==1b){1j.1i.h=I;1j.1i.9l.1D(1j,[e,1j.1i.fx])}1j.1i.m=I;1j.1i.h=I}k.1x.3Q={}},4U:u(){E q.1E(u(){if(q.9j){if(q.1i.s){id=k.1p(q,\'id\');k.1t.5L[id]=S;k(\'.\'+q.1i.a,q).aS()}k.1x.3P[\'d\'+q.c2]=S;q.9j=I;q.f=S}})},2r:u(o){E q.1E(u(){if(q.9j==1b||!o.3C||!k.1a||!k.11){E}q.1i={a:o.3C,ac:o.9J||I,hc:o.a5||I,eV:o.58||I,9l:o.gq||o.9l||I,7x:o.7x||o.dC||I,7y:o.7y||o.fO||I,9i:o.9i||I,t:o.6I&&(o.6I==\'du\'||o.6I==\'cV\')?o.6I:\'1s\',fx:o.fx?o.fx:I,m:I,h:I};if(o.cQ==1b&&k.1t){id=k.1p(q,\'id\');k.1t.5L[id]=q.1i.a;q.1i.s=1b;if(o.2Z){q.1i.2Z=o.2Z;q.1i.ay=k.1t.8x(id).7l}}q.9j=1b;q.c2=T(18.6o()*c9);k.1x.3P[\'d\'+q.c2]=k(q);k.1x.8D++})}};k.fn.23({dR:k.1x.4U,do:k.1x.2r});k.gD=k.1x.dS;k.3B={1c:S,8L:u(){3g=q.2y;if(!3g)E;14={dz:k(q).B(\'dz\')||\'\',4A:k(q).B(\'4A\')||\'\',8Z:k(q).B(\'8Z\')||\'\',dP:k(q).B(\'dP\')||\'\',dT:k(q).B(\'dT\')||\'\',dU:k(q).B(\'dU\')||\'\',c3:k(q).B(\'c3\')||\'\',dY:k(q).B(\'dY\')||\'\'};k.3B.1c.B(14);3x=k.3B.dX(3g);3x=3x.4E(12 bb("\\\\n","g"),"
    ");k.3B.1c.3x(\'gL\');ci=k.3B.1c.K(0).4c;k.3B.1c.3x(3x);Z=k.3B.1c.K(0).4c+ci;if(q.6l.2M&&Z>q.6l.2M[0]){Z=q.6l.2M[0]}q.14.Z=Z+\'U\';if(q.4Y==\'cf\'){W=k.3B.1c.K(0).5W+ci;if(q.6l.2M&&W>q.6l.2M[1]){W=q.6l.2M[1]}q.14.W=W+\'U\'}},dX:u(3g){cg={\'&\':\'&gK;\',\'<\':\'&gJ;\',\'>\':\'>\',\'"\':\'&gs;\'};24(i in cg){3g=3g.4E(12 bb(i,\'g\'),cg[i])}E 3g},2r:u(2M){if(k.3B.1c==S){k(\'2e\',1h).1S(\'<22 id="dE" 14="Y: 1P; Q: 0; O: 0; 3n: 2K;">\');k.3B.1c=k(\'#dE\')}E q.1E(u(){if(/cf|ch/.48(q.4Y)){if(q.4Y==\'ch\'){dB=q.5C(\'1u\');if(!/3g|gr/.48(dB)){E}}if(2M&&(2M.1K==bn||(2M.1K==7F&&2M.1g==2))){if(2M.1K==bn)2M=[2M,2M];P{2M[0]=T(2M[0])||8J;2M[1]=T(2M[1])||8J}q.6l={2M:2M}}k(q).5B(k.3B.8L).6y(k.3B.8L).dH(k.3B.8L);k.3B.8L.1D(q)}})}};k.fn.kc=k.3B.2r;k.4K=u(e){if(/^kd$|^ke$|^ka$|^6L$|^k9$|^k5$|^k4$|^k6$|^k7$|^2e$|^k8$|^kf$|^kg$|^kn$|^ko$|^kp$|^kq$/i.48(e.9N))E I;P E 1b};k.fx.a0=u(e,65){D c=e.7c;D cs=c.14;cs.Y=65.Y;cs.5K=65.3G.t;cs.5j=65.3G.l;cs.5k=65.3G.b;cs.5z=65.3G.r;cs.Q=65.Q+\'U\';cs.O=65.O+\'U\';e.31.ew(c,e);e.31.km(e)};k.fx.9P=u(e){if(!k.4K(e))E I;D t=k(e);D es=e.14;D 73=I;if(t.B(\'19\')==\'1o\'){5Y=t.B(\'3n\');t.B(\'3n\',\'2K\').1Y();73=1b}D V={};V.Y=t.B(\'Y\');V.1q=k.1a.2o(e);V.3G=k.1a.cy(e);D co=e.4Z?e.4Z.ei:t.B(\'hU\');V.Q=T(t.B(\'Q\'))||0;V.O=T(t.B(\'O\'))||0;D eo=\'kl\'+T(18.6o()*c9);D 6u=1h.3F(/^1T$|^br$|^kh$|^hr$|^8C$|^kj$|^8T$|^3A$|^kk$|^k3$|^k2$|^9h$|^dl$|^jM$/i.48(e.9N)?\'22\':e.9N);k.1p(6u,\'id\',eo);D jN=k(6u).2R(\'jO\');D 4h=6u.14;D Q=0;D O=0;if(V.Y==\'2s\'||V.Y==\'1P\'){Q=V.Q;O=V.O}4h.Q=Q+\'U\';4h.O=O+\'U\';4h.Y=V.Y!=\'2s\'&&V.Y!=\'1P\'?\'2s\':V.Y;4h.W=V.1q.hb+\'U\';4h.Z=V.1q.1C+\'U\';4h.5K=V.3G.t;4h.5z=V.3G.r;4h.5k=V.3G.b;4h.5j=V.3G.l;4h.2U=\'2K\';if(k.3a.4t){4h.ei=co}P{4h.jK=co}if(k.3a=="4t"){es.5E="8V(1G="+0.ex*2a+")"}es.1G=0.ex;e.31.ew(6u,e);6u.jF(e);es.5K=\'2P\';es.5z=\'2P\';es.5k=\'2P\';es.5j=\'2P\';es.Y=\'1P\';es.eu=\'1o\';es.Q=\'2P\';es.O=\'2P\';if(73){t.2G();es.3n=5Y}E{V:V,3p:k(6u)}};k.fx.8E={jE:[0,1V,1V],jG:[eD,1V,1V],jH:[e6,e6,jI],jP:[0,0,0],ks:[0,0,1V],jY:[dv,42,42],jZ:[0,1V,1V],k0:[0,0,7w],k1:[0,7w,7w],jX:[cn,cn,cn],jS:[0,2a,0],jR:[jT,jU,eb],jV:[7w,0,7w],kr:[85,eb,47],kP:[1V,eA,0],kN:[kO,50,kx],kF:[7w,0,0],kD:[ku,f8,kt],ky:[kH,0,9C],kL:[1V,0,1V],kM:[1V,kJ,0],kv:[0,6C,0],kA:[75,0,kE],kC:[eD,eB,eA],kG:[kI,kB,eB],kw:[e0,1V,1V],kz:[eL,kK,eL],kQ:[9C,9C,9C],jC:[1V,iy,iz],iA:[1V,1V,e0],iB:[0,1V,0],ix:[1V,0,1V],iv:[6C,0,0],iq:[0,0,6C],ip:[6C,6C,0],ir:[1V,dv,0],it:[1V,ah,iu],iC:[6C,0,6C],iD:[1V,0,0],iK:[ah,ah,ah],iL:[1V,1V,1V],iM:[1V,1V,0]};k.fx.6D=u(4x,dm){if(k.fx.8E[4x])E{r:k.fx.8E[4x][0],g:k.fx.8E[4x][1],b:k.fx.8E[4x][2]};P if(2W=/^6Y\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)$/.a4(4x))E{r:T(2W[1]),g:T(2W[2]),b:T(2W[3])};P if(2W=/6Y\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)$/.a4(4x))E{r:2m(2W[1])*2.55,g:2m(2W[2])*2.55,b:2m(2W[3])*2.55};P if(2W=/^#([a-fA-79-9])([a-fA-79-9])([a-fA-79-9])$/.a4(4x))E{r:T("77"+2W[1]+2W[1]),g:T("77"+2W[2]+2W[2]),b:T("77"+2W[3]+2W[3])};P if(2W=/^#([a-fA-79-9]{2})([a-fA-79-9]{2})([a-fA-79-9]{2})$/.a4(4x))E{r:T("77"+2W[1]),g:T("77"+2W[2]),b:T("77"+2W[3])};P E dm==1b?I:{r:1V,g:1V,b:1V}};k.fx.dD={5Q:1,5b:1,5O:1,4S:1,4D:1,4A:1,W:1,O:1,c3:1,iI:1,5k:1,5j:1,5z:1,5K:1,8b:1,6x:1,8c:1,av:1,1G:1,iE:1,iF:1,5n:1,4X:1,5U:1,5M:1,2L:1,jD:1,Q:1,Z:1,3I:1};k.fx.dA={7i:1,iG:1,iH:1,io:1,im:1,4x:1,i2:1};k.fx.8A=[\'i3\',\'i4\',\'i5\',\'i1\'];k.fx.cc={\'cd\':[\'2E\',\'dK\'],\'a8\':[\'2E\',\'bh\'],\'6w\':[\'6w\',\'\'],\'8F\':[\'8F\',\'\']};k.fn.23({5w:u(5X,H,G,J){E q.1w(u(){D a1=k.H(H,G,J);D e=12 k.dM(q,a1,5X)})},c4:u(H,J){E q.1w(u(){D a1=k.H(H,J);D e=12 k.c4(q,a1)})},8o:u(2D){E q.1E(u(){if(q.6d)k.by(q,2D)})},i0:u(2D){E q.1E(u(){if(q.6d)k.by(q,2D);if(q.1w&&q.1w[\'fx\'])q.1w.fx=[]})}});k.23({c4:u(2f,M){D z=q,3t;z.2D=u(){if(k.fQ(M.21))M.21.1D(2f)};z.2I=6V(u(){z.2D()},M.1m);2f.6d=z},G:{c8:u(p,n,1W,1H,1m){E((-18.5H(p*18.2Q)/2)+0.5)*1H+1W}},dM:u(2f,M,5X){D z=q,3t;D y=2f.14;D fR=k.B(2f,"2U");D 72=k.B(2f,"19");D 2j={};z.9O=(12 7g()).7z();M.G=M.G&&k.G[M.G]?M.G:\'c8\';z.ag=u(2w,43){if(k.fx.dD[2w]){if(43==\'1Y\'||43==\'2G\'||43==\'3R\'){if(!2f.6v)2f.6v={};D r=2m(k.6E(2f,2w));2f.6v[2w]=r&&r>-c9?r:(2m(k.B(2f,2w))||0);43=43==\'3R\'?(72==\'1o\'?\'1Y\':\'2G\'):43;M[43]=1b;2j[2w]=43==\'1Y\'?[0,2f.6v[2w]]:[2f.6v[2w],0];if(2w!=\'1G\')y[2w]=2j[2w][0]+(2w!=\'3I\'&&2w!=\'8Z\'?\'U\':\'\');P k.1p(y,"1G",2j[2w][0])}P{2j[2w]=[2m(k.6E(2f,2w)),2m(43)||0]}}P if(k.fx.dA[2w])2j[2w]=[k.fx.6D(k.6E(2f,2w)),k.fx.6D(43)];P if(/^6w$|8F$|2E$|a8$|cd$/i.48(2w)){D m=43.4E(/\\s+/g,\' \').4E(/6Y\\s*\\(\\s*/g,\'6Y(\').4E(/\\s*,\\s*/g,\',\').4E(/\\s*\\)/g,\')\').d5(/([^\\s]+)/g);3m(2w){1e\'6w\':1e\'8F\':1e\'cd\':1e\'a8\':m[3]=m[3]||m[1]||m[0];m[2]=m[2]||m[0];m[1]=m[1]||m[0];24(D i=0;iM.1m+z.9O){5T(z.2I);z.2I=S;24(p in 2j){if(p=="1G")k.1p(y,"1G",2j[p][1]);P if(2g 2j[p][1]==\'8T\')y[p]=\'6Y(\'+2j[p][1].r+\',\'+2j[p][1].g+\',\'+2j[p][1].b+\')\';P y[p]=2j[p][1]+(p!=\'3I\'&&p!=\'8Z\'?\'U\':\'\')}if(M.2G||M.1Y)24(D p in 2f.6v)if(p=="1G")k.1p(y,p,2f.6v[p]);P y[p]="";y.19=M.2G?\'1o\':(72!=\'1o\'?72:\'2B\');y.2U=fR;2f.6d=S;if(k.fQ(M.21))M.21.1D(2f)}P{D n=t-q.9O;D 8w=n/M.1m;24(p in 2j){if(2g 2j[p][1]==\'8T\'){y[p]=\'6Y(\'+T(k.G[M.G](8w,n,2j[p][0].r,(2j[p][1].r-2j[p][0].r),M.1m))+\',\'+T(k.G[M.G](8w,n,2j[p][0].g,(2j[p][1].g-2j[p][0].g),M.1m))+\',\'+T(k.G[M.G](8w,n,2j[p][0].b,(2j[p][1].b-2j[p][0].b),M.1m))+\')\'}P{D bz=k.G[M.G](8w,n,2j[p][0],(2j[p][1]-2j[p][0]),M.1m);if(p=="1G")k.1p(y,"1G",bz);P y[p]=bz+(p!=\'3I\'&&p!=\'8Z\'?\'U\':\'\')}}}};z.2I=6V(u(){z.2D()},13);2f.6d=z},by:u(2f,2D){if(2D)2f.6d.9O-=iO;P{1X.5T(2f.6d.2I);2f.6d=S;k.2H(2f,"fx")}}});k.bl=u(5Z){D 5f={};if(2g 5Z==\'4V\'){5Z=5Z.6c().7C(\';\');24(D i=0;i<5Z.1g;i++){6X=5Z[i].7C(\':\');if(6X.1g==2){5f[k.g6(6X[0].4E(/\\-(\\w)/g,u(m,c){E c.jo()}))]=k.g6(6X[1])}}}E 5f};k.fn.23({g3:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'4F\',G)})},gb:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'4r\',G)})},jl:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'fJ\',G)})},jk:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'O\',G)})},jg:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'2L\',G)})},jf:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'fh\',G)})}});k.fx.61=u(e,H,J,2S,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.1N=k.1a.2o(e);z.G=2g J==\'4V\'?J:G||S;if(!e.4s)e.4s=z.el.B(\'19\');if(2S==\'fJ\'){2S=z.el.B(\'19\')==\'1o\'?\'4r\':\'4F\'}P if(2S==\'fh\'){2S=z.el.B(\'19\')==\'1o\'?\'2L\':\'O\'}z.el.1Y();z.H=H;z.J=2g J==\'u\'?J:S;z.fx=k.fx.9P(e);z.2S=2S;z.21=u(){if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}if(z.2S==\'4r\'||z.2S==\'2L\'){z.el.B(\'19\',z.el.K(0).4s==\'1o\'?\'2B\':z.el.K(0).4s)}P{z.el.2G()}k.fx.a0(z.fx.3p.K(0),z.fx.V);k.2H(z.el.K(0),\'1n\')};3m(z.2S){1e\'4F\':63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'W\');63.1L(z.fx.V.1q.hb,0);1r;1e\'4r\':z.fx.3p.B(\'W\',\'9R\');z.el.1Y();63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'W\');63.1L(0,z.fx.V.1q.hb);1r;1e\'O\':63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'Z\');63.1L(z.fx.V.1q.1C,0);1r;1e\'2L\':z.fx.3p.B(\'Z\',\'9R\');z.el.1Y();63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'Z\');63.1L(0,z.fx.V.1q.1C);1r}};k.fn.ji=u(5D,J){E q.1w(\'1n\',u(){if(!k.4K(q)){k.2H(q,\'1n\');E I}D e=12 k.fx.f4(q,5D,J);e.bp()})};k.fx.f4=u(e,5D,J){D z=q;z.el=k(e);z.el.1Y();z.J=J;z.5D=T(5D)||40;z.V={};z.V.Y=z.el.B(\'Y\');z.V.Q=T(z.el.B(\'Q\'))||0;z.V.O=T(z.el.B(\'O\'))||0;if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.3V=5;z.5y=1;z.bp=u(){z.5y++;z.e=12 k.fx(z.el.K(0),{1m:jj,21:u(){z.e=12 k.fx(z.el.K(0),{1m:80,21:u(){z.5D=T(z.5D/2);if(z.5y<=z.3V)z.bp();P{z.el.B(\'Y\',z.V.Y).B(\'Q\',z.V.Q+\'U\').B(\'O\',z.V.O+\'U\');k.2H(z.el.K(0),\'1n\');if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}}}},\'Q\');z.e.1L(z.V.Q-z.5D,z.V.Q)}},\'Q\');z.e.1L(z.V.Q,z.V.Q-z.5D)}};k.fn.23({jy:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4r\',\'4l\',G)})},jz:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4r\',\'in\',G)})},jA:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4r\',\'3R\',G)})},jB:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4F\',\'4l\',G)})},jx:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4F\',\'in\',G)})},jw:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4F\',\'3R\',G)})},js:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'O\',\'4l\',G)})},jt:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'O\',\'in\',G)})},ju:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'O\',\'3R\',G)})},jv:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'2L\',\'4l\',G)})},je:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'2L\',\'in\',G)})},jd:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'2L\',\'3R\',G)})}});k.fx.4f=u(e,H,J,2S,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.V={};z.V.Y=z.el.B(\'Y\');z.V.Q=z.el.B(\'Q\');z.V.O=z.el.B(\'O\');if(!e.4s)e.4s=z.el.B(\'19\');if(1u==\'3R\'){1u=z.el.B(\'19\')==\'1o\'?\'in\':\'4l\'}z.el.1Y();if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.1u=1u;J=2g J==\'u\'?J:S;8H=1;3m(2S){1e\'4F\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'Q\');z.62=2m(z.V.Q)||0;z.9K=z.fG;8H=-1;1r;1e\'4r\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'Q\');z.62=2m(z.V.Q)||0;z.9K=z.fG;1r;1e\'2L\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'O\');z.62=2m(z.V.O)||0;z.9K=z.fy;1r;1e\'O\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'O\');z.62=2m(z.V.O)||0;z.9K=z.fy;8H=-1;1r}z.e2=12 k.fx(z.el.K(0),k.H(H,z.G,u(){z.el.B(z.V);if(z.1u==\'4l\'){z.el.B(\'19\',\'1o\')}P z.el.B(\'19\',z.el.K(0).4s==\'1o\'?\'2B\':z.el.K(0).4s);k.2H(z.el.K(0),\'1n\')}),\'1G\');if(1u==\'in\'){z.e.1L(z.62+2a*8H,z.62);z.e2.1L(0,1)}P{z.e.1L(z.62,z.62+2a*8H);z.e2.1L(1,0)}};k.fn.23({j0:u(H,W,J,G){E q.1w(\'1n\',u(){12 k.fx.9L(q,H,W,J,\'fp\',G)})},iW:u(H,W,J,G){E q.1w(\'1n\',u(){12 k.fx.9L(q,H,W,J,\'9M\',G)})},iV:u(H,W,J,G){E q.1w(\'1n\',u(){12 k.fx.9L(q,H,W,J,\'3R\',G)})}});k.fx.9L=u(e,H,W,J,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;if(1u==\'3R\'){1u=z.el.B(\'19\')==\'1o\'?\'9M\':\'fp\'}z.H=H;z.W=W&&W.1K==bn?W:20;z.fx=k.fx.9P(e);z.1u=1u;z.21=u(){if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}if(z.1u==\'9M\'){z.el.1Y()}P{z.el.2G()}k.fx.a0(z.fx.3p.K(0),z.fx.V);k.2H(z.el.K(0),\'1n\')};if(z.1u==\'9M\'){z.el.1Y();z.fx.3p.B(\'W\',z.W+\'U\').B(\'Z\',\'9R\');z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,u(){z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'W\');z.ef.1L(z.W,z.fx.V.1q.hb)}),\'Z\');z.ef.1L(0,z.fx.V.1q.1C)}P{z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,u(){z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'Z\');z.ef.1L(z.fx.V.1q.1C,0)}),\'W\');z.ef.1L(z.fx.V.1q.hb,z.W)}};k.fn.iR=u(H,4x,J,G){E q.1w(\'fv\',u(){q.6W=k(q).1p("14")||\'\';G=2g J==\'4V\'?J:G||S;J=2g J==\'u\'?J:S;D 9S=k(q).B(\'7i\');D 8I=q.31;7d(9S==\'cu\'&&8I){9S=k(8I).B(\'7i\');8I=8I.31}k(q).B(\'7i\',4x);if(2g q.6W==\'8T\')q.6W=q.6W["9X"];k(q).5w({\'7i\':9S},H,G,u(){k.2H(q,\'fv\');if(2g k(q).1p("14")==\'8T\'){k(q).1p("14")["9X"]="";k(q).1p("14")["9X"]=q.6W}P{k(q).1p("14",q.6W)}if(J)J.1D(q)})})};k.fn.23({iT:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'49\',\'6g\',G)})},iU:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'4j\',\'6g\',G)})},j1:u(H,J,G){E q.1w(\'1n\',u(){if(k.B(q,\'19\')==\'1o\'){12 k.fx.5m(q,H,J,\'4j\',\'6Z\',G)}P{12 k.fx.5m(q,H,J,\'4j\',\'6g\',G)}})},j2:u(H,J,G){E q.1w(\'1n\',u(){if(k.B(q,\'19\')==\'1o\'){12 k.fx.5m(q,H,J,\'49\',\'6Z\',G)}P{12 k.fx.5m(q,H,J,\'49\',\'6g\',G)}})},j9:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'49\',\'6Z\',G)})},ja:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'4j\',\'6Z\',G)})}});k.fx.5m=u(e,H,J,2S,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;D 73=I;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;z.1u=1u;z.H=H;z.2i=k.1a.2o(e);z.V={};z.V.Y=z.el.B(\'Y\');z.V.19=z.el.B(\'19\');if(z.V.19==\'1o\'){5Y=z.el.B(\'3n\');z.el.1Y();73=1b}z.V.Q=z.el.B(\'Q\');z.V.O=z.el.B(\'O\');if(73){z.el.2G();z.el.B(\'3n\',5Y)}z.V.Z=z.2i.w+\'U\';z.V.W=z.2i.h+\'U\';z.V.2U=z.el.B(\'2U\');z.2i.Q=T(z.V.Q)||0;z.2i.O=T(z.V.O)||0;if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.el.B(\'2U\',\'2K\').B(\'W\',1u==\'6Z\'&&2S==\'49\'?1:z.2i.h+\'U\').B(\'Z\',1u==\'6Z\'&&2S==\'4j\'?1:z.2i.w+\'U\');z.21=u(){z.el.B(z.V);if(z.1u==\'6g\')z.el.2G();P z.el.1Y();k.2H(z.el.K(0),\'1n\')};3m(2S){1e\'49\':z.eh=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'W\');z.et=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'Q\');if(z.1u==\'6g\'){z.eh.1L(z.2i.h,0);z.et.1L(z.2i.Q,z.2i.Q+z.2i.h/2)}P{z.eh.1L(0,z.2i.h);z.et.1L(z.2i.Q+z.2i.h/2,z.2i.Q)}1r;1e\'4j\':z.eh=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'Z\');z.et=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'O\');if(z.1u==\'6g\'){z.eh.1L(z.2i.w,0);z.et.1L(z.2i.O,z.2i.O+z.2i.w/2)}P{z.eh.1L(0,z.2i.w);z.et.1L(z.2i.O+z.2i.w/2,z.2i.O)}1r}};k.fn.bg=u(H,3V,J){E q.1w(\'1n\',u(){if(!k.4K(q)){k.2H(q,\'1n\');E I}D fx=12 k.fx.bg(q,H,3V,J);fx.bf()})};k.fx.bg=u(el,H,3V,J){D z=q;z.3V=3V;z.5y=1;z.el=el;z.H=H;z.J=J;k(z.el).1Y();z.bf=u(){z.5y++;z.e=12 k.fx(z.el,k.H(z.H,u(){z.ef=12 k.fx(z.el,k.H(z.H,u(){if(z.5y<=z.3V)z.bf();P{k.2H(z.el,\'1n\');if(z.J&&z.J.1K==2A){z.J.1D(z.el)}}}),\'1G\');z.ef.1L(0,1)}),\'1G\');z.e.1L(1,0)}};k.fn.23({jb:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.6G(q,H,1,2a,1b,J,\'fa\',G)})},jc:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.6G(q,H,2a,1,1b,J,\'b4\',G)})},j8:u(H,J,G){E q.1w(\'1n\',u(){D G=G||\'fl\';12 k.fx.6G(q,H,2a,f8,1b,J,\'6h\',G)})},6G:u(H,57,30,6H,J,G){E q.1w(\'1n\',u(){12 k.fx.6G(q,H,57,30,6H,J,\'6G\',G)})}});k.fx.6G=u(e,H,57,30,6H,J,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.57=T(57)||2a;z.30=T(30)||2a;z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;z.1m=k.H(H).1m;z.6H=6H||S;z.2i=k.1a.2o(e);z.V={Z:z.el.B(\'Z\'),W:z.el.B(\'W\'),4A:z.el.B(\'4A\')||\'2a%\',Y:z.el.B(\'Y\'),19:z.el.B(\'19\'),Q:z.el.B(\'Q\'),O:z.el.B(\'O\'),2U:z.el.B(\'2U\'),4S:z.el.B(\'4S\'),5O:z.el.B(\'5O\'),5Q:z.el.B(\'5Q\'),5b:z.el.B(\'5b\'),5M:z.el.B(\'5M\'),5U:z.el.B(\'5U\'),5n:z.el.B(\'5n\'),4X:z.el.B(\'4X\')};z.Z=T(z.V.Z)||e.4c||0;z.W=T(z.V.W)||e.5W||0;z.Q=T(z.V.Q)||0;z.O=T(z.V.O)||0;1q=[\'em\',\'U\',\'j7\',\'%\'];24(i in 1q){if(z.V.4A.3J(1q[i])>0){z.fg=1q[i];z.4A=2m(z.V.4A)}if(z.V.4S.3J(1q[i])>0){z.fc=1q[i];z.bw=2m(z.V.4S)||0}if(z.V.5O.3J(1q[i])>0){z.fe=1q[i];z.bc=2m(z.V.5O)||0}if(z.V.5Q.3J(1q[i])>0){z.fL=1q[i];z.bA=2m(z.V.5Q)||0}if(z.V.5b.3J(1q[i])>0){z.g8=1q[i];z.bt=2m(z.V.5b)||0}if(z.V.5M.3J(1q[i])>0){z.g4=1q[i];z.bx=2m(z.V.5M)||0}if(z.V.5U.3J(1q[i])>0){z.g9=1q[i];z.bv=2m(z.V.5U)||0}if(z.V.5n.3J(1q[i])>0){z.gc=1q[i];z.bj=2m(z.V.5n)||0}if(z.V.4X.3J(1q[i])>0){z.fK=1q[i];z.b7=2m(z.V.4X)||0}}if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.el.B(\'2U\',\'2K\');z.1u=1u;3m(z.1u){1e\'fa\':z.4b=z.Q+z.2i.h/2;z.5a=z.Q;z.4k=z.O+z.2i.w/2;z.59=z.O;1r;1e\'b4\':z.5a=z.Q+z.2i.h/2;z.4b=z.Q;z.59=z.O+z.2i.w/2;z.4k=z.O;1r;1e\'6h\':z.5a=z.Q-z.2i.h/4;z.4b=z.Q;z.59=z.O-z.2i.w/4;z.4k=z.O;1r}z.be=I;z.t=(12 7g).7z();z.4w=u(){5T(z.2I);z.2I=S};z.2D=u(){if(z.be==I){z.el.1Y();z.be=1b}D t=(12 7g).7z();D n=t-z.t;D p=n/z.1m;if(t>=z.1m+z.t){9T(u(){o=1;if(z.1u){t=z.5a;l=z.59;if(z.1u==\'6h\')o=0}z.bs(z.30,l,t,1b,o)},13);z.4w()}P{o=1;if(!k.G||!k.G[z.G]){s=((-18.5H(p*18.2Q)/2)+0.5)*(z.30-z.57)+z.57}P{s=k.G[z.G](p,n,z.57,(z.30-z.57),z.1m)}if(z.1u){if(!k.G||!k.G[z.G]){t=((-18.5H(p*18.2Q)/2)+0.5)*(z.5a-z.4b)+z.4b;l=((-18.5H(p*18.2Q)/2)+0.5)*(z.59-z.4k)+z.4k;if(z.1u==\'6h\')o=((-18.5H(p*18.2Q)/2)+0.5)*(-0.9Y)+0.9Y}P{t=k.G[z.G](p,n,z.4b,(z.5a-z.4b),z.1m);l=k.G[z.G](p,n,z.4k,(z.59-z.4k),z.1m);if(z.1u==\'6h\')o=k.G[z.G](p,n,0.9Y,-0.9Y,z.1m)}}z.bs(s,l,t,I,o)}};z.2I=6V(u(){z.2D()},13);z.bs=u(4q,O,Q,fM,1G){z.el.B(\'W\',z.W*4q/2a+\'U\').B(\'Z\',z.Z*4q/2a+\'U\').B(\'O\',O+\'U\').B(\'Q\',Q+\'U\').B(\'4A\',z.4A*4q/2a+z.fg);if(z.bw)z.el.B(\'4S\',z.bw*4q/2a+z.fc);if(z.bc)z.el.B(\'5O\',z.bc*4q/2a+z.fe);if(z.bA)z.el.B(\'5Q\',z.bA*4q/2a+z.fL);if(z.bt)z.el.B(\'5b\',z.bt*4q/2a+z.g8);if(z.bx)z.el.B(\'5M\',z.bx*4q/2a+z.g4);if(z.bv)z.el.B(\'5U\',z.bv*4q/2a+z.g9);if(z.bj)z.el.B(\'5n\',z.bj*4q/2a+z.gc);if(z.b7)z.el.B(\'4X\',z.b7*4q/2a+z.fK);if(z.1u==\'6h\'){if(1X.71)z.el.K(0).14.5E="8V(1G="+1G*2a+")";z.el.K(0).14.1G=1G}if(fM){if(z.6H){z.el.B(z.V)}if(z.1u==\'b4\'||z.1u==\'6h\'){z.el.B(\'19\',\'1o\');if(z.1u==\'6h\'){if(1X.71)z.el.K(0).14.5E="8V(1G="+2a+")";z.el.K(0).14.1G=1}}P z.el.B(\'19\',\'2B\');if(z.J)z.J.1D(z.el.K(0));k.2H(z.el.K(0),\'1n\')}}};k.fn.23({9U:u(H,1O,G){o=k.H(H);E q.1w(\'1n\',u(){12 k.fx.9U(q,o,1O,G)})},j6:u(H,1O,G){E q.1E(u(){k(\'a[@3h*="#"]\',q).5h(u(e){fW=q.3h.7C(\'#\');k(\'#\'+fW[1]).9U(H,1O,G);E I})})}});k.fx.9U=u(e,o,1O,G){D z=q;z.o=o;z.e=e;z.1O=/fT|gd/.48(1O)?1O:I;z.G=G;p=k.1a.3w(e);s=k.1a.6z();z.4w=u(){5T(z.2I);z.2I=S;k.2H(z.e,\'1n\')};z.t=(12 7g).7z();s.h=s.h>s.ih?(s.h-s.ih):s.h;s.w=s.w>s.iw?(s.w-s.iw):s.w;z.5a=p.y>s.h?s.h:p.y;z.59=p.x>s.w?s.w:p.x;z.4b=s.t;z.4k=s.l;z.2D=u(){D t=(12 7g).7z();D n=t-z.t;D p=n/z.o.1m;if(t>=z.o.1m+z.t){z.4w();9T(u(){z.d3(z.5a,z.59)},13)}P{if(!z.1O||z.1O==\'fT\'){if(!k.G||!k.G[z.G]){9V=((-18.5H(p*18.2Q)/2)+0.5)*(z.5a-z.4b)+z.4b}P{9V=k.G[z.G](p,n,z.4b,(z.5a-z.4b),z.o.1m)}}P{9V=z.4b}if(!z.1O||z.1O==\'gd\'){if(!k.G||!k.G[z.G]){9W=((-18.5H(p*18.2Q)/2)+0.5)*(z.59-z.4k)+z.4k}P{9W=k.G[z.G](p,n,z.4k,(z.59-z.4k),z.o.1m)}}P{9W=z.4k}z.d3(9V,9W)}};z.d3=u(t,l){1X.j4(l,t)};z.2I=6V(u(){z.2D()},13)};k.fn.cY=u(3V,J){E q.1w(\'1n\',u(){if(!k.4K(q)){k.2H(q,\'1n\');E I}D e=12 k.fx.cY(q,3V,J);e.cG()})};k.fx.cY=u(e,3V,J){D z=q;z.el=k(e);z.el.1Y();z.3V=T(3V)||3;z.J=J;z.5y=1;z.V={};z.V.Y=z.el.B(\'Y\');z.V.Q=T(z.el.B(\'Q\'))||0;z.V.O=T(z.el.B(\'O\'))||0;if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.cG=u(){z.5y++;z.e=12 k.fx(z.el.K(0),{1m:60,21:u(){z.e=12 k.fx(z.el.K(0),{1m:60,21:u(){z.e=12 k.fx(e,{1m:60,21:u(){if(z.5y<=z.3V)z.cG();P{z.el.B(\'Y\',z.V.Y).B(\'Q\',z.V.Q+\'U\').B(\'O\',z.V.O+\'U\');k.2H(z.el.K(0),\'1n\');if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}}}},\'O\');z.e.1L(z.V.O-20,z.V.O)}},\'O\');z.e.1L(z.V.O+20,z.V.O-20)}},\'O\');z.e.1L(z.V.O,z.V.O+20)}};k.fn.23({fo:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4F\',\'in\',G)})},fq:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4F\',\'4l\',G)})},iY:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4F\',\'3R\',G)})},iX:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4r\',\'in\',G)})},jr:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4r\',\'4l\',G)})},jq:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4r\',\'3R\',G)})},jp:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'O\',\'in\',G)})},jn:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'O\',\'4l\',G)})},jm:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'O\',\'3R\',G)})},iP:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'2L\',\'in\',G)})},ic:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'2L\',\'4l\',G)})},ib:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'2L\',\'3R\',G)})}});k.fx.1z=u(e,H,J,2S,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;if(1u==\'3R\'){1u=z.el.B(\'19\')==\'1o\'?\'in\':\'4l\'}if(!e.4s)e.4s=z.el.B(\'19\');z.el.1Y();z.H=H;z.fx=k.fx.9P(e);z.1u=1u;z.2S=2S;z.21=u(){if(z.1u==\'4l\')z.el.B(\'3n\',\'2K\');k.fx.a0(z.fx.3p.K(0),z.fx.V);if(z.1u==\'in\'){z.el.B(\'19\',z.el.K(0).4s==\'1o\'?\'2B\':z.el.K(0).4s)}P{z.el.B(\'19\',\'1o\');z.el.B(\'3n\',\'dd\')}if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}k.2H(z.el.K(0),\'1n\')};3m(z.2S){1e\'4F\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'Q\');z.7v=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G),\'W\');if(z.1u==\'in\'){z.ef.1L(-z.fx.V.1q.hb,0);z.7v.1L(0,z.fx.V.1q.hb)}P{z.ef.1L(0,-z.fx.V.1q.hb);z.7v.1L(z.fx.V.1q.hb,0)}1r;1e\'4r\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'Q\');if(z.1u==\'in\'){z.ef.1L(z.fx.V.1q.hb,0)}P{z.ef.1L(0,z.fx.V.1q.hb)}1r;1e\'O\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'O\');z.7v=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G),\'Z\');if(z.1u==\'in\'){z.ef.1L(-z.fx.V.1q.1C,0);z.7v.1L(0,z.fx.V.1q.1C)}P{z.ef.1L(0,-z.fx.V.1q.1C);z.7v.1L(z.fx.V.1q.1C,0)}1r;1e\'2L\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'O\');if(z.1u==\'in\'){z.ef.1L(z.fx.V.1q.1C,0)}P{z.ef.1L(0,z.fx.V.1q.1C)}1r}};k.3f=S;k.fn.ig=u(o){E q.1w(\'1n\',u(){12 k.fx.dG(q,o)})};k.fx.dG=u(e,o){if(k.3f==S){k(\'2e\',1h).1S(\'<22 id="3f">\');k.3f=k(\'#3f\')}k.3f.B(\'19\',\'2B\').B(\'Y\',\'1P\');D z=q;z.el=k(e);if(!o||!o.30){E}if(o.30.1K==b0&&1h.9e(o.30)){o.30=1h.9e(o.30)}P if(!o.30.dq){E}if(!o.1m){o.1m=g5}z.1m=o.1m;z.30=o.30;z.8r=o.3l;z.21=o.21;if(z.8r){k.3f.2R(z.8r)}z.a3=0;z.a2=0;if(k.dF){z.a3=(T(k.3f.B(\'5b\'))||0)+(T(k.3f.B(\'5O\'))||0)+(T(k.3f.B(\'4X\'))||0)+(T(k.3f.B(\'5U\'))||0);z.a2=(T(k.3f.B(\'4S\'))||0)+(T(k.3f.B(\'5Q\'))||0)+(T(k.3f.B(\'5M\'))||0)+(T(k.3f.B(\'5n\'))||0)}z.26=k.23(k.1a.3w(z.el.K(0)),k.1a.2o(z.el.K(0)));z.2T=k.23(k.1a.3w(z.30),k.1a.2o(z.30));z.26.1C-=z.a3;z.26.hb-=z.a2;z.2T.1C-=z.a3;z.2T.hb-=z.a2;z.J=o.21;k.3f.B(\'Z\',z.26.1C+\'U\').B(\'W\',z.26.hb+\'U\').B(\'Q\',z.26.y+\'U\').B(\'O\',z.26.x+\'U\').5w({Q:z.2T.y,O:z.2T.x,Z:z.2T.1C,W:z.2T.hb},z.1m,u(){if(z.8r)k.3f.4i(z.8r);k.3f.B(\'19\',\'1o\');if(z.21&&z.21.1K==2A){z.21.1D(z.el.K(0),[z.30])}k.2H(z.el.K(0),\'1n\')})};k.1v={M:{2E:10,ec:\'1Q/iJ.eZ\',e3:\'<1T 2J="1Q/6g.da" />\',eW:0.8,d8:\'iN a6\',dc:\'57\',3W:8J},jQ:I,jW:I,6j:S,8m:I,8k:I,d1:u(2k){if(!k.1v.8k||k.1v.8m)E;D 3K=2k.7L||2k.7K||-1;3m(3K){1e 35:if(k.1v.6j)k.1v.26(S,k(\'a[@4I=\'+k.1v.6j+\']:jJ\').K(0));1r;1e 36:if(k.1v.6j)k.1v.26(S,k(\'a[@4I=\'+k.1v.6j+\']:jL\').K(0));1r;1e 37:1e 8:1e 33:1e 80:1e kb:D 9p=k(\'#87\');if(9p.K(0).53!=S){9p.K(0).53.1D(9p.K(0))}1r;1e 38:1r;1e 39:1e 34:1e 32:1e gl:1e 78:D 9k=k(\'#88\');if(9k.K(0).53!=S){9k.K(0).53.1D(9k.K(0))}1r;1e 40:1r;1e 27:k.1v.au();1r}},7q:u(M){if(M)k.23(k.1v.M,M);if(1X.2k){k(\'2e\',1h).1J(\'6y\',k.1v.d1)}P{k(1h).1J(\'6y\',k.1v.d1)}k(\'a\').1E(u(){el=k(q);en=el.1p(\'4I\')||\'\';e9=el.1p(\'3h\')||\'\';ev=/\\.da|\\.gw|\\.8X|\\.eZ|\\.gn/g;if(e9.6c().d5(ev)!=S&&en.6c().3J(\'eU\')==0){el.1J(\'5h\',k.1v.26)}});if(k.3a.4t){3A=1h.3F(\'3A\');k(3A).1p({id:\'cN\',2J:\'ek:I;\',ej:\'cD\',ep:\'cD\'}).B({19:\'1o\',Y:\'1P\',Q:\'0\',O:\'0\',5E:\'9n:9w.9y.cC(1G=0)\'});k(\'2e\').1S(3A)}8n=1h.3F(\'22\');k(8n).1p(\'id\',\'cP\').B({Y:\'1P\',19:\'1o\',Q:\'0\',O:\'0\',1G:0}).1S(1h.8M(\' \')).1J(\'5h\',k.1v.au);6A=1h.3F(\'22\');k(6A).1p(\'id\',\'eK\').B({4X:k.1v.M.2E+\'U\'}).1S(1h.8M(\' \'));cE=1h.3F(\'22\');k(cE).1p(\'id\',\'dg\').B({4X:k.1v.M.2E+\'U\',5n:k.1v.M.2E+\'U\'}).1S(1h.8M(\' \'));cF=1h.3F(\'a\');k(cF).1p({id:\'gg\',3h:\'#\'}).B({Y:\'1P\',2L:k.1v.M.2E+\'U\',Q:\'0\'}).1S(k.1v.M.e3).1J(\'5h\',k.1v.au);7m=1h.3F(\'22\');k(7m).1p(\'id\',\'cM\').B({Y:\'2s\',cA:\'O\',6w:\'0 9F\',3I:1}).1S(6A).1S(cE).1S(cF);2b=1h.3F(\'1T\');2b.2J=k.1v.M.ec;k(2b).1p(\'id\',\'eM\').B({Y:\'1P\'});4G=1h.3F(\'a\');k(4G).1p({id:\'87\',3h:\'#\'}).B({Y:\'1P\',19:\'1o\',2U:\'2K\',ey:\'1o\'}).1S(1h.8M(\' \'));4M=1h.3F(\'a\');k(4M).1p({id:\'88\',3h:\'#\'}).B({Y:\'1P\',2U:\'2K\',ey:\'1o\'}).1S(1h.8M(\' \'));1Z=1h.3F(\'22\');k(1Z).1p(\'id\',\'eE\').B({19:\'1o\',Y:\'2s\',2U:\'2K\',cA:\'O\',6w:\'0 9F\',Q:\'0\',O:\'0\',3I:2}).1S([2b,4G,4M]);6F=1h.3F(\'22\');k(6F).1p(\'id\',\'ao\').B({19:\'1o\',Y:\'1P\',2U:\'2K\',Q:\'0\',O:\'0\',cA:\'cv\',7i:\'cu\',hC:\'0\'}).1S([1Z,7m]);k(\'2e\').1S(8n).1S(6F)},26:u(e,C){el=C?k(C):k(q);9t=el.1p(\'4I\');D 6B,4u,4G,4M;if(9t!=\'eU\'){k.1v.6j=9t;8Y=k(\'a[@4I=\'+9t+\']\');6B=8Y.1N();4u=8Y.cZ(C?C:q);4G=8Y.K(4u-1);4M=8Y.K(4u+1)}89=el.1p(\'3h\');6A=el.1p(\'4g\');3O=k.1a.6z();8n=k(\'#cP\');if(!k.1v.8k){k.1v.8k=1b;if(k.3a.4t){k(\'#cN\').B(\'W\',18.3r(3O.ih,3O.h)+\'U\').B(\'Z\',18.3r(3O.iw,3O.w)+\'U\').1Y()}8n.B(\'W\',18.3r(3O.ih,3O.h)+\'U\').B(\'Z\',18.3r(3O.iw,3O.w)+\'U\').1Y().fX(cO,k.1v.M.eW,u(){k.1v.cw(89,6A,3O,6B,4u,4G,4M)});k(\'#ao\').B(\'Z\',18.3r(3O.iw,3O.w)+\'U\')}P{k(\'#87\').K(0).53=S;k(\'#88\').K(0).53=S;k.1v.cw(89,6A,3O,6B,4u,4G,4M)}E I},cw:u(89,gP,3O,6B,4u,4G,4M){k(\'#cW\').bk();aX=k(\'#87\');aX.2G();aO=k(\'#88\');aO.2G();2b=k(\'#eM\');1Z=k(\'#eE\');6F=k(\'#ao\');7m=k(\'#cM\').B(\'3n\',\'2K\');k(\'#eK\').3x(6A);k.1v.8m=1b;if(6B)k(\'#dg\').3x(k.1v.M.d8+\' \'+(4u+1)+\' \'+k.1v.M.dc+\' \'+6B);if(4G){aX.K(0).53=u(){q.5B();k.1v.26(S,4G);E I}}if(4M){aO.K(0).53=u(){q.5B();k.1v.26(S,4M);E I}}2b.1Y();82=k.1a.2o(1Z.K(0));56=18.3r(82.1C,2b.K(0).Z+k.1v.M.2E*2);6f=18.3r(82.hb,2b.K(0).W+k.1v.M.2E*2);2b.B({O:(56-2b.K(0).Z)/2+\'U\',Q:(6f-2b.K(0).W)/2+\'U\'});1Z.B({Z:56+\'U\',W:6f+\'U\'}).1Y();dw=k.1a.bm();6F.B(\'Q\',3O.t+(dw.h/15)+\'U\');if(6F.B(\'19\')==\'1o\'){6F.1Y().7f(k.1v.M.3W)}6k=12 9s;k(6k).1p(\'id\',\'cW\').1J(\'hJ\',u(){56=6k.Z+k.1v.M.2E*2;6f=6k.W+k.1v.M.2E*2;2b.2G();1Z.5w({W:6f},82.hb!=6f?k.1v.M.3W:1,u(){1Z.5w({Z:56},82.1C!=56?k.1v.M.3W:1,u(){1Z.bG(6k);k(6k).B({Y:\'1P\',O:k.1v.M.2E+\'U\',Q:k.1v.M.2E+\'U\'}).7f(k.1v.M.3W,u(){db=k.1a.2o(7m.K(0));if(4G){aX.B({O:k.1v.M.2E+\'U\',Q:k.1v.M.2E+\'U\',Z:56/2-k.1v.M.2E*3+\'U\',W:6f-k.1v.M.2E*2+\'U\'}).1Y()}if(4M){aO.B({O:56/2+k.1v.M.2E*2+\'U\',Q:k.1v.M.2E+\'U\',Z:56/2-k.1v.M.2E*3+\'U\',W:6f-k.1v.M.2E*2+\'U\'}).1Y()}7m.B({Z:56+\'U\',Q:-db.hb+\'U\',3n:\'dd\'}).5w({Q:-1},k.1v.M.3W,u(){k.1v.8m=I})})})})});6k.2J=89},au:u(){k(\'#cW\').bk();k(\'#ao\').2G();k(\'#cM\').B(\'3n\',\'2K\');k(\'#cP\').fX(cO,0,u(){k(q).2G();if(k.3a.4t){k(\'#cN\').2G()}});k(\'#87\').K(0).53=S;k(\'#88\').K(0).53=S;k.1v.6j=S;k.1v.8k=I;k.1v.8m=I;E I}};k.R={1A:S,41:S,F:S,1s:S,1q:S,Y:S,9a:u(e){k.R.F=(q.d0)?q.d0:q;k.R.1s=k.1a.4a(e);k.R.1q={Z:T(k(k.R.F).B(\'Z\'))||0,W:T(k(k.R.F).B(\'W\'))||0};k.R.Y={Q:T(k(k.R.F).B(\'Q\'))||0,O:T(k(k.R.F).B(\'O\'))||0};k(1h).1J(\'3D\',k.R.cR).1J(\'5P\',k.R.cK);if(2g k.R.F.1k.g2===\'u\'){k.R.F.1k.g2.1D(k.R.F)}E I},cK:u(e){k(1h).3q(\'3D\',k.R.cR).3q(\'5P\',k.R.cK);if(2g k.R.F.1k.fN===\'u\'){k.R.F.1k.fN.1D(k.R.F)}k.R.F=S},cR:u(e){if(!k.R.F){E}1s=k.1a.4a(e);7p=k.R.Y.Q-k.R.1s.y+1s.y;7r=k.R.Y.O-k.R.1s.x+1s.x;7p=18.3r(18.3L(7p,k.R.F.1k.8g-k.R.1q.W),k.R.F.1k.7h);7r=18.3r(18.3L(7r,k.R.F.1k.8h-k.R.1q.Z),k.R.F.1k.70);if(2g k.R.F.1k.4m===\'u\'){D 8a=k.R.F.1k.4m.1D(k.R.F,[7r,7p]);if(2g 8a==\'hh\'&&8a.1g==2){7r=8a[0];7p=8a[1]}}k.R.F.14.Q=7p+\'U\';k.R.F.14.O=7r+\'U\';E I},26:u(e){k(1h).1J(\'3D\',k.R.8j).1J(\'5P\',k.R.8o);k.R.1A=q.1A;k.R.41=q.41;k.R.1s=k.1a.4a(e);k.R.1q={Z:T(k(q.1A).B(\'Z\'))||0,W:T(k(q.1A).B(\'W\'))||0};k.R.Y={Q:T(k(q.1A).B(\'Q\'))||0,O:T(k(q.1A).B(\'O\'))||0};if(k.R.1A.1k.4o){k.R.1A.1k.4o.1D(k.R.1A,[q])}E I},8o:u(){k(1h).3q(\'3D\',k.R.8j).3q(\'5P\',k.R.8o);if(k.R.1A.1k.3T){k.R.1A.1k.3T.1D(k.R.1A,[k.R.41])}k.R.1A=S;k.R.41=S},6i:u(dx,az){E 18.3L(18.3r(k.R.1q.Z+dx*az,k.R.1A.1k.av),k.R.1A.1k.6x)},6m:u(dy,az){E 18.3L(18.3r(k.R.1q.W+dy*az,k.R.1A.1k.8c),k.R.1A.1k.8b)},fb:u(W){E 18.3L(18.3r(W,k.R.1A.1k.8c),k.R.1A.1k.8b)},8j:u(e){if(k.R.1A==S){E}1s=k.1a.4a(e);dx=1s.x-k.R.1s.x;dy=1s.y-k.R.1s.y;1I={Z:k.R.1q.Z,W:k.R.1q.W};2z={Q:k.R.Y.Q,O:k.R.Y.O};3m(k.R.41){1e\'e\':1I.Z=k.R.6i(dx,1);1r;1e\'fj\':1I.Z=k.R.6i(dx,1);1I.W=k.R.6m(dy,1);1r;1e\'w\':1I.Z=k.R.6i(dx,-1);2z.O=k.R.Y.O-1I.Z+k.R.1q.Z;1r;1e\'5F\':1I.Z=k.R.6i(dx,-1);2z.O=k.R.Y.O-1I.Z+k.R.1q.Z;1I.W=k.R.6m(dy,1);1r;1e\'76\':1I.W=k.R.6m(dy,-1);2z.Q=k.R.Y.Q-1I.W+k.R.1q.W;1I.Z=k.R.6i(dx,-1);2z.O=k.R.Y.O-1I.Z+k.R.1q.Z;1r;1e\'n\':1I.W=k.R.6m(dy,-1);2z.Q=k.R.Y.Q-1I.W+k.R.1q.W;1r;1e\'at\':1I.W=k.R.6m(dy,-1);2z.Q=k.R.Y.Q-1I.W+k.R.1q.W;1I.Z=k.R.6i(dx,1);1r;1e\'s\':1I.W=k.R.6m(dy,1);1r}if(k.R.1A.1k.4v){if(k.R.41==\'n\'||k.R.41==\'s\')4p=1I.W*k.R.1A.1k.4v;P 4p=1I.Z;4W=k.R.fb(4p*k.R.1A.1k.4v);4p=4W/k.R.1A.1k.4v;3m(k.R.41){1e\'n\':1e\'76\':1e\'at\':2z.Q+=1I.W-4W;1r}3m(k.R.41){1e\'76\':1e\'w\':1e\'5F\':2z.O+=1I.Z-4p;1r}1I.W=4W;1I.Z=4p}if(2z.Qk.R.1A.1k.8g){1I.W=k.R.1A.1k.8g-2z.Q;if(k.R.1A.1k.4v){1I.Z=1I.W/k.R.1A.1k.4v}}if(2z.O+1I.Z>k.R.1A.1k.8h){1I.Z=k.R.1A.1k.8h-2z.O;if(k.R.1A.1k.4v){1I.W=1I.Z*k.R.1A.1k.4v}}D 6p=I;if(k.R.1A.1k.f7){6p=k.R.1A.1k.f7.1D(k.R.1A,[1I,2z]);if(6p){if(6p.1q){k.23(1I,6p.1q)}if(6p.Y){k.23(2z,6p.Y)}}}8d=k.R.1A.14;8d.O=2z.O+\'U\';8d.Q=2z.Q+\'U\';8d.Z=1I.Z+\'U\';8d.W=1I.W+\'U\';E I},2r:u(M){if(!M||!M.3Z||M.3Z.1K!=7M){E}E q.1E(u(){D el=q;el.1k=M;el.1k.av=M.av||10;el.1k.8c=M.8c||10;el.1k.6x=M.6x||6P;el.1k.8b=M.8b||6P;el.1k.7h=M.7h||-aC;el.1k.70=M.70||-aC;el.1k.8h=M.8h||6P;el.1k.8g=M.8g||6P;d6=k(el).B(\'Y\');if(!(d6==\'2s\'||d6==\'1P\')){el.14.Y=\'2s\'}fS=/n|at|e|fj|s|5F|w|76/g;24(i in el.1k.3Z){if(i.6c().d5(fS)!=S){if(el.1k.3Z[i].1K==b0){3v=k(el.1k.3Z[i]);if(3v.1N()>0){el.1k.3Z[i]=3v.K(0)}}if(el.1k.3Z[i].4Y){el.1k.3Z[i].1A=el;el.1k.3Z[i].41=i;k(el.1k.3Z[i]).1J(\'5v\',k.R.26)}}}if(el.1k.5S){if(2g el.1k.5S===\'4V\'){aV=k(el.1k.5S);if(aV.1N()>0){aV.1E(u(){q.d0=el});aV.1J(\'5v\',k.R.9a)}}P if(el.1k.5S==1b){k(q).1J(\'5v\',k.R.9a)}}})},4U:u(){E q.1E(u(){D el=q;24(i in el.1k.3Z){el.1k.3Z[i].1A=S;el.1k.3Z[i].41=S;k(el.1k.3Z[i]).3q(\'5v\',k.R.26)}if(el.1k.5S){if(2g el.1k.5S===\'4V\'){3v=k(el.1k.5S);if(3v.1N()>0){3v.3q(\'5v\',k.R.9a)}}P if(el.1k.5S==1b){k(q).3q(\'5v\',k.R.9a)}}el.1k=S})}};k.fn.23({hz:k.R.2r,hs:k.R.4U});k.2C=S;k.7n=I;k.3k=S;k.7o=[];k.9v=u(e){D 3K=e.7L||e.7K||-1;if(3K==17||3K==16){k.7n=1b}};k.9u=u(e){k.7n=I};k.dL=u(e){q.f.1s=k.1a.4a(e);q.f.1M=k.23(k.1a.3w(q),k.1a.2o(q));q.f.3e=k.1a.6z(q);q.f.1s.x-=q.f.1M.x;q.f.1s.y-=q.f.1M.y;k(q).1S(k.2C.K(0));if(q.f.hc)k.2C.2R(q.f.hc).B(\'19\',\'2B\');k.2C.B({19:\'2B\',Z:\'2P\',W:\'2P\'});if(q.f.o){k.2C.B(\'1G\',q.f.o)}k.3k=q;k.96=I;k.7o=[];q.f.el.1E(u(){q.1M={x:q.8t+(q.4Z&&!k.3a.7I?T(q.4Z.5b)||0:0)+(k.3k.3c||0),y:q.8G+(q.4Z&&!k.3a.7I?T(q.4Z.4S)||0:0)+(k.3k.3d||0),1C:q.4c,hb:q.5W};if(q.s==1b){if(k.7n==I){q.s=I;k(q).4i(k.3k.f.7j)}P{k.96=1b;k.7o[k.7o.1g]=k.1p(q,\'id\')}}});k.am.1D(q,[e]);k(1h).1J(\'3D\',k.am).1J(\'5P\',k.cX);E I};k.am=u(e){if(!k.3k)E;k.fd.1D(k.3k,[e])};k.fd=u(e){if(!k.3k)E;D 1s=k.1a.4a(e);D 3e=k.1a.6z(k.3k);1s.x+=3e.l-q.f.3e.l-q.f.1M.x;1s.y+=3e.t-q.f.3e.t-q.f.1M.y;D 93=18.3L(1s.x,q.f.1s.x);D 5F=18.3L(18.3S(1s.x-q.f.1s.x),18.3S(q.f.3e.w-93));D 99=18.3L(1s.y,q.f.1s.y);D 9g=18.3L(18.3S(1s.y-q.f.1s.y),18.3S(q.f.3e.h-99));if(q.3d>0&&1s.y-20q.3d+q.f.1M.h){D 3X=18.3L(q.f.3e.h-q.3d,10);q.3d+=3X;if(q.3d!=3e.t)9g+=3X}if(q.3c>0&&1s.x-20q.3c+q.f.1M.w){D 3X=18.3L(q.f.3e.w-q.3c,10);q.3c+=3X;if(q.3c!=3e.l)5F+=3X}k.2C.B({O:93+\'U\',Q:99+\'U\',Z:5F+\'U\',W:9g+\'U\'});k.2C.l=93+q.f.3e.l;k.2C.t=99+q.f.3e.t;k.2C.r=k.2C.l+5F;k.2C.b=k.2C.t+9g;k.96=I;q.f.el.1E(u(){aw=k.7o.3J(k.1p(q,\'id\'));if(!(q.1M.x>k.2C.r||(q.1M.x+q.1M.1C)k.2C.b||(q.1M.y+q.1M.hb)0){h+=\'&\'}h+=s+\'[]=\'+k.1p(q,\'id\');o[o.1g]=k.1p(q,\'id\')}})}E{7l:h,o:o}};k.fn.gZ=u(o){if(!k.2C){k(\'2e\',1h).1S(\'<22 id="2C">\').1J(\'7B\',k.9v).1J(\'6y\',k.9u);k.2C=k(\'#2C\');k.2C.B({Y:\'1P\',19:\'1o\'});if(1X.2k){k(\'2e\',1h).1J(\'7B\',k.9v).1J(\'6y\',k.9u)}P{k(1h).1J(\'7B\',k.9v).1J(\'6y\',k.9u)}}if(!o){o={}}E q.1E(u(){if(q.eP)E;q.eP=1b;q.f={a:o.3C,o:o.1G?2m(o.1G):I,7j:o.eS?o.eS:I,hc:o.58?o.58:I,98:o.98?o.98:I,9d:o.9d?o.9d:I};q.f.el=k(\'.\'+o.3C);k(q).1J(\'5v\',k.dL).B(\'Y\',\'2s\')})};k.3b={bM:1,eH:u(3t){D 3t=3t;E q.1E(u(){q.4z.6s.1E(u(ab){k.3b.5c(q,3t[ab])})})},K:u(){D 3t=[];q.1E(u(cL){if(q.bI){3t[cL]=[];D C=q;D 1q=k.1a.2o(q);q.4z.6s.1E(u(ab){D x=q.8t;D y=q.8G;92=T(x*2a/(1q.w-q.4c));91=T(y*2a/(1q.h-q.5W));3t[cL][ab]=[92||0,91||0,x||0,y||0]})}});E 3t},ct:u(C){C.A.fu=C.A.28.w-C.A.1B.1C;C.A.fw=C.A.28.h-C.A.1B.hb;if(C.9r.4z.bC){9Z=C.9r.4z.6s.K(C.bF+1);if(9Z){C.A.28.w=(T(k(9Z).B(\'O\'))||0)+C.A.1B.1C;C.A.28.h=(T(k(9Z).B(\'Q\'))||0)+C.A.1B.hb}9Q=C.9r.4z.6s.K(C.bF-1);if(9Q){D cU=T(k(9Q).B(\'O\'))||0;D cH=T(k(9Q).B(\'O\'))||0;C.A.28.x+=cU;C.A.28.y+=cH;C.A.28.w-=cU;C.A.28.h-=cH}}C.A.g7=C.A.28.w-C.A.1B.1C;C.A.eC=C.A.28.h-C.A.1B.hb;if(C.A.2O){C.A.gx=((C.A.28.w-C.A.1B.1C)/C.A.2O)||1;C.A.gy=((C.A.28.h-C.A.1B.hb)/C.A.2O)||1;C.A.fU=C.A.g7/C.A.2O;C.A.fH=C.A.eC/C.A.2O}C.A.28.dx=C.A.28.x-C.A.2c.x;C.A.28.dy=C.A.28.y-C.A.2c.y;k.11.1c.B(\'9b\',\'ad\')},3H:u(C,x,y){if(C.A.2O){fE=T(x/C.A.fU);92=fE*2a/C.A.2O;ft=T(y/C.A.fH);91=ft*2a/C.A.2O}P{92=T(x*2a/C.A.fu);91=T(y*2a/C.A.fw)}C.A.b3=[92||0,91||0,x||0,y||0];if(C.A.3H)C.A.3H.1D(C,C.A.b3)},eI:u(2k){3K=2k.7L||2k.7K||-1;3m(3K){1e 35:k.3b.5c(q.3U,[ae,ae]);1r;1e 36:k.3b.5c(q.3U,[-ae,-ae]);1r;1e 37:k.3b.5c(q.3U,[-q.3U.A.gx||-1,0]);1r;1e 38:k.3b.5c(q.3U,[0,-q.3U.A.gy||-1]);1r;1e 39:k.3b.5c(q.3U,[q.3U.A.gx||1,0]);1r;1e 40:k.11.5c(q.3U,[0,q.3U.A.gy||1]);1r}},5c:u(C,Y){if(!C.A){E}C.A.1B=k.23(k.1a.3w(C),k.1a.2o(C));C.A.2c={x:T(k.B(C,\'O\'))||0,y:T(k.B(C,\'Q\'))||0};C.A.4n=k.B(C,\'Y\');if(C.A.4n!=\'2s\'&&C.A.4n!=\'1P\'){C.14.Y=\'2s\'}k.11.c5(C);k.3b.ct(C);dx=T(Y[0])||0;dy=T(Y[1])||0;2v=C.A.2c.x+dx;2q=C.A.2c.y+dy;if(C.A.2O){3y=k.11.c7.1D(C,[2v,2q,dx,dy]);if(3y.1K==7M){dx=3y.dx;dy=3y.dy}2v=C.A.2c.x+dx;2q=C.A.2c.y+dy}3y=k.11.ce.1D(C,[2v,2q,dx,dy]);if(3y&&3y.1K==7M){dx=3y.dx;dy=3y.dy}2v=C.A.2c.x+dx;2q=C.A.2c.y+dy;if(C.A.5i&&(C.A.3H||C.A.2Z)){k.3b.3H(C,2v,2q)}2v=!C.A.1O||C.A.1O==\'4j\'?2v:C.A.2c.x||0;2q=!C.A.1O||C.A.1O==\'49\'?2q:C.A.2c.y||0;C.14.O=2v+\'U\';C.14.Q=2q+\'U\'},2r:u(o){E q.1E(u(){if(q.bI==1b||!o.3C||!k.1a||!k.11||!k.1x){E}5x=k(o.3C,q);if(5x.1N()==0){E}D 4N={2p:\'94\',5i:1b,3H:o.3H&&o.3H.1K==2A?o.3H:S,2Z:o.2Z&&o.2Z.1K==2A?o.2Z:S,3v:q,1G:o.1G||I};if(o.2O&&T(o.2O)){4N.2O=T(o.2O)||1;4N.2O=4N.2O>0?4N.2O:1}if(5x.1N()==1)5x.7t(4N);P{k(5x.K(0)).7t(4N);4N.3v=S;5x.7t(4N)}5x.7B(k.3b.eI);5x.1p(\'bM\',k.3b.bM++);q.bI=1b;q.4z={};q.4z.er=4N.er;q.4z.2O=4N.2O;q.4z.6s=5x;q.4z.bC=o.bC?1b:I;bZ=q;bZ.4z.6s.1E(u(2N){q.bF=2N;q.9r=bZ});if(o.3t&&o.3t.1K==7F){24(i=o.3t.1g-1;i>=0;i--){if(o.3t[i].1K==7F&&o.3t[i].1g==2){el=q.4z.6s.K(i);if(el.4Y){k.3b.5c(el,o.3t[i])}}}}})}};k.fn.23({hN:k.3b.2r,hS:k.3b.eH,hG:k.3b.K});k.2u={5I:[],eg:u(){q.5B();X=q.31;id=k.1p(X,\'id\');if(k.2u.5I[id]!=S){1X.5T(k.2u.5I[id])}1z=X.L.3u+1;if(X.L.1Q.1g<1z){1z=1}1Q=k(\'1T\',X.L.5u);X.L.3u=1z;if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}},dp:u(){q.5B();X=q.31;id=k.1p(X,\'id\');if(k.2u.5I[id]!=S){1X.5T(k.2u.5I[id])}1z=X.L.3u-1;1Q=k(\'1T\',X.L.5u);if(1z<1){1z=X.L.1Q.1g}X.L.3u=1z;if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}},2I:u(c){X=1h.9e(c);if(X.L.6o){1z=X.L.3u;7d(1z==X.L.3u){1z=1+T(18.6o()*X.L.1Q.1g)}}P{1z=X.L.3u+1;if(X.L.1Q.1g<1z){1z=1}}1Q=k(\'1T\',X.L.5u);X.L.3u=1z;if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}},go:u(o){D X;if(o&&o.1K==7M){if(o.2b){X=1h.9e(o.2b.X);5N=1X.hn.3h.7C("#");o.2b.6S=S;if(5N.1g==2){1z=T(5N[1]);1Y=5N[1].4E(1z,\'\');if(k.1p(X,\'id\')!=1Y){1z=1}}P{1z=1}}if(o.90){o.90.5B();X=o.90.31.31;id=k.1p(X,\'id\');if(k.2u.5I[id]!=S){1X.5T(k.2u.5I[id])}5N=o.90.3h.7C("#");1z=T(5N[1]);1Y=5N[1].4E(1z,\'\');if(k.1p(X,\'id\')!=1Y){1z=1}}if(X.L.1Q.1g<1z||1z<1){1z=1}X.L.3u=1z;52=k.1a.2o(X);dt=k.1a.aT(X);d9=k.1a.6U(X);if(X.L.3z){X.L.3z.o.B(\'19\',\'1o\')}if(X.L.3s){X.L.3s.o.B(\'19\',\'1o\')}if(X.L.2b){y=T(dt.t)+T(d9.t);if(X.L.1U){if(X.L.1U.5A==\'Q\'){y+=X.L.1U.4C.hb}P{52.h-=X.L.1U.4C.hb}}if(X.L.2x){if(X.L.2x&&X.L.2x.6Q==\'Q\'){y+=X.L.2x.4C.hb}P{52.h-=X.L.2x.4C.hb}}if(!X.L.c1){X.L.df=o.2b?o.2b.W:(T(X.L.2b.B(\'W\'))||0);X.L.c1=o.2b?o.2b.Z:(T(X.L.2b.B(\'Z\'))||0)}X.L.2b.B(\'Q\',y+(52.h-X.L.df)/2+\'U\');X.L.2b.B(\'O\',(52.1C-X.L.c1)/2+\'U\');X.L.2b.B(\'19\',\'2B\')}1Q=k(\'1T\',X.L.5u);if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}P{aj=k(\'a\',X.L.1U.o).K(1z-1);k(aj).2R(X.L.1U.5R);D 1T=12 9s();1T.X=k.1p(X,\'id\');1T.1z=1z-1;1T.2J=X.L.1Q[X.L.3u-1].2J;if(1T.21){1T.6S=S;k.2u.19.1D(1T)}P{1T.6S=k.2u.19}if(X.L.2x){X.L.2x.o.3x(X.L.1Q[1z-1].6L)}}}},95:u(){X=q.31.31;X.L.5u.B(\'19\',\'1o\');if(X.L.1U.5R){aj=k(\'a\',X.L.1U.o).4i(X.L.1U.5R).K(X.L.3u-1);k(aj).2R(X.L.1U.5R)}D 1T=12 9s();1T.X=k.1p(X,\'id\');1T.1z=X.L.3u-1;1T.2J=X.L.1Q[X.L.3u-1].2J;if(1T.21){1T.6S=S;k.2u.19.1D(1T)}P{1T.6S=k.2u.19}if(X.L.2x){X.L.2x.o.3x(X.L.1Q[X.L.3u-1].6L)}},19:u(){X=1h.9e(q.X);if(X.L.3z){X.L.3z.o.B(\'19\',\'1o\')}if(X.L.3s){X.L.3s.o.B(\'19\',\'1o\')}52=k.1a.2o(X);y=0;if(X.L.1U){if(X.L.1U.5A==\'Q\'){y+=X.L.1U.4C.hb}P{52.h-=X.L.1U.4C.hb}}if(X.L.2x){if(X.L.2x&&X.L.2x.6Q==\'Q\'){y+=X.L.2x.4C.hb}P{52.h-=X.L.2x.4C.hb}}hg=k(\'.ca\',X);y=y+(52.h-q.W)/2;x=(52.1C-q.Z)/2;X.L.5u.B(\'Q\',y+\'U\').B(\'O\',x+\'U\').3x(\'<1T 2J="\'+q.2J+\'" />\');X.L.5u.7f(X.L.3W);3s=X.L.3u+1;if(3s>X.L.1Q.1g){3s=1}3z=X.L.3u-1;if(3z<1){3z=X.L.1Q.1g}X.L.3s.o.B(\'19\',\'2B\').B(\'Q\',y+\'U\').B(\'O\',x+2*q.Z/3+\'U\').B(\'Z\',q.Z/3+\'U\').B(\'W\',q.W+\'U\').1p(\'4g\',X.L.1Q[3s-1].6L);X.L.3s.o.K(0).3h=\'#\'+3s+k.1p(X,\'id\');X.L.3z.o.B(\'19\',\'2B\').B(\'Q\',y+\'U\').B(\'O\',x+\'U\').B(\'Z\',q.Z/3+\'U\').B(\'W\',q.W+\'U\').1p(\'4g\',X.L.1Q[3z-1].6L);X.L.3z.o.K(0).3h=\'#\'+3z+k.1p(X,\'id\')},2r:u(o){if(!o||!o.1Z||k.2u.5I[o.1Z])E;D 1Z=k(\'#\'+o.1Z);D el=1Z.K(0);if(el.14.Y!=\'1P\'&&el.14.Y!=\'2s\'){el.14.Y=\'2s\'}el.14.2U=\'2K\';if(1Z.1N()==0)E;el.L={};el.L.1Q=o.1Q?o.1Q:[];el.L.6o=o.6o&&o.6o==1b||I;97=el.f3(\'hL\');24(i=0;i<97.1g;i++){7Z=el.L.1Q.1g;el.L.1Q[7Z]={2J:97[i].2J,6L:97[i].4g||97[i].hD||\'\'}}if(el.L.1Q.1g==0){E}el.L.4n=k.23(k.1a.3w(el),k.1a.2o(el));el.L.b5=k.1a.aT(el);el.L.bu=k.1a.6U(el);t=T(el.L.b5.t)+T(el.L.bu.t);b=T(el.L.b5.b)+T(el.L.bu.b);k(\'1T\',el).bk();el.L.3W=o.3W?o.3W:g5;if(o.5A||o.9f||o.5R){el.L.1U={};1Z.1S(\'<22 6T="g1">\');el.L.1U.o=k(\'.g1\',el);if(o.9f){el.L.1U.9f=o.9f;el.L.1U.o.2R(o.9f)}if(o.5R){el.L.1U.5R=o.5R}el.L.1U.o.B(\'Y\',\'1P\').B(\'Z\',el.L.4n.w+\'U\');if(o.5A&&o.5A==\'Q\'){el.L.1U.5A=\'Q\';el.L.1U.o.B(\'Q\',t+\'U\')}P{el.L.1U.5A=\'4D\';el.L.1U.o.B(\'4D\',b+\'U\')}el.L.1U.aE=o.aE?o.aE:\' \';24(D i=0;i\'+7Z+\'\'+(7Z!=el.L.1Q.1g?el.L.1U.aE:\'\'))}k(\'a\',el.L.1U.o).1J(\'5h\',u(){k.2u.go({90:q})});el.L.1U.4C=k.1a.2o(el.L.1U.o.K(0))}if(o.6Q||o.9c){el.L.2x={};1Z.1S(\'<22 6T="dn">&7k;\');el.L.2x.o=k(\'.dn\',el);if(o.9c){el.L.2x.9c=o.9c;el.L.2x.o.2R(o.9c)}el.L.2x.o.B(\'Y\',\'1P\').B(\'Z\',el.L.4n.w+\'U\');if(o.6Q&&o.6Q==\'Q\'){el.L.2x.6Q=\'Q\';el.L.2x.o.B(\'Q\',(el.L.1U&&el.L.1U.5A==\'Q\'?el.L.1U.4C.hb+t:t)+\'U\')}P{el.L.2x.6Q=\'4D\';el.L.2x.o.B(\'4D\',(el.L.1U&&el.L.1U.5A==\'4D\'?el.L.1U.4C.hb+b:b)+\'U\')}el.L.2x.4C=k.1a.2o(el.L.2x.o.K(0))}if(o.9D){el.L.3s={9D:o.9D};1Z.1S(\'&7k;\');el.L.3s.o=k(\'.eY\',el);el.L.3s.o.B(\'Y\',\'1P\').B(\'19\',\'1o\').B(\'2U\',\'2K\').B(\'4A\',\'eR\').2R(el.L.3s.9D);el.L.3s.o.1J(\'5h\',k.2u.eg)}if(o.9o){el.L.3z={9o:o.9o};1Z.1S(\'&7k;\');el.L.3z.o=k(\'.ee\',el);el.L.3z.o.B(\'Y\',\'1P\').B(\'19\',\'1o\').B(\'2U\',\'2K\').B(\'4A\',\'eR\').2R(el.L.3z.9o);el.L.3z.o.1J(\'5h\',k.2u.dp)}1Z.bG(\'<22 6T="ca">\');el.L.5u=k(\'.ca\',el);el.L.5u.B(\'Y\',\'1P\').B(\'Q\',\'2P\').B(\'O\',\'2P\').B(\'19\',\'1o\');if(o.2b){1Z.bG(\'<22 6T="dW" 14="19: 1o;"><1T 2J="\'+o.2b+\'" />\');el.L.2b=k(\'.dW\',el);el.L.2b.B(\'Y\',\'1P\');D 1T=12 9s();1T.X=o.1Z;1T.2J=o.2b;if(1T.21){1T.6S=S;k.2u.go({2b:1T})}P{1T.6S=u(){k.2u.go({2b:q})}}}P{k.2u.go({1Z:el})}if(o.cS){fi=T(o.cS)*aC}k.2u.5I[o.1Z]=o.cS?1X.6V(\'k.2u.2I(\\\'\'+o.1Z+\'\\\')\',fi):S}};k.X=k.2u.2r;k.1t={7s:[],5L:{},1c:I,7u:S,26:u(){if(k.11.F==S){E}D 4O,3G,c,cs;k.1t.1c.K(0).3l=k.11.F.A.6R;4O=k.1t.1c.K(0).14;4O.19=\'2B\';k.1t.1c.1B=k.23(k.1a.3w(k.1t.1c.K(0)),k.1a.2o(k.1t.1c.K(0)));4O.Z=k.11.F.A.1B.1C+\'U\';4O.W=k.11.F.A.1B.hb+\'U\';3G=k.1a.cy(k.11.F);4O.5K=3G.t;4O.5z=3G.r;4O.5k=3G.b;4O.5j=3G.l;if(k.11.F.A.46==1b){c=k.11.F.fI(1b);cs=c.14;cs.5K=\'2P\';cs.5z=\'2P\';cs.5k=\'2P\';cs.5j=\'2P\';cs.19=\'2B\';k.1t.1c.5o().1S(c)}k(k.11.F).f5(k.1t.1c.K(0));k.11.F.14.19=\'1o\'},fC:u(e){if(!e.A.44&&k.1x.5r.cQ){if(e.A.3T)e.A.3T.1D(F);k(e).B(\'Y\',e.A.cz||e.A.4n);k(e).aS();k(k.1x.5r).f6(e)}k.1t.1c.4i(e.A.6R).3x(\'&7k;\');k.1t.7u=S;D 4O=k.1t.1c.K(0).14;4O.19=\'1o\';k.1t.1c.f5(e);if(e.A.fx>0){k(e).7f(e.A.fx)}k(\'2e\').1S(k.1t.1c.K(0));D 86=[];D 8q=I;24(D i=0;i0){8q(86)}},al:u(e,o){if(!k.11.F)E;D 6e=I;D i=0;if(e.1i.el.1N()>0){24(i=e.1i.el.1N();i>0;i--){if(e.1i.el.K(i-1)!=k.11.F){if(!e.5V.b2){if((e.1i.el.K(i-1).1M.y+e.1i.el.K(i-1).1M.hb/2)>k.11.F.A.2q){6e=e.1i.el.K(i-1)}P{1r}}P{if((e.1i.el.K(i-1).1M.x+e.1i.el.K(i-1).1M.1C/2)>k.11.F.A.2v&&(e.1i.el.K(i-1).1M.y+e.1i.el.K(i-1).1M.hb/2)>k.11.F.A.2q){6e=e.1i.el.K(i-1)}}}}}if(6e&&k.1t.7u!=6e){k.1t.7u=6e;k(6e).h5(k.1t.1c.K(0))}P if(!6e&&(k.1t.7u!=S||k.1t.1c.K(0).31!=e)){k.1t.7u=S;k(e).1S(k.1t.1c.K(0))}k.1t.1c.K(0).14.19=\'2B\'},cT:u(e){if(k.11.F==S){E}e.1i.el.1E(u(){q.1M=k.23(k.1a.74(q),k.1a.7G(q))})},8x:u(s){D i;D h=\'\';D o={};if(s){if(k.1t.5L[s]){o[s]=[];k(\'#\'+s+\' .\'+k.1t.5L[s]).1E(u(){if(h.1g>0){h+=\'&\'}h+=s+\'[]=\'+k.1p(q,\'id\');o[s][o[s].1g]=k.1p(q,\'id\')})}P{24(a in s){if(k.1t.5L[s[a]]){o[s[a]]=[];k(\'#\'+s[a]+\' .\'+k.1t.5L[s[a]]).1E(u(){if(h.1g>0){h+=\'&\'}h+=s[a]+\'[]=\'+k.1p(q,\'id\');o[s[a]][o[s[a]].1g]=k.1p(q,\'id\')})}}}}P{24(i in k.1t.5L){o[i]=[];k(\'#\'+i+\' .\'+k.1t.5L[i]).1E(u(){if(h.1g>0){h+=\'&\'}h+=i+\'[]=\'+k.1p(q,\'id\');o[i][o[i].1g]=k.1p(q,\'id\')})}}E{7l:h,o:o}},fF:u(e){if(!e.dq){E}E q.1E(u(){if(!q.5V||!k(e).is(\'.\'+q.5V.3C))k(e).2R(q.5V.3C);k(e).7t(q.5V.A)})},4U:u(){E q.1E(u(){k(\'.\'+q.5V.3C).aS();k(q).dR();q.5V=S;q.fm=S})},2r:u(o){if(o.3C&&k.1a&&k.11&&k.1x){if(!k.1t.1c){k(\'2e\',1h).1S(\'<22 id="e5">&7k;\');k.1t.1c=k(\'#e5\');k.1t.1c.K(0).14.19=\'1o\'}q.do({3C:o.3C,9J:o.9J?o.9J:I,a5:o.a5?o.a5:I,58:o.58?o.58:I,7x:o.7x||o.dC,7y:o.7y||o.fO,cQ:1b,2Z:o.2Z||o.ia,fx:o.fx?o.fx:I,46:o.46?1b:I,6I:o.6I?o.6I:\'cV\'});E q.1E(u(){D A={6N:o.6N?1b:I,ff:6P,1G:o.1G?2m(o.1G):I,6R:o.58?o.58:I,fx:o.fx?o.fx:I,44:1b,46:o.46?1b:I,3v:o.3v?o.3v:S,2p:o.2p?o.2p:S,4o:o.4o&&o.4o.1K==2A?o.4o:I,4m:o.4m&&o.4m.1K==2A?o.4m:I,3T:o.3T&&o.3T.1K==2A?o.3T:I,1O:/49|4j/.48(o.1O)?o.1O:I,6M:o.6M?T(o.6M)||0:I,2V:o.2V?o.2V:I};k(\'.\'+o.3C,q).7t(A);q.fm=1b;q.5V={3C:o.3C,6N:o.6N?1b:I,ff:6P,1G:o.1G?2m(o.1G):I,6R:o.58?o.58:I,fx:o.fx?o.fx:I,44:1b,46:o.46?1b:I,3v:o.3v?o.3v:S,2p:o.2p?o.2p:S,b2:o.b2?1b:I,A:A}})}}};k.fn.23({j3:k.1t.2r,f6:k.1t.fF,iS:k.1t.4U});k.iZ=k.1t.8x;k.2t={6O:S,7b:I,9m:S,6K:u(e){k.2t.7b=1b;k.2t.1Y(e,q,1b)},cq:u(e){if(k.2t.6O!=q)E;k.2t.7b=I;k.2t.2G(e,q)},1Y:u(e,el,7b){if(k.2t.6O!=S)E;if(!el){el=q}k.2t.6O=el;1M=k.23(k.1a.3w(el),k.1a.2o(el));8u=k(el);4g=8u.1p(\'4g\');3h=8u.1p(\'3h\');if(4g){k.2t.9m=4g;8u.1p(\'4g\',\'\');k(\'#eT\').3x(4g);if(3h)k(\'#bL\').3x(3h.4E(\'jh://\',\'\'));P k(\'#bL\').3x(\'\');1c=k(\'#8z\');if(el.4H.3l){1c.K(0).3l=el.4H.3l}P{1c.K(0).3l=\'\'}bo=k.1a.2o(1c.K(0));ga=7b&&el.4H.Y==\'bO\'?\'4D\':el.4H.Y;3m(ga){1e\'Q\':2q=1M.y-bo.hb;2v=1M.x;1r;1e\'O\':2q=1M.y;2v=1M.x-bo.1C;1r;1e\'2L\':2q=1M.y;2v=1M.x+1M.1C;1r;1e\'bO\':k(\'2e\').1J(\'3D\',k.2t.3D);1s=k.1a.4a(e);2q=1s.y+15;2v=1s.x+15;1r;ad:2q=1M.y+1M.hb;2v=1M.x;1r}1c.B({Q:2q+\'U\',O:2v+\'U\'});if(el.4H.54==I){1c.1Y()}P{1c.7f(el.4H.54)}if(el.4H.2Y)el.4H.2Y.1D(el);8u.1J(\'8B\',k.2t.2G).1J(\'5B\',k.2t.cq)}},3D:u(e){if(k.2t.6O==S){k(\'2e\').3q(\'3D\',k.2t.3D);E}1s=k.1a.4a(e);k(\'#8z\').B({Q:1s.y+15+\'U\',O:1s.x+15+\'U\'})},2G:u(e,el){if(!el){el=q}if(k.2t.7b!=1b&&k.2t.6O==el){k.2t.6O=S;k(\'#8z\').7a(1);k(el).1p(\'4g\',k.2t.9m).3q(\'8B\',k.2t.2G).3q(\'5B\',k.2t.cq);if(el.4H.3i)el.4H.3i.1D(el);k.2t.9m=S}},2r:u(M){if(!k.2t.1c){k(\'2e\').1S(\'<22 id="8z"><22 id="eT"><22 id="bL">\');k(\'#8z\').B({Y:\'1P\',3I:6P,19:\'1o\'});k.2t.1c=1b}E q.1E(u(){if(k.1p(q,\'4g\')){q.4H={Y:/Q|4D|O|2L|bO/.48(M.Y)?M.Y:\'4D\',3l:M.3l?M.3l:I,54:M.54?M.54:I,2Y:M.2Y&&M.2Y.1K==2A?M.2Y:I,3i:M.3i&&M.3i.1K==2A?M.3i:I};D el=k(q);el.1J(\'9z\',k.2t.1Y);el.1J(\'6K\',k.2t.6K)}})}};k.fn.hO=k.2t.2r;k.84={bq:u(e){3K=e.7L||e.7K||-1;if(3K==9){if(1X.2k){1X.2k.bT=1b;1X.2k.c0=I}P{e.aP();e.aW()}if(q.b1){1h.6J.dZ().3g="\\t";q.dV=u(){q.6K();q.dV=S}}P if(q.aF){26=q.5q;2T=q.dN;q.2y=q.2y.hd(0,26)+"\\t"+q.2y.h8(2T);q.aF(26+1,26+1);q.6K()}E I}},4U:u(){E q.1E(u(){if(q.7P&&q.7P==1b){k(q).3q(\'7B\',k.84.bq);q.7P=I}})},2r:u(){E q.1E(u(){if(q.4Y==\'cf\'&&(!q.7P||q.7P==I)){k(q).1J(\'7B\',k.84.bq);q.7P=1b}})}};k.fn.23({j5:k.84.2r,hH:k.84.4U});k.1a={3w:u(e){D x=0;D y=0;D es=e.14;D bP=I;if(k(e).B(\'19\')==\'1o\'){D 5Y=es.3n;D 9q=es.Y;bP=1b;es.3n=\'2K\';es.19=\'2B\';es.Y=\'1P\'}D el=e;7d(el){x+=el.8t+(el.4Z&&!k.3a.7I?T(el.4Z.5b)||0:0);y+=el.8G+(el.4Z&&!k.3a.7I?T(el.4Z.4S)||0:0);el=el.dJ}el=e;7d(el&&el.4Y&&el.4Y.6c()!=\'2e\'){x-=el.3c||0;y-=el.3d||0;el=el.31}if(bP==1b){es.19=\'1o\';es.Y=9q;es.3n=5Y}E{x:x,y:y}},7G:u(el){D x=0,y=0;7d(el){x+=el.8t||0;y+=el.8G||0;el=el.dJ}E{x:x,y:y}},2o:u(e){D w=k.B(e,\'Z\');D h=k.B(e,\'W\');D 1C=0;D hb=0;D es=e.14;if(k(e).B(\'19\')!=\'1o\'){1C=e.4c;hb=e.5W}P{D 5Y=es.3n;D 9q=es.Y;es.3n=\'2K\';es.19=\'2B\';es.Y=\'1P\';1C=e.4c;hb=e.5W;es.19=\'1o\';es.Y=9q;es.3n=5Y}E{w:w,h:h,1C:1C,hb:hb}},74:u(el){E{1C:el.4c||0,hb:el.5W||0}},bm:u(e){D h,w,de;if(e){w=e.8W;h=e.8O}P{de=1h.5d;w=1X.d4||aa.d4||(de&&de.8W)||1h.2e.8W;h=1X.cB||aa.cB||(de&&de.8O)||1h.2e.8O}E{w:w,h:h}},6z:u(e){D t=0,l=0,w=0,h=0,iw=0,ih=0;if(e&&e.9N.6c()!=\'2e\'){t=e.3d;l=e.3c;w=e.d7;h=e.d2;iw=0;ih=0}P{if(1h.5d){t=1h.5d.3d;l=1h.5d.3c;w=1h.5d.d7;h=1h.5d.d2}P if(1h.2e){t=1h.2e.3d;l=1h.2e.3c;w=1h.2e.d7;h=1h.2e.d2}iw=aa.d4||1h.5d.8W||1h.2e.8W||0;ih=aa.cB||1h.5d.8O||1h.2e.8O||0}E{t:t,l:l,w:w,h:h,iw:iw,ih:ih}},cy:u(e,7N){D el=k(e);D t=el.B(\'5K\')||\'\';D r=el.B(\'5z\')||\'\';D b=el.B(\'5k\')||\'\';D l=el.B(\'5j\')||\'\';if(7N)E{t:T(t)||0,r:T(r)||0,b:T(b)||0,l:T(l)};P E{t:t,r:r,b:b,l:l}},aT:u(e,7N){D el=k(e);D t=el.B(\'5M\')||\'\';D r=el.B(\'5U\')||\'\';D b=el.B(\'5n\')||\'\';D l=el.B(\'4X\')||\'\';if(7N)E{t:T(t)||0,r:T(r)||0,b:T(b)||0,l:T(l)};P E{t:t,r:r,b:b,l:l}},6U:u(e,7N){D el=k(e);D t=el.B(\'4S\')||\'\';D r=el.B(\'5O\')||\'\';D b=el.B(\'5Q\')||\'\';D l=el.B(\'5b\')||\'\';if(7N)E{t:T(t)||0,r:T(r)||0,b:T(b)||0,l:T(l)||0};P E{t:t,r:r,b:b,l:l}},4a:u(2k){D x=2k.hT||(2k.gM+(1h.5d.3c||1h.2e.3c))||0;D y=2k.ki||(2k.iQ+(1h.5d.3d||1h.2e.3d))||0;E{x:x,y:y}},cI:u(4R,cx){cx(4R);4R=4R.7c;7d(4R){k.1a.cI(4R,cx);4R=4R.hQ}},h7:u(4R){k.1a.cI(4R,u(el){24(D 1p in el){if(2g el[1p]===\'u\'){el[1p]=S}}})},hV:u(el,1O){D 5l=k.1a.6z();D b6=k.1a.2o(el);if(!1O||1O==\'49\')k(el).B({Q:5l.t+((18.3r(5l.h,5l.ih)-5l.t-b6.hb)/2)+\'U\'});if(!1O||1O==\'4j\')k(el).B({O:5l.l+((18.3r(5l.w,5l.iw)-5l.l-b6.1C)/2)+\'U\'})},hW:u(el,dk){D 1Q=k(\'1T[@2J*="8X"]\',el||1h),8X;1Q.1E(u(){8X=q.2J;q.2J=dk;q.14.5E="9n:9w.9y.hE(2J=\'"+8X+"\')"})}};[].3J||(7F.hF.3J=u(v,n){n=(n==S)?0:n;D m=q.1g;24(D i=n;i= 0 ? '&' : '?') + q; options.data = null; // data is null for 'get' } else options.data = q; // data is the query string for 'post' var $form = this, callbacks = []; if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); // perform a load on the target only if dataType is not provided if (!options.dataType && options.target) { var oldSuccess = options.success || function(){}; callbacks.push(function(data, status) { jQuery(options.target).attr("innerHTML", data).evalScripts().each(oldSuccess, [data, status]); }); } else if (options.success) callbacks.push(options.success); options.success = function(data, status) { for (var i=0, max=callbacks.length; i < max; i++) callbacks[i](data, status); }; jQuery.ajax(options); return this; }; /** * ajaxForm() provides a mechanism for fully automating form submission. * * The advantages of using this method instead of ajaxSubmit() are: * * 1: This method will include coordinates for elements (if the element * is used to submit the form). * 2. This method will include the submit element's name/value data (for the element that was * used to submit the form). * 3. This method binds the submit() method to the form for you. * * Note that for accurate x/y coordinates of image submit elements in all browsers * you need to also use the "dimensions" plugin (this method will auto-detect its presence). * * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely * passes the options argument along after properly binding events for submit elements and * the form itself. See ajaxSubmit for a full description of the options argument. * * * @example * var options = { * target: '#myTargetDiv' * }; * $('#myForm').ajaxSForm(options); * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response * when the form is submitted. * * * @example * var options = { * success: function(responseText) { * alert(responseText); * } * }; * $('#myForm').ajaxSubmit(options); * @desc Bind form's submit event so that server response is alerted after the form is submitted. * * * @example * var options = { * beforeSubmit: function(formArray, jqForm) { * if (formArray.length == 0) { * alert('Please enter data.'); * return false; * } * } * }; * $('#myForm').ajaxSubmit(options); * @desc Bind form's submit event so that pre-submit callback is invoked before the form * is submitted. * * * @name ajaxForm * @param options object literal containing options which control the form submission process * @return jQuery * @cat Plugins/Form * @type jQuery * @see ajaxSubmit * @author jQuery Community */ jQuery.fn.ajaxForm = function(options) { return this.each(function() { jQuery("input:submit,input:image,button:submit", this).click(function(ev) { var $form = this.form; $form.clk = this; if (this.type == 'image') { if (ev.offsetX != undefined) { $form.clk_x = ev.offsetX; $form.clk_y = ev.offsetY; } else if (typeof jQuery.fn.offset == 'function') { // try to use dimensions plugin var offset = jQuery(this).offset(); $form.clk_x = ev.pageX - offset.left; $form.clk_y = ev.pageY - offset.top; } else { $form.clk_x = ev.pageX - this.offsetLeft; $form.clk_y = ev.pageY - this.offsetTop; } } // clear form vars setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10); }) }).submit(function(e) { jQuery(this).ajaxSubmit(options); return false; }); }; /** * formToArray() gathers form element data into an array of objects that can * be passed to any of the following ajax functions: $.get, $.post, or load. * Each object in the array has both a 'name' and 'value' property. An example of * an array for a simple login form might be: * * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] * * It is this array that is passed to pre-submit callback functions provided to the * ajaxSubmit() and ajaxForm() methods. * * The semantic argument can be used to force form serialization in semantic order. * This is normally true anyway, unless the form contains input elements of type='image'. * If your form must be submitted with name/value pairs in semantic order and your form * contains an input of type='image" then pass true for this arg, otherwise pass false * (or nothing) to avoid the overhead for this logic. * * @example var data = $("#myForm").formToArray(); * $.post( "myscript.cgi", data ); * @desc Collect all the data from a form and submit it to the server. * * @name formToArray * @param semantic true if serialization must maintain strict semantic ordering of elements (slower) * @type Array * @cat Plugins/Form * @see ajaxForm * @see ajaxSubmit * @author jQuery Community */ jQuery.fn.formToArray = function(semantic) { var a = []; if (this.length == 0) return a; var form = this[0]; var els = semantic ? form.getElementsByTagName('*') : form.elements; if (!els) return a; for(var i=0, max=els.length; i < max; i++) { var el = els[i]; var n = el.name; if (!n) continue; if (semantic && form.clk && el.type == "image") { // handle image inputs on the fly when semantic == true if(!el.disabled && form.clk == el) a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); continue; } var v = jQuery.fieldValue(el, true); if (v === null) continue; if (v.constructor == Array) { for(var j=0, jmax=v.length; j < jmax; j++) a.push({name: n, value: v[j]}); } else a.push({name: n, value: v}); } if (!semantic && form.clk) { // input type=='image' are not found in elements array! handle them here var inputs = form.getElementsByTagName("input"); for(var i=0, max=inputs.length; i < max; i++) { var input = inputs[i]; var n = input.name; if(n && !input.disabled && input.type == "image" && form.clk == input) a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); } } return a; }; /** * Serializes form data into a 'submittable' string. This method will return a string * in the format: name1=value1&name2=value2 * * The semantic argument can be used to force form serialization in semantic order. * If your form must be submitted with name/value pairs in semantic order then pass * true for this arg, otherwise pass false (or nothing) to avoid the overhead for * this logic (which can be significant for very large forms). * * @example var data = $("#myForm").formSerialize(); * $.ajax('POST', "myscript.cgi", data); * @desc Collect all the data from a form into a single string * * @name formSerialize * @param semantic true if serialization must maintain strict semantic ordering of elements (slower) * @type String * @cat Plugins/Form * @see formToArray * @author jQuery Community */ jQuery.fn.formSerialize = function(semantic) { //hand off to jQuery.param for proper encoding return jQuery.param(this.formToArray(semantic)); }; /** * Serializes all field elements in the jQuery object into a query string. * This method will return a string in the format: name1=value1&name2=value2 * * The successful argument controls whether or not serialization is limited to * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). * The default value of the successful argument is true. * * @example var data = $("input").formSerialize(); * @desc Collect the data from all successful input elements into a query string * * @example var data = $(":radio").formSerialize(); * @desc Collect the data from all successful radio input elements into a query string * * @example var data = $("#myForm :checkbox").formSerialize(); * @desc Collect the data from all successful checkbox input elements in myForm into a query string * * @example var data = $("#myForm :checkbox").formSerialize(false); * @desc Collect the data from all checkbox elements in myForm (even the unchecked ones) into a query string * * @example var data = $(":input").formSerialize(); * @desc Collect the data from all successful input, select, textarea and button elements into a query string * * @name fieldSerialize * @param successful true if only successful controls should be serialized (default is true) * @type String * @cat Plugins/Form */ jQuery.fn.fieldSerialize = function(successful) { var a = []; this.each(function() { var n = this.name; if (!n) return; var v = jQuery.fieldValue(this, successful); if (v && v.constructor == Array) { for (var i=0,max=v.length; i < max; i++) a.push({name: n, value: v[i]}); } else if (v !== null && typeof v != 'undefined') a.push({name: this.name, value: v}); }); //hand off to jQuery.param for proper encoding return jQuery.param(a); }; /** * Returns the value of the field element in the jQuery object. If there is more than one field element * in the jQuery object the value of the first successful one is returned. * * The successful argument controls whether or not the field element must be 'successful' * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). * The default value of the successful argument is true. If this value is false then * the value of the first field element in the jQuery object is returned. * * Note: If no valid value can be determined the return value will be undifined. * * Note: The fieldValue returned for a select-multiple element or for a checkbox input will * always be an array if it is not undefined. * * * @example var data = $("#myPasswordElement").formValue(); * @desc Gets the current value of the myPasswordElement element * * @example var data = $("#myForm :input").formValue(); * @desc Get the value of the first successful control in the jQuery object. * * @example var data = $("#myForm :checkbox").formValue(); * @desc Get the array of values for the first set of successful checkbox controls in the jQuery object. * * @example var data = $("#mySingleSelect").formValue(); * @desc Get the value of the select control * * @example var data = $("#myMultiSelect").formValue(); * @desc Get the array of selected values for the select-multiple control * * @name fieldValue * @param Boolean successful true if value returned must be for a successful controls (default is true) * @type String or Array * @cat Plugins/Form */ jQuery.fn.fieldValue = function(successful) { var cbVal, cbName; // loop until we find a value for (var i=0, max=this.length; i < max; i++) { var el = this[i]; var v = jQuery.fieldValue(el, successful); if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) continue; // for checkboxes, consider multiple elements, for everything else just return first valid value if (el.type != 'checkbox') return v; cbName = cbName || el.name; if (cbName != el.name) // return if we hit a checkbox with a different name return cbVal; cbVal = cbVal || []; cbVal.push(v); } return cbVal; }; /** * Returns the value of the field element. * * The successful argument controls whether or not the field element must be 'successful' * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). * The default value of the successful argument is true. If the given element is not * successful and the successful arg is not false then the returned value will be null. * * Note: The fieldValue returned for a select-multiple element will always be an array. * * @example var data = jQuery.fieldValue($("#myPasswordElement")[0]); * @desc Gets the current value of the myPasswordElement element * * @name fieldValue * @param Element el The DOM element for which the value will be returned * @param Boolean successful true if value returned must be for a successful controls (default is true) * @type String or Array * @cat Plugins/Form */ jQuery.fieldValue = function(el, successful) { var n = el.name, t = el.type, tag = el.tagName.toLowerCase(); if (typeof successful == 'undefined') successful = true; if (successful && ( !n || el.disabled || t == 'reset' || (t == 'checkbox' || t == 'radio') && !el.checked || (t == 'submit' || t == 'image') && el.form && el.form.clk != el || tag == 'select' && el.selectedIndex == -1)) return null; if (tag == 'select') { var index = el.selectedIndex; if (index < 0) return null; var a = [], ops = el.options; var one = (t == 'select-one'); var max = (one ? index+1 : ops.length); for(var i=(one ? index : 0); i < max; i++) { var op = ops[i]; if (op.selected) { // extra pain for IE... var v = jQuery.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value; if (one) return v; a.push(v); } } return a; } return el.value; }; /** * Clears the form data. Takes the following actions on the form's input fields: * - input text fields will have their 'value' property set to the empty string * - select elements will have their 'selectedIndex' property set to -1 * - checkbox and radio inputs will have their 'checked' property set to false * - inputs of type submit, button, reset, and hidden will *not* be effected * - button elements will *not* be effected * * @example $('form').clearForm(); * @desc Clears all forms on the page. * * @name clearForm * @type jQuery * @cat Plugins/Form * @see resetForm */ jQuery.fn.clearForm = function() { return this.each(function() { jQuery('input,select,textarea', this).clearFields(); }); }; /** * Clears the selected form elements. Takes the following actions on the matched elements: * - input text fields will have their 'value' property set to the empty string * - select elements will have their 'selectedIndex' property set to -1 * - checkbox and radio inputs will have their 'checked' property set to false * - inputs of type submit, button, reset, and hidden will *not* be effected * - button elements will *not* be effected * * @example $('.myInputs').clearFields(); * @desc Clears all inputs with class myInputs * * @name clearFields * @type jQuery * @cat Plugins/Form * @see clearForm */ jQuery.fn.clearFields = jQuery.fn.clearInputs = function() { return this.each(function() { var t = this.type, tag = this.tagName.toLowerCase(); if (t == 'text' || t == 'password' || tag == 'textarea') this.value = ''; else if (t == 'checkbox' || t == 'radio') this.checked = false; else if (tag == 'select') this.selectedIndex = -1; }); }; /** * Resets the form data. Causes all form elements to be reset to their original value. * * @example $('form').resetForm(); * @desc Resets all forms on the page. * * @name resetForm * @type jQuery * @cat Plugins/Form * @see clearForm */ jQuery.fn.resetForm = function() { return this.each(function() { // guard against an input with the name of 'reset' // note that IE reports the reset function as an 'object' if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) this.reset(); }); }; )wordpress/wp-includes/js/jquery/jquery.jsReval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1C 1w.6=="T"){1w.T=1w.T;B 6=u(a,c){7(1w==q)v 1p 6(a,c);a=a||17;7(6.1t(a))v 1p 6(17)[6.E.27?"27":"2O"](a);7(1C a=="23"){B m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2Q(a);7(m)a=6.3k([m[1]]);J v 1p 6(c).2o(a)}v q.6r(a.1l==2y&&a||(a.3Y||a.I&&a!=1w&&!a.24&&a[0]!=T&&a[0].24)&&6.3M(a)||[a])};7(1C $!="T")6.2S$=$;B $=6;6.E=6.8p={3Y:"1.1.2",8q:u(){v q.I},I:0,2b:u(1T){v 1T==T?6.3M(q):q[1T]},2r:u(a){B L=6(a);L.6p=q;v L},6r:u(a){q.I=0;[].1g.14(q,a);v q},K:u(E,1E){v 6.K(q,E,1E)},2h:u(1c){B 4c=-1;q.K(u(i){7(q==1c)4c=i});v 4c},1I:u(1Y,O,C){B 1c=1Y;7(1Y.1l==3t)7(O==T)v q.I&&6[C||"1I"](q[0],1Y)||T;J{1c={};1c[1Y]=O}v q.K(u(2h){P(B H 1x 1c)6.1I(C?q.1q:q,H,6.H(q,1c[H],C,2h,H))})},1m:u(1Y,O){v q.1I(1Y,O,"30")},2L:u(e){7(1C e=="23")v q.3u().3r(17.8t(e));B t="";6.K(e||q,u(){6.K(q.2I,u(){7(q.24!=8)t+=q.24!=1?q.60:6.E.2L([q])})});v t},2K:u(){B a=6.3k(1A);v q.K(u(){B b=a[0].3l(U);q.11.2X(b,q);22(b.1b)b=b.1b;b.4C(q)})},3r:u(){v q.3j(1A,U,1,u(a){q.4C(a)})},5i:u(){v q.3j(1A,U,-1,u(a){q.2X(a,q.1b)})},5j:u(){v q.3j(1A,12,1,u(a){q.11.2X(a,q)})},5t:u(){v q.3j(1A,12,-1,u(a){q.11.2X(a,q.2e)})},4g:u(){v q.6p||6([])},2o:u(t){v q.2r(6.31(q,u(a){v 6.2o(t,a)}),t)},4Y:u(4N){v q.2r(6.31(q,u(a){B a=a.3l(4N!=T?4N:U);a.$1H=16;v a}))},1D:u(t){v q.2r(6.1t(t)&&6.2q(q,u(2z,2h){v t.14(2z,[2h])})||6.3z(t,q))},2g:u(t){v q.2r(t.1l==3t&&6.3z(t,q,U)||6.2q(q,u(a){v(t.1l==2y||t.3Y)?6.3y(a,t)<0:a!=t}))},1M:u(t){v q.2r(6.2k(q.2b(),t.1l==3t?6(t).2b():t.I!=T&&(!t.1f||t.1f=="8v")?t:[t]))},4l:u(1s){v 1s?6.1D(1s,q).r.I>0:12},1a:u(1a){v 1a==T?(q.I?q[0].O:16):q.1I("O",1a)},4U:u(1a){v 1a==T?(q.I?q[0].2t:16):q.3u().3r(1a)},3j:u(1E,1P,3Z,E){B 4Y=q.I>1;B a=6.3k(1E);7(3Z<0)a.8w();v q.K(u(){B 1c=q;7(1P&&6.1f(q,"1P")&&6.1f(a[0],"3m"))1c=q.5J("20")[0]||q.4C(17.6n("20"));6.K(a,u(){E.14(1c,[4Y?q.3l(U):q])})})}};6.1z=6.E.1z=u(){B 1O=1A[0],a=1;7(1A.I==1){1O=q;a=0}B H;22(H=1A[a++])P(B i 1x H)1O[i]=H[i];v 1O};6.1z({8x:u(){7(6.2S$)$=6.2S$;v 6},1t:u(E){v!!E&&1C E!="23"&&!E.1f&&1C E[0]=="T"&&/u/i.1n(E+"")},4B:u(D){v D.66&&D.5I&&!D.5I.64},1f:u(D,Y){v D.1f&&D.1f.3K()==Y.3K()},K:u(1c,E,1E){7(1c.I==T)P(B i 1x 1c)E.14(1c[i],1E||[i,1c[i]]);J P(B i=0,6q=1c.I;i<6q;i++)7(E.14(1c[i],1E||[i,1c[i]])===12)3O;v 1c},H:u(D,O,C,2h,H){7(6.1t(O))O=O.3n(D,[2h]);B 6s=/z-?2h|7P-?8A|1d|58|8B-?28/i;v O&&O.1l==3Q&&C=="30"&&!6s.1n(H)?O+"4S":O},19:{1M:u(D,c){6.K(c.3o(/\\s+/),u(i,Q){7(!6.19.2V(D.19,Q))D.19+=(D.19?" ":"")+Q})},2f:u(D,c){D.19=c?6.2q(D.19.3o(/\\s+/),u(Q){v!6.19.2V(c,Q)}).6t(" "):""},2V:u(t,c){t=t.19||t;c=c.1R(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g,"\\\\$1");v t&&1p 4v("(^|\\\\s)"+c+"(\\\\s|$)").1n(t)}},4d:u(e,o,f){P(B i 1x o){e.1q["1N"+i]=e.1q[i];e.1q[i]=o[i]}f.14(e,[]);P(B i 1x o)e.1q[i]=e.1q["1N"+i]},1m:u(e,p){7(p=="28"||p=="3V"){B 1N={},46,3P,d=["7d","8C","8D","8E"];6.K(d,u(){1N["8F"+q]=0;1N["8G"+q+"8H"]=0});6.4d(e,1N,u(){7(6.1m(e,"1h")!="1Z"){46=e.8I;3P=e.8J}J{e=6(e.3l(U)).2o(":4j").5l("2Z").4g().1m({4n:"1G",45:"8K",1h:"2D",7I:"0",8M:"0"}).5z(e.11)[0];B 3d=6.1m(e.11,"45");7(3d==""||3d=="4b")e.11.1q.45="6x";46=e.6y;3P=e.6z;7(3d==""||3d=="4b")e.11.1q.45="4b";e.11.33(e)}});v p=="28"?46:3P}v 6.30(e,p)},30:u(D,H,53){B L;7(H=="1d"&&6.W.1j)v 6.1I(D.1q,"1d");7(H=="4h"||H=="2v")H=6.W.1j?"3T":"2v";7(!53&&D.1q[H])L=D.1q[H];J 7(17.44&&17.44.4W){7(H=="2v"||H=="3T")H="4h";H=H.1R(/([A-Z])/g,"-$1").4m();B Q=17.44.4W(D,16);7(Q)L=Q.55(H);J 7(H=="1h")L="1Z";J 6.4d(D,{1h:"2D"},u(){B c=17.44.4W(q,"");L=c&&c.55(H)||""})}J 7(D.51){B 56=H.1R(/\\-(\\w)/g,u(m,c){v c.3K()});L=D.51[H]||D.51[56]}v L},3k:u(a){B r=[];6.K(a,u(i,1r){7(!1r)v;7(1r.1l==3Q)1r=1r.6C();7(1C 1r=="23"){B s=6.35(1r),1V=17.6n("1V"),2i=[];B 2K=!s.18("<1u")&&[1,"<42>",""]||(!s.18("<6D")||!s.18("<20")||!s.18("<6E"))&&[1,"<1P>",""]||!s.18("<3m")&&[2,"<1P><20>",""]||(!s.18("<6F")||!s.18("<6G"))&&[3,"<1P><20><3m>",""]||[0,"",""];1V.2t=2K[1]+s+2K[2];22(2K[0]--)1V=1V.1b;7(6.W.1j){7(!s.18("<1P")&&s.18("<20")<0)2i=1V.1b&&1V.1b.2I;J 7(2K[1]=="<1P>"&&s.18("<20")<0)2i=1V.2I;P(B n=2i.I-1;n>=0;--n)7(6.1f(2i[n],"20")&&!2i[n].2I.I)2i[n].11.33(2i[n])}1r=[];P(B i=0,l=1V.2I.I;im[3]-0",2a:"m[3]-0==i",5q:"m[3]-0==i",2u:"i==0",2T:"i==r.I-1",5R:"i%2==0",5S:"i%2","2a-3s":"6.2a(a.11.1b,m[3],\'2e\',a)==a","2u-3s":"6.2a(a.11.1b,1,\'2e\')==a","2T-3s":"6.2a(a.11.7n,1,\'5s\')==a","7p-3s":"6.2B(a.11.1b).I==1",5u:"a.1b",3u:"!a.1b",5v:"6.E.2L.14([a]).18(m[3])>=0",3i:\'a.C!="1G"&&6.1m(a,"1h")!="1Z"&&6.1m(a,"4n")!="1G"\',1G:\'a.C=="1G"||6.1m(a,"1h")=="1Z"||6.1m(a,"4n")=="1G"\',7v:"!a.2W",2W:"a.2W",2Z:"a.2Z",2Y:"a.2Y||6.1I(a,\'2Y\')",2L:"a.C==\'2L\'",4j:"a.C==\'4j\'",5x:"a.C==\'5x\'",4G:"a.C==\'4G\'",5y:"a.C==\'5y\'",4R:"a.C==\'4R\'",5A:"a.C==\'5A\'",5B:"a.C==\'5B\'",3x:\'a.C=="3x"||6.1f(a,"3x")\',5C:"/5C|42|7A|3x/i.1n(a.1f)"},".":"6.19.2V(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.18(m[4])","$=":"z&&z.2U(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.18(m[4])>=0","":"z",4u:u(m){v["",m[1],m[3],m[2],m[5]]},5P:"z=a[m[3]];7(!z||/5E|3e/.1n(m[3]))z=6.1I(a,m[3]);"},"[":"6.2o(m[2],a).I"},5M:[/^\\[ *(@)([a-2m-3C-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2m-3C-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2m-3C*-]*)/i],1Q:[/^(\\/?\\.\\.)/,"a.11",/^(>|\\/)/,"6.2B(a.1b)",/^(\\+)/,"6.2a(a,2,\'2e\')",/^(~)/,u(a){B s=6.2B(a.11.1b);v s.3N(6.3y(a,s)+1)}],3z:u(1s,1U,2g){B 1N,Q=[];22(1s&&1s!=1N){1N=1s;B f=6.1D(1s,1U,2g);1s=f.t.1R(/^\\s*,\\s*/,"");Q=2g?1U=f.r:6.2k(Q,f.r)}v Q},2o:u(t,1B){7(1C t!="23")v[t];7(1B&&!1B.24)1B=16;1B=1B||17;7(!t.18("//")){1B=1B.4H;t=t.2U(2,t.I)}J 7(!t.18("/")){1B=1B.4H;t=t.2U(1,t.I);7(t.18("/")>=1)t=t.2U(t.18("/"),t.I)}B L=[1B],2c=[],2T=16;22(t&&2T!=t){B r=[];2T=t;t=6.35(t).1R(/^\\/\\//i,"");B 3B=12;B 1J=/^[\\/>]\\s*([a-2m-9*-]+)/i;B m=1J.2Q(t);7(m){6.K(L,u(){P(B c=q.1b;c;c=c.2e)7(c.24==1&&(6.1f(c,m[1])||m[1]=="*"))r.1g(c)});L=r;t=t.1R(1J,"");7(t.18(" ")==0)5F;3B=U}J{P(B i=0;i<6.1Q.I;i+=2){B 1J=6.1Q[i];B m=1J.2Q(t);7(m){r=L=6.31(L,6.1t(6.1Q[i+1])?6.1Q[i+1]:u(a){v 40(6.1Q[i+1])});t=6.35(t.1R(1J,""));3B=U;3O}}}7(t&&!3B){7(!t.18(",")){7(L[0]==1B)L.4L();6.2k(2c,L);r=L=[1B];t=" "+t.2U(1,t.I)}J{B 34=/^([a-2m-3C-]+)(#)([a-2m-9\\\\*2S-]*)/i;B m=34.2Q(t);7(m){m=[0,m[2],m[3],m[1]]}J{34=/^([#.]?)([a-2m-9\\\\*2S-]*)/i;m=34.2Q(t)}7(m[1]=="#"&&L[L.I-1].4X){B 2l=L[L.I-1].4X(m[2]);7(6.W.1j&&2l&&2l.2J!=m[2])2l=6(\'[@2J="\'+m[2]+\'"]\',L[L.I-1])[0];L=r=2l&&(!m[3]||6.1f(2l,m[3]))?[2l]:[]}J{7(m[1]==".")B 4r=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");6.K(L,u(){B 3E=m[1]!=""||m[0]==""?"*":m[2];7(6.1f(q,"7J")&&3E=="*")3E="3g";6.2k(r,m[1]!=""&&L.I!=1?6.4x(q,[],m[1],m[2],4r):q.5J(3E))});7(m[1]=="."&&L.I==1)r=6.2q(r,u(e){v 4r.1n(e.19)});7(m[1]=="#"&&L.I==1){B 5K=r;r=[];6.K(5K,u(){7(q.36("2J")==m[2]){r=[q];v 12}})}L=r}t=t.1R(34,"")}}7(t){B 1a=6.1D(t,r);L=r=1a.r;t=6.35(1a.t)}}7(L&&L[0]==1B)L.4L();6.2k(2c,L);v 2c},1D:u(t,r,2g){22(t&&/^[a-z[({<*:.#]/i.1n(t)){B p=6.5M,m;6.K(p,u(i,1J){m=1J.2Q(t);7(m){t=t.7M(m[0].I);7(6.1s[m[1]].4u)m=6.1s[m[1]].4u(m);v 12}});7(m[1]==":"&&m[2]=="2g")r=6.1D(m[3],r,U).r;J 7(m[1]=="."){B 1J=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2q(r,u(e){v 1J.1n(e.19||"")},2g)}J{B f=6.1s[m[1]];7(1C f!="23")f=6.1s[m[1]][m[2]];40("f = u(a,i){"+(6.1s[m[1]].5P||"")+"v "+f+"}");r=6.2q(r,f,2g)}}v{r:r,t:t}},4x:u(o,r,1Q,Y,1J){P(B s=o.1b;s;s=s.2e)7(s.24==1){B 1M=U;7(1Q==".")1M=s.19&&1J.1n(s.19);J 7(1Q=="#")1M=s.36("2J")==Y;7(1M)r.1g(s);7(1Q=="#"&&r.I)3O;7(s.1b)6.4x(s,r,1Q,Y,1J)}v r},4z:u(D){B 4A=[];B Q=D.11;22(Q&&Q!=17){4A.1g(Q);Q=Q.11}v 4A},2a:u(Q,1i,3Z,D){1i=1i||1;B 1T=0;P(;Q;Q=Q[3Z]){7(Q.24==1)1T++;7(1T==1i||1i=="5R"&&1T%2==0&&1T>1&&Q==D||1i=="5S"&&1T%2==1&&Q==D)v Q}},2B:u(n,D){B r=[];P(;n;n=n.2e){7(n.24==1&&(!D||n!=D))r.1g(n)}v r}});6.G={1M:u(S,C,1o,F){7(6.W.1j&&S.3L!=T)S=1w;7(F)1o.F=F;7(!1o.2A)1o.2A=q.2A++;7(!S.$1H)S.$1H={};B 38=S.$1H[C];7(!38){38=S.$1H[C]={};7(S["39"+C])38[0]=S["39"+C]}38[1o.2A]=1o;S["39"+C]=q.5Y;7(!q.1k[C])q.1k[C]=[];q.1k[C].1g(S)},2A:1,1k:{},2f:u(S,C,1o){7(S.$1H){B i,j,k;7(C&&C.C){1o=C.1o;C=C.C}7(C&&S.$1H[C])7(1o)5U S.$1H[C][1o.2A];J P(i 1x S.$1H[C])5U S.$1H[C][i];J P(j 1x S.$1H)q.2f(S,j);P(k 1x S.$1H[C])7(k){k=U;3O}7(!k)S["39"+C]=16}},1S:u(C,F,S){F=6.3M(F||[]);7(!S)6.K(q.1k[C]||[],u(){6.G.1S(C,F,q)});J{B 1o=S["39"+C],1a,E=6.1t(S[C]);7(1o){F.61(q.2j({C:C,1O:S}));7((1a=1o.14(S,F))!==12)q.4F=U}7(E&&1a!==12)S[C]();q.4F=12}},5Y:u(G){7(1C 6=="T"||6.G.4F)v;G=6.G.2j(G||1w.G||{});B 3R;B c=q.$1H[G.C];B 1E=[].3N.3n(1A,1);1E.61(G);P(B j 1x c){1E[0].1o=c[j];1E[0].F=c[j].F;7(c[j].14(q,1E)===12){G.2n();G.2H();3R=12}}7(6.W.1j)G.1O=G.2n=G.2H=G.1o=G.F=16;v 3R},2j:u(G){7(!G.1O&&G.63)G.1O=G.63;7(G.65==T&&G.67!=T){B e=17.4H,b=17.64;G.65=G.67+(e.68||b.68);G.7Y=G.7Z+(e.6c||b.6c)}7(6.W.2N&&G.1O.24==3){B 3a=G;G=6.1z({},3a);G.1O=3a.1O.11;G.2n=u(){v 3a.2n()};G.2H=u(){v 3a.2H()}}7(!G.2n)G.2n=u(){q.3R=12};7(!G.2H)G.2H=u(){q.82=U};v G}};6.E.1z({3U:u(C,F,E){v q.K(u(){6.G.1M(q,C,E||F,F)})},6u:u(C,F,E){v q.K(u(){6.G.1M(q,C,u(G){6(q).6f(G);v(E||F).14(q,1A)},F)})},6f:u(C,E){v q.K(u(){6.G.2f(q,C,E)})},1S:u(C,F){v q.K(u(){6.G.1S(C,F,q)})},3X:u(){B a=1A;v q.6j(u(e){q.4M=q.4M==0?1:0;e.2n();v a[q.4M].14(q,[e])||12})},83:u(f,g){u 4O(e){B p=(e.C=="41"?e.84:e.85)||e.86;22(p&&p!=q)2G{p=p.11}2w(e){p=q};7(p==q)v 12;v(e.C=="41"?f:g).14(q,[e])}v q.41(4O).6k(4O)},27:u(f){7(6.3W)f.14(17,[6]);J{6.3c.1g(u(){v f.14(q,[6])})}v q}});6.1z({3W:12,3c:[],27:u(){7(!6.3W){6.3W=U;7(6.3c){6.K(6.3c,u(){q.14(17)});6.3c=16}7(6.W.3h||6.W.3f)17.87("6o",6.27,12)}}});1p u(){6.K(("88,8a,2O,8b,8d,52,6j,8e,"+"8f,8g,8h,41,6k,8j,42,"+"4R,8k,8l,8m,2C").3o(","),u(i,o){6.E[o]=u(f){v f?q.3U(o,f):q.1S(o)}});7(6.W.3h||6.W.3f)17.8n("6o",6.27,12);J 7(6.W.1j){17.8o("<8r"+"8s 2J=62 8u=U "+"3e=//:><\\/2d>");B 2d=17.4X("62");7(2d)2d.37=u(){7(q.3D!="1X")v;q.11.33(q);6.27()};2d=16}J 7(6.W.2N)6.50=3L(u(){7(17.3D=="8y"||17.3D=="1X"){4p(6.50);6.50=16;6.27()}},10);6.G.1M(1w,"2O",6.27)};7(6.W.1j)6(1w).6u("52",u(){B 1k=6.G.1k;P(B C 1x 1k){B 4Z=1k[C],i=4Z.I;7(i&&C!=\'52\')6w 6.G.2f(4Z[i-1],C);22(--i)}});6.E.1z({6A:u(V,21,M){q.2O(V,21,M,1)},2O:u(V,21,M,1W){7(6.1t(V))v q.3U("2O",V);M=M||u(){};B C="5d";7(21)7(6.1t(21)){M=21;21=16}J{21=6.3g(21);C="5V"}B 4e=q;6.3v({V:V,C:C,F:21,1W:1W,1X:u(2P,15){7(15=="2M"||!1W&&15=="5L")4e.1I("2t",2P.3G).4V().K(M,[2P.3G,15,2P]);J M.14(4e,[2P.3G,15,2P])}});v q},6B:u(){v 6.3g(q)},4V:u(){v q.2o("2d").K(u(){7(q.3e)6.59(q.3e);J 6.4a(q.2L||q.6H||q.2t||"")}).4g()}});7(!1w.3p)3p=u(){v 1p 6I("6K.6M")};6.K("5m,5Q,5O,5W,5N,5H".3o(","),u(i,o){6.E[o]=u(f){v q.3U(o,f)}});6.1z({2b:u(V,F,M,C,1W){7(6.1t(F)){M=F;F=16}v 6.3v({V:V,F:F,2M:M,4t:C,1W:1W})},6Q:u(V,F,M,C){v 6.2b(V,F,M,C,1)},59:u(V,M){v 6.2b(V,16,M,"2d")},6S:u(V,F,M){v 6.2b(V,F,M,"6m")},6U:u(V,F,M,C){7(6.1t(F)){M=F;F={}}v 6.3v({C:"5V",V:V,F:F,2M:M,4t:C})},6X:u(29){6.3q.29=29},6Y:u(5c){6.1z(6.3q,5c)},3q:{1k:U,C:"5d",29:0,5r:"70/x-73-3w-77",5h:U,48:U,F:16},3S:{},3v:u(s){s=6.1z({},6.3q,s);7(s.F){7(s.5h&&1C s.F!="23")s.F=6.3g(s.F);7(s.C.4m()=="2b"){s.V+=((s.V.18("?")>-1)?"&":"?")+s.F;s.F=16}}7(s.1k&&!6.4E++)6.G.1S("5m");B 4y=12;B N=1p 3p();N.7j(s.C,s.V,s.48);7(s.F)N.3A("7l-7m",s.5r);7(s.1W)N.3A("7o-4K-7q",6.3S[s.V]||"7s, 7t 7w 7x 4o:4o:4o 7z");N.3A("X-7B-7C","3p");7(N.7E)N.3A("7F","7G");7(s.5G)s.5G(N);7(s.1k)6.G.1S("5H",[N,s]);B 37=u(4s){7(N&&(N.3D==4||4s=="29")){4y=U;7(3I){4p(3I);3I=16}B 15;2G{15=6.5Z(N)&&4s!="29"?s.1W&&6.69(N,s.V)?"5L":"2M":"2C";7(15!="2C"){B 3F;2G{3F=N.4P("6b-4K")}2w(e){}7(s.1W&&3F)6.3S[s.V]=3F;B F=6.6i(N,s.4t);7(s.2M)s.2M(F,15);7(s.1k)6.G.1S("5N",[N,s])}J 6.3J(s,N,15)}2w(e){15="2C";6.3J(s,N,15,e)}7(s.1k)6.G.1S("5O",[N,s]);7(s.1k&&!--6.4E)6.G.1S("5Q");7(s.1X)s.1X(N,15);7(s.48)N=16}};B 3I=3L(37,13);7(s.29>0)57(u(){7(N){N.7N();7(!4y)37("29")}},s.29);2G{N.7Q(s.F)}2w(e){6.3J(s,N,16,e)}7(!s.48)37();v N},3J:u(s,N,15,e){7(s.2C)s.2C(N,15,e);7(s.1k)6.G.1S("5W",[N,s,e])},4E:0,5Z:u(r){2G{v!r.15&&7V.7W=="4G:"||(r.15>=5X&&r.15<7X)||r.15==6d||6.W.2N&&r.15==T}2w(e){}v 12},69:u(N,V){2G{B 6e=N.4P("6b-4K");v N.15==6d||6e==6.3S[V]||6.W.2N&&N.15==T}2w(e){}v 12},6i:u(r,C){B 4Q=r.4P("8c-C");B F=!C&&4Q&&4Q.18("N")>=0;F=C=="N"||F?r.8i:r.3G;7(C=="2d")6.4a(F);7(C=="6m")40("F = "+F);7(C=="4U")6("<1V>").4U(F).4V();v F},3g:u(a){B s=[];7(a.1l==2y||a.3Y)6.K(a,u(){s.1g(2x(q.Y)+"="+2x(q.O))});J P(B j 1x a)7(a[j]&&a[j].1l==2y)6.K(a[j],u(){s.1g(2x(j)+"="+2x(q))});J s.1g(2x(j)+"="+2x(a[j]));v s.6t("&")},4a:u(F){7(1w.54)1w.54(F);J 7(6.W.2N)1w.57(F,0);J 40.3n(1w,F)}});6.E.1z({1L:u(R,M){B 1G=q.1D(":1G");R?1G.26({28:"1L",3V:"1L",1d:"1L"},R,M):1G.K(u(){q.1q.1h=q.2E?q.2E:"";7(6.1m(q,"1h")=="1Z")q.1q.1h="2D"});v q},1K:u(R,M){B 3i=q.1D(":3i");R?3i.26({28:"1K",3V:"1K",1d:"1K"},R,M):3i.K(u(){q.2E=q.2E||6.1m(q,"1h");7(q.2E=="1Z")q.2E="2D";q.1q.1h="1Z"});v q},5g:6.E.3X,3X:u(E,4I){B 1E=1A;v 6.1t(E)&&6.1t(4I)?q.5g(E,4I):q.K(u(){6(q)[6(q).4l(":1G")?"1L":"1K"].14(6(q),1E)})},7a:u(R,M){v q.26({28:"1L"},R,M)},7c:u(R,M){v q.26({28:"1K"},R,M)},7f:u(R,M){v q.K(u(){B 5k=6(q).4l(":1G")?"1L":"1K";6(q).26({28:5k},R,M)})},7r:u(R,M){v q.26({1d:"1L"},R,M)},7u:u(R,M){v q.26({1d:"1K"},R,M)},7y:u(R,43,M){v q.26({1d:43},R,M)},26:u(H,R,1v,M){v q.1F(u(){q.2F=6.1z({},H);B 1u=6.R(R,1v,M);P(B p 1x H){B e=1p 6.3b(q,1u,p);7(H[p].1l==3Q)e.2s(e.Q(),H[p]);J e[H[p]](H)}})},1F:u(C,E){7(!E){E=C;C="3b"}v q.K(u(){7(!q.1F)q.1F={};7(!q.1F[C])q.1F[C]=[];q.1F[C].1g(E);7(q.1F[C].I==1)E.14(q)})}});6.1z({R:u(R,1v,E){B 1u=R&&R.1l==7K?R:{1X:E||!E&&1v||6.1t(R)&&R,25:R,1v:E&&1v||1v&&1v.1l!=4w&&1v};1u.25=(1u.25&&1u.25.1l==3Q?1u.25:{7R:7S,7T:5X}[1u.25])||7U;1u.1N=1u.1X;1u.1X=u(){6.6a(q,"3b");7(6.1t(1u.1N))1u.1N.14(q)};v 1u},1v:{},1F:{},6a:u(D,C){C=C||"3b";7(D.1F&&D.1F[C]){D.1F[C].4L();B f=D.1F[C][0];7(f)f.14(D)}},3b:u(D,1e,H){B z=q;B y=D.1q;B 4D=6.1m(D,"1h");y.5T="1G";z.a=u(){7(1e.49)1e.49.14(D,[z.2p]);7(H=="1d")6.1I(y,"1d",z.2p);J 7(6l(z.2p))y[H]=6l(z.2p)+"4S";y.1h="2D"};z.6v=u(){v 4T(6.1m(D,H))};z.Q=u(){B r=4T(6.30(D,H));v r&&r>-8z?r:z.6v()};z.2s=u(4f,43){z.4J=(1p 5o()).5w();z.2p=4f;z.a();z.4q=3L(u(){z.49(4f,43)},13)};z.1L=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1L=U;z.2s(0,D.1y[H]);7(H!="1d")y[H]="5a"};z.1K=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1K=U;z.2s(D.1y[H],0)};z.3X=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();7(4D=="1Z"){1e.1L=U;7(H!="1d")y[H]="5a";z.2s(0,D.1y[H])}J{1e.1K=U;z.2s(D.1y[H],0)}};z.49=u(32,47){B t=(1p 5o()).5w();7(t>1e.25+z.4J){4p(z.4q);z.4q=16;z.2p=47;z.a();7(D.2F)D.2F[H]=U;B 2c=U;P(B i 1x D.2F)7(D.2F[i]!==U)2c=12;7(2c){y.5T="";y.1h=4D;7(6.1m(D,"1h")=="1Z")y.1h="2D";7(1e.1K)y.1h="1Z";7(1e.1K||1e.1L)P(B p 1x D.2F)7(p=="1d")6.1I(y,p,D.1y[p]);J y[p]=""}7(2c&&6.1t(1e.1X))1e.1X.14(D)}J{B n=t-q.4J;B p=n/1e.25;z.2p=1e.1v&&6.1v[1e.1v]?6.1v[1e.1v](p,n,32,(47-32),1e.25):((-6h.7O(p*6h.8L)/2)+0.5)*(47-32)+32;z.a()}}}})}',62,545,'||||||jQuery|if|||||||||||||||||||this||||function|return||||||var|type|elem|fn|data|event|prop|length|else|each|ret|callback|xml|value|for|cur|speed|element|undefined|true|url|browser||name|||parentNode|false||apply|status|null|document|indexOf|className|val|firstChild|obj|opacity|options|nodeName|push|display|result|msie|global|constructor|css|test|handler|new|style|arg|expr|isFunction|opt|easing|window|in|orig|extend|arguments|context|typeof|filter|args|queue|hidden|events|attr|re|hide|show|add|old|target|table|token|replace|trigger|num|elems|div|ifModified|complete|key|none|tbody|params|while|string|nodeType|duration|animate|ready|height|timeout|nth|get|done|script|nextSibling|remove|not|index|tb|fix|merge|oid|z0|preventDefault|find|now|grep|pushStack|custom|innerHTML|first|cssFloat|catch|encodeURIComponent|Array|el|guid|sibling|error|block|oldblock|curAnim|try|stopPropagation|childNodes|id|wrap|text|success|safari|load|res|exec|al|_|last|substr|has|disabled|insertBefore|selected|checked|curCSS|map|firstNum|removeChild|re2|trim|getAttribute|onreadystatechange|handlers|on|originalEvent|fx|readyList|parPos|src|opera|param|mozilla|visible|domManip|clean|cloneNode|tr|call|split|XMLHttpRequest|ajaxSettings|append|child|String|empty|ajax|form|button|inArray|multiFilter|setRequestHeader|foundToken|9_|readyState|tag|modRes|responseText|second|ival|handleError|toUpperCase|setInterval|makeArray|slice|break|oWidth|Number|returnValue|lastModified|styleFloat|bind|width|isReady|toggle|jquery|dir|eval|mouseover|select|to|defaultView|position|oHeight|lastNum|async|step|globalEval|static|pos|swap|self|from|end|float|alpha|radio|inv|is|toLowerCase|visibility|00|clearInterval|timer|rec|isTimeout|dataType|_resort|RegExp|Function|getAll|requestDone|parents|matched|isXMLDoc|appendChild|oldDisplay|active|triggered|file|documentElement|fn2|startTime|Modified|shift|lastToggle|deep|handleHover|getResponseHeader|ct|submit|px|parseFloat|html|evalScripts|getComputedStyle|getElementById|clone|els|safariTimer|currentStyle|unload|force|execScript|getPropertyValue|newProp|setTimeout|zoom|getScript|1px|sl|settings|GET|rl|check|_toggle|processData|prepend|before|state|removeAttr|ajaxStart|lt|Date|gt|eq|contentType|previousSibling|after|parent|contains|getTime|checkbox|password|appendTo|image|reset|input|webkit|href|continue|beforeSend|ajaxSend|ownerDocument|getElementsByTagName|tmp|notmodified|parse|ajaxSuccess|ajaxComplete|_prefix|ajaxStop|even|odd|overflow|delete|POST|ajaxError|200|handle|httpSuccess|nodeValue|unshift|__ie_init|srcElement|body|pageX|tagName|clientX|scrollLeft|httpNotModified|dequeue|Last|scrollTop|304|xmlRes|unbind|100|Math|httpData|click|mouseout|parseInt|json|createElement|DOMContentLoaded|prevObject|ol|setArray|exclude|join|one|max|do|relative|clientHeight|clientWidth|loadIfModified|serialize|toString|thead|tfoot|td|th|textContent|ActiveXObject|htmlFor|Microsoft|class|XMLHTTP|readOnly|gi|match|getIfModified|9999|getJSON|getAttributeNode|post|setAttribute|ig|ajaxTimeout|ajaxSetup|concat|application|userAgent|compatible|www|compatMode|CSS1Compat|next|urlencoded|siblings|children|slideDown|prependTo|slideUp|Top|insertAfter|slideToggle|removeAttribute|addClass|removeClass|open|toggleClass|Content|Type|lastChild|If|only|Since|fadeIn|Thu|01|fadeOut|enabled|Jan|1970|fadeTo|GMT|textarea|Requested|With|prev|overrideMimeType|Connection|close|boxModel|right|object|Object|navigator|substring|abort|cos|font|send|slow|600|fast|400|location|protocol|300|pageY|clientY|method|action|cancelBubble|hover|fromElement|toElement|relatedTarget|removeEventListener|blur|readonly|focus|resize|content|scroll|dblclick|mousedown|mouseup|mousemove|responseXML|change|keydown|keypress|keyup|addEventListener|write|prototype|size|scr|ipt|createTextNode|defer|FORM|reverse|noConflict|loaded|10000|weight|line|Bottom|Right|Left|padding|border|Width|offsetHeight|offsetWidth|absolute|PI|left'.split('|'),0,{}));jQuery.noConflict(); ,wordpress/wp-includes/js/jquery/.svn/entriesa8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/jquery svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 jquery.js file 2008-11-20T16:30:25.000000Z 290a21c83be5e11f93b86ff1bf8d4cd2 2008-10-28T18:17:06.112729Z 97 paul interface.js file 2008-11-20T16:30:25.000000Z 847407c01f884853efd73974931e2195 2008-10-28T18:17:06.112729Z 97 paul jquery.form.js file 2008-11-20T16:30:25.000000Z 2bd31999f24a62d12a568fdbb8d43759 2008-10-28T18:17:06.112729Z 97 paul +wordpress/wp-includes/js/jquery/.svn/format8 Dwordpress/wp-includes/js/jquery/.svn/text-base/interface.js.svn-base65/** * Interface Elements for jQuery * * http://interface.eyecon.ro * * Copyright (c) 2006 Stefan Petre * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * */ eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('k.f2={2r:u(M){E q.1E(u(){if(!M.aR||!M.aZ)E;D el=q;el.2l={aq:M.aq||cO,aR:M.aR,aZ:M.aZ,8e:M.8e||\'fV\',aJ:M.aJ||\'fV\',2Y:M.2Y&&2g M.2Y==\'u\'?M.2Y:I,3i:M.2Y&&2g M.3i==\'u\'?M.3i:I,7U:M.7U&&2g M.7U==\'u\'?M.7U:I,as:k(M.aR,q),8f:k(M.aZ,q),H:M.H||8J,67:M.67||0};el.2l.8f.2G().B(\'W\',\'9R\').eq(0).B({W:el.2l.aq+\'U\',19:\'2B\'}).2T();el.2l.as.1E(u(2N){q.7X=2N}).gC(u(){k(q).2R(el.2l.aJ)},u(){k(q).4i(el.2l.aJ)}).1J(\'5h\',u(e){if(el.2l.67==q.7X)E;el.2l.as.eq(el.2l.67).4i(el.2l.8e).2T().eq(q.7X).2R(el.2l.8e).2T();el.2l.8f.eq(el.2l.67).5w({W:0},el.2l.H,u(){q.14.19=\'1o\';if(el.2l.3i){el.2l.3i.1D(el,[q])}}).2T().eq(q.7X).1Y().5w({W:el.2l.aq},el.2l.H,u(){q.14.19=\'2B\';if(el.2l.2Y){el.2l.2Y.1D(el,[q])}}).2T();if(el.2l.7U){el.2l.7U.1D(el,[q,el.2l.8f.K(q.7X),el.2l.as.K(el.2l.67),el.2l.8f.K(el.2l.67)])}el.2l.67=q.7X}).eq(0).2R(el.2l.8e).2T();k(q).B(\'W\',k(q).B(\'W\')).B(\'2U\',\'2K\')})}};k.fn.gN=k.f2.2r;k.aA={2r:u(M){E q.1E(u(){D el=q;D 7E=2*18.2Q/f1;D an=2*18.2Q;if(k(el).B(\'Y\')!=\'2s\'&&k(el).B(\'Y\')!=\'1P\'){k(el).B(\'Y\',\'2s\')}el.1l={1R:k(M.1R,q),2F:M.2F,6q:M.6q,aD:M.aD,an:an,1N:k.1a.2o(q),Y:k.1a.3w(q),26:18.2Q/2,bi:M.bi,8p:M.6r,6r:[],aG:I,7E:2*18.2Q/f1};el.1l.fB=(el.1l.1N.w-el.1l.2F)/2;el.1l.7D=(el.1l.1N.h-el.1l.6q-el.1l.6q*el.1l.8p)/2;el.1l.2D=2*18.2Q/el.1l.1R.1N();el.1l.ba=el.1l.1N.w/2;el.1l.b9=el.1l.1N.h/2-el.1l.6q*el.1l.8p;D ak=1h.3F(\'22\');k(ak).B({Y:\'1P\',3I:1,Q:0,O:0});k(el).1S(ak);el.1l.1R.1E(u(2N){a6=k(\'1T\',q).K(0);W=T(el.1l.6q*el.1l.8p);if(k.3a.4t){3E=1h.3F(\'1T\');k(3E).B(\'Y\',\'1P\');3E.2J=a6.2J;3E.14.5E=\'gE 9n:9w.9y.cC(1G=60, 14=1, gB=0, gA=0, gv=0, gF=0)\'}P{3E=1h.3F(\'3E\');if(3E.fD){4L=3E.fD("2d");3E.14.Y=\'1P\';3E.14.W=W+\'U\';3E.14.Z=el.1l.2F+\'U\';3E.W=W;3E.Z=el.1l.2F;4L.gu();4L.gO(0,W);4L.gk(1,-1);4L.gp(a6,0,0,el.1l.2F,W);4L.6H();4L.gm="gG-4l";D ap=4L.hy(0,0,0,W);ap.fs(1,"fr(1V, 1V, 1V, 1)");ap.fs(0,"fr(1V, 1V, 1V, 0.6)");4L.hx=ap;if(hA.hB.3J(\'hw\')!=-1){4L.hv()}P{4L.hu(0,0,el.1l.2F,W)}}}el.1l.6r[2N]=3E;k(ak).1S(3E)}).1J(\'9z\',u(e){el.1l.aG=1b;el.1l.H=el.1l.7E*0.1*el.1l.H/18.3S(el.1l.H);E I}).1J(\'8B\',u(e){el.1l.aG=I;E I});k.aA.7T(el);el.1l.H=el.1l.7E*0.2;el.1l.ht=1X.6V(u(){el.1l.26+=el.1l.H;if(el.1l.26>an)el.1l.26=0;k.aA.7T(el)},20);k(el).1J(\'8B\',u(){el.1l.H=el.1l.7E*0.2*el.1l.H/18.3S(el.1l.H)}).1J(\'3D\',u(e){if(el.1l.aG==I){1s=k.1a.4a(e);fz=el.1l.1N.w-1s.x+el.1l.Y.x;el.1l.H=el.1l.bi*el.1l.7E*(el.1l.1N.w/2-fz)/(el.1l.1N.w/2)}})})},7T:u(el){el.1l.1R.1E(u(2N){b8=el.1l.26+2N*el.1l.2D;x=el.1l.fB*18.5H(b8);y=el.1l.7D*18.83(b8);f9=T(2a*(el.1l.7D+y)/(2*el.1l.7D));fk=(el.1l.7D+y)/(2*el.1l.7D);Z=T((el.1l.2F-el.1l.aD)*fk+el.1l.aD);W=T(Z*el.1l.6q/el.1l.2F);q.14.Q=el.1l.b9+y-W/2+"U";q.14.O=el.1l.ba+x-Z/2+"U";q.14.Z=Z+"U";q.14.W=W+"U";q.14.3I=f9;el.1l.6r[2N].14.Q=T(el.1l.b9+y+W-1-W/2)+"U";el.1l.6r[2N].14.O=T(el.1l.ba+x-Z/2)+"U";el.1l.6r[2N].14.Z=Z+"U";el.1l.6r[2N].14.W=T(W*el.1l.8p)+"U"})}};k.fn.hI=k.aA.2r;k.23({G:{c8:u(p,n,1W,1H,1m){E((-18.5H(p*18.2Q)/2)+0.5)*1H+1W},hK:u(p,n,1W,1H,1m){E 1H*(n/=1m)*n*n+1W},fl:u(p,n,1W,1H,1m){E-1H*((n=n/1m-1)*n*n*n-1)+1W},hm:u(p,n,1W,1H,1m){if((n/=1m/2)<1)E 1H/2*n*n*n*n+1W;E-1H/2*((n-=2)*n*n*n-2)+1W},8l:u(p,n,1W,1H,1m){if((n/=1m)<(1/2.75)){E 1H*(7.aB*n*n)+1W}P if(n<(2/2.75)){E 1H*(7.aB*(n-=(1.5/2.75))*n+.75)+1W}P if(n<(2.5/2.75)){E 1H*(7.aB*(n-=(2.25/2.75))*n+.gY)+1W}P{E 1H*(7.aB*(n-=(2.h2/2.75))*n+.gX)+1W}},cr:u(p,n,1W,1H,1m){if(k.G.8l)E 1H-k.G.8l(p,1m-n,0,1H,1m)+1W;E 1W+1H},gW:u(p,n,1W,1H,1m){if(k.G.cr&&k.G.8l)if(n<1m/2)E k.G.cr(p,n*2,0,1H,1m)*.5+1W;E k.G.8l(p,n*2-1m,0,1H,1m)*.5+1H*.5+1W;E 1W+1H},gQ:u(p,n,1W,1H,1m){D a,s;if(n==0)E 1W;if((n/=1m)==1)E 1W+1H;a=1H*0.3;p=1m*.3;if(a<18.3S(1H)){a=1H;s=p/4}P{s=p/(2*18.2Q)*18.cb(1H/a)}E-(a*18.6b(2,10*(n-=1))*18.83((n*1m-s)*(2*18.2Q)/p))+1W},gT:u(p,n,1W,1H,1m){D a,s;if(n==0)E 1W;if((n/=1m/2)==2)E 1W+1H;a=1H*0.3;p=1m*.3;if(a<18.3S(1H)){a=1H;s=p/4}P{s=p/(2*18.2Q)*18.cb(1H/a)}E a*18.6b(2,-10*n)*18.83((n*1m-s)*(2*18.2Q)/p)+1H+1W},gV:u(p,n,1W,1H,1m){D a,s;if(n==0)E 1W;if((n/=1m/2)==2)E 1W+1H;a=1H*0.3;p=1m*.3;if(a<18.3S(1H)){a=1H;s=p/4}P{s=p/(2*18.2Q)*18.cb(1H/a)}if(n<1){E-.5*(a*18.6b(2,10*(n-=1))*18.83((n*1m-s)*(2*18.2Q)/p))+1W}E a*18.6b(2,-10*(n-=1))*18.83((n*1m-s)*(2*18.2Q)/p)*.5+1H+1W}}});k.6n={2r:u(M){E q.1E(u(){D el=q;el.1F={1R:k(M.1R,q),1Z:k(M.1Z,q),1M:k.1a.3w(q),2F:M.2F,ax:M.ax,7Y:M.7Y,ge:M.ge,51:M.51,6x:M.6x};k.6n.aH(el,0);k(1X).1J(\'gU\',u(){el.1F.1M=k.1a.3w(el);k.6n.aH(el,0);k.6n.7T(el)});k.6n.7T(el);el.1F.1R.1J(\'9z\',u(){k(el.1F.ax,q).K(0).14.19=\'2B\'}).1J(\'8B\',u(){k(el.1F.ax,q).K(0).14.19=\'1o\'});k(1h).1J(\'3D\',u(e){D 1s=k.1a.4a(e);D 5s=0;if(el.1F.51&&el.1F.51==\'cv\')D aI=1s.x-el.1F.1M.x-(el.4c-el.1F.2F*el.1F.1R.1N())/2-el.1F.2F/2;P if(el.1F.51&&el.1F.51==\'2L\')D aI=1s.x-el.1F.1M.x-el.4c+el.1F.2F*el.1F.1R.1N();P D aI=1s.x-el.1F.1M.x;D fP=18.6b(1s.y-el.1F.1M.y-el.5W/2,2);el.1F.1R.1E(u(2N){45=18.ez(18.6b(aI-2N*el.1F.2F,2)+fP);45-=el.1F.2F/2;45=45<0?0:45;45=45>el.1F.7Y?el.1F.7Y:45;45=el.1F.7Y-45;bB=el.1F.6x*45/el.1F.7Y;q.14.Z=el.1F.2F+bB+\'U\';q.14.O=el.1F.2F*2N+5s+\'U\';5s+=bB});k.6n.aH(el,5s)})})},aH:u(el,5s){if(el.1F.51)if(el.1F.51==\'cv\')el.1F.1Z.K(0).14.O=(el.4c-el.1F.2F*el.1F.1R.1N())/2-5s/2+\'U\';P if(el.1F.51==\'O\')el.1F.1Z.K(0).14.O=-5s/el.1F.1R.1N()+\'U\';P if(el.1F.51==\'2L\')el.1F.1Z.K(0).14.O=(el.4c-el.1F.2F*el.1F.1R.1N())-5s/2+\'U\';el.1F.1Z.K(0).14.Z=el.1F.2F*el.1F.1R.1N()+5s+\'U\'},7T:u(el){el.1F.1R.1E(u(2N){q.14.Z=el.1F.2F+\'U\';q.14.O=el.1F.2F*2N+\'U\'})}};k.fn.hi=k.6n.2r;k.N={1c:S,8R:S,3A:S,2I:S,4y:S,cl:S,1d:S,2h:S,1R:S,5o:u(){k.N.8R.5o();if(k.N.3A){k.N.3A.2G()}},4w:u(){k.N.1R=S;k.N.2h=S;k.N.4y=k.N.1d.2y;if(k.N.1c.B(\'19\')==\'2B\'){if(k.N.1d.1f.fx){3m(k.N.1d.1f.fx.1u){1e\'c6\':k.N.1c.7a(k.N.1d.1f.fx.1m,k.N.5o);1r;1e\'1z\':k.N.1c.fq(k.N.1d.1f.fx.1m,k.N.5o);1r;1e\'a7\':k.N.1c.g3(k.N.1d.1f.fx.1m,k.N.5o);1r}}P{k.N.1c.2G()}if(k.N.1d.1f.3i)k.N.1d.1f.3i.1D(k.N.1d,[k.N.1c,k.N.3A])}P{k.N.5o()}1X.bH(k.N.2I)},dQ:u(){D 1d=k.N.1d;D 4d=k.N.aY(1d);if(1d&&4d.3o!=k.N.4y&&4d.3o.1g>=1d.1f.aL){k.N.4y=4d.3o;k.N.cl=4d.3o;81={2n:k(1d).1p(\'hj\')||\'2n\',2y:4d.3o};k.hl({1u:\'hk\',81:k.hf(81),he:u(fZ){1d.1f.4e=k(\'3o\',fZ);1N=1d.1f.4e.1N();if(1N>0){D 5p=\'\';1d.1f.4e.1E(u(2N){5p+=\'<8P 4I="\'+k(\'2y\',q).3g()+\'" 8K="\'+2N+\'" 14="9b: ad;">\'+k(\'3g\',q).3g()+\'\'});if(1d.1f.aU){D 3M=k(\'2y\',1d.1f.4e.K(0)).3g();1d.2y=4d.3j+3M+1d.1f.3N+4d.66;k.N.6J(1d,4d.3o.1g!=3M.1g?(4d.3j.1g+4d.3o.1g):3M.1g,4d.3o.1g!=3M.1g?(4d.3j.1g+3M.1g):3M.1g)}if(1N>0){k.N.cj(1d,5p)}P{k.N.4w()}}P{k.N.4w()}},5N:1d.1f.aN})}},cj:u(1d,5p){k.N.8R.3x(5p);k.N.1R=k(\'8P\',k.N.8R.K(0));k.N.1R.9z(k.N.di).1J(\'5h\',k.N.dj);D Y=k.1a.3w(1d);D 1N=k.1a.2o(1d);k.N.1c.B(\'Q\',Y.y+1N.hb+\'U\').B(\'O\',Y.x+\'U\').2R(1d.1f.aM);if(k.N.3A){k.N.3A.B(\'19\',\'2B\').B(\'Q\',Y.y+1N.hb+\'U\').B(\'O\',Y.x+\'U\').B(\'Z\',k.N.1c.B(\'Z\')).B(\'W\',k.N.1c.B(\'W\'))}k.N.2h=0;k.N.1R.K(0).3l=1d.1f.7H;k.N.8Q(1d,1d.1f.4e.K(0),\'7J\');if(k.N.1c.B(\'19\')==\'1o\'){if(1d.1f.bV){D cp=k.1a.aT(1d,1b);D cm=k.1a.6U(1d,1b);k.N.1c.B(\'Z\',1d.4c-(k.dF?(cp.l+cp.r+cm.l+cm.r):0)+\'U\')}if(1d.1f.fx){3m(1d.1f.fx.1u){1e\'c6\':k.N.1c.7f(1d.1f.fx.1m);1r;1e\'1z\':k.N.1c.fo(1d.1f.fx.1m);1r;1e\'a7\':k.N.1c.gb(1d.1f.fx.1m);1r}}P{k.N.1c.1Y()}if(k.N.1d.1f.2Y)k.N.1d.1f.2Y.1D(k.N.1d,[k.N.1c,k.N.3A])}},dO:u(){D 1d=q;if(1d.1f.4e){k.N.4y=1d.2y;k.N.cl=1d.2y;D 5p=\'\';1d.1f.4e.1E(u(2N){2y=k(\'2y\',q).3g().6c();fY=1d.2y.6c();if(2y.3J(fY)==0){5p+=\'<8P 4I="\'+k(\'2y\',q).3g()+\'" 8K="\'+2N+\'" 14="9b: ad;">\'+k(\'3g\',q).3g()+\'\'}});if(5p!=\'\'){k.N.cj(1d,5p);q.1f.9x=1b;E}}1d.1f.4e=S;q.1f.9x=I},6J:u(2n,26,2T){if(2n.b1){D 6t=2n.b1();6t.hp(1b);6t.dI("ck",26);6t.ha("ck",-2T+26);6t.8C()}P if(2n.aF){2n.aF(26,2T)}P{if(2n.5q){2n.5q=26;2n.dN=2T}}2n.6K()},f0:u(2n){if(2n.5q)E 2n.5q;P if(2n.b1){D 6t=1h.6J.dZ();D eX=6t.h9();E 0-eX.dI(\'ck\',-h6)}},aY:u(2n){D 4P={2y:2n.2y,3j:\'\',66:\'\',3o:\'\'};if(2n.1f.aQ){D 8N=I;D 5q=k.N.f0(2n)||0;D 4T=4P.2y.7C(2n.1f.3N);24(D i=0;i<4T.1g;i++){if((4P.3j.1g+4T[i].1g>=5q||5q==0)&&!8N){if(4P.3j.1g<=5q)4P.3o=4T[i];P 4P.66+=4T[i]+(4T[i]!=\'\'?2n.1f.3N:\'\');8N=1b}P if(8N){4P.66+=4T[i]+(4T[i]!=\'\'?2n.1f.3N:\'\')}if(!8N){4P.3j+=4T[i]+(4T.1g>1?2n.1f.3N:\'\')}}}P{4P.3o=4P.2y}E 4P},bU:u(e){1X.bH(k.N.2I);D 1d=k.N.aY(q);D 3K=e.7L||e.7K||-1;if(/13|27|35|36|38|40|9/.48(3K)&&k.N.1R){if(1X.2k){1X.2k.bT=1b;1X.2k.c0=I}P{e.aP();e.aW()}if(k.N.2h!=S)k.N.1R.K(k.N.2h||0).3l=\'\';P k.N.2h=-1;3m(3K){1e 9:1e 13:if(k.N.2h==-1)k.N.2h=0;D 2h=k.N.1R.K(k.N.2h||0);D 3M=2h.5C(\'4I\');q.2y=1d.3j+3M+q.1f.3N+1d.66;k.N.4y=1d.3o;k.N.6J(q,1d.3j.1g+3M.1g+q.1f.3N.1g,1d.3j.1g+3M.1g+q.1f.3N.1g);k.N.4w();if(q.1f.68){4u=T(2h.5C(\'8K\'))||0;k.N.8Q(q,q.1f.4e.K(4u),\'68\')}if(q.7W)q.7W(I);E 3K!=13;1r;1e 27:q.2y=1d.3j+k.N.4y+q.1f.3N+1d.66;q.1f.4e=S;k.N.4w();if(q.7W)q.7W(I);E I;1r;1e 35:k.N.2h=k.N.1R.1N()-1;1r;1e 36:k.N.2h=0;1r;1e 38:k.N.2h--;if(k.N.2h<0)k.N.2h=k.N.1R.1N()-1;1r;1e 40:k.N.2h++;if(k.N.2h==k.N.1R.1N())k.N.2h=0;1r}k.N.8Q(q,q.1f.4e.K(k.N.2h||0),\'7J\');k.N.1R.K(k.N.2h||0).3l=q.1f.7H;if(k.N.1R.K(k.N.2h||0).7W)k.N.1R.K(k.N.2h||0).7W(I);if(q.1f.aU){D aK=k.N.1R.K(k.N.2h||0).5C(\'4I\');q.2y=1d.3j+aK+q.1f.3N+1d.66;if(k.N.4y.1g!=aK.1g)k.N.6J(q,1d.3j.1g+k.N.4y.1g,1d.3j.1g+aK.1g)}E I}k.N.dO.1D(q);if(q.1f.9x==I){if(1d.3o!=k.N.4y&&1d.3o.1g>=q.1f.aL)k.N.2I=1X.9T(k.N.dQ,q.1f.54);if(k.N.1R){k.N.4w()}}E 1b},8Q:u(2n,3o,1u){if(2n.1f[1u]){D 81={};ar=3o.f3(\'*\');24(i=0;i\');k.N.3A=k(\'#ds\')}k(\'2e\',1h).1S(\'<22 id="dr" 14="Y: 1P; Q: 0; O: 0; z-cZ: h3; 19: 1o;"><9h 14="6w: 0;8F: 0; h1-14: 1o; z-cZ: h0;">&7k;\');k.N.1c=k(\'#dr\');k.N.8R=k(\'9h\',k.N.1c)}E q.1E(u(){if(q.4Y!=\'ch\'&&q.5C(\'1u\')!=\'3g\')E;q.1f={};q.1f.aN=M.aN;q.1f.aL=18.3S(T(M.aL)||1);q.1f.aM=M.aM?M.aM:\'\';q.1f.7H=M.7H?M.7H:\'\';q.1f.68=M.68&&M.68.1K==2A?M.68:S;q.1f.2Y=M.2Y&&M.2Y.1K==2A?M.2Y:S;q.1f.3i=M.3i&&M.3i.1K==2A?M.3i:S;q.1f.7J=M.7J&&M.7J.1K==2A?M.7J:S;q.1f.bV=M.bV||I;q.1f.aQ=M.aQ||I;q.1f.3N=q.1f.aQ?(M.3N||\', \'):\'\';q.1f.aU=M.aU?1b:I;q.1f.54=18.3S(T(M.54)||aC);if(M.fx&&M.fx.1K==7M){if(!M.fx.1u||!/c6|1z|a7/.48(M.fx.1u)){M.fx.1u=\'1z\'}if(M.fx.1u==\'1z\'&&!k.fx.1z)E;if(M.fx.1u==\'a7\'&&!k.fx.61)E;M.fx.1m=18.3S(T(M.fx.1m)||8J);if(M.fx.1m>q.1f.54){M.fx.1m=q.1f.54-2a}q.1f.fx=M.fx}q.1f.4e=S;q.1f.9x=I;k(q).1p(\'bU\',\'eN\').6K(u(){k.N.1d=q;k.N.4y=q.2y}).dH(k.N.eJ).6y(k.N.bU).5B(u(){k.N.2I=1X.9T(k.N.4w,hM)})})}};k.fn.hR=k.N.2r;k.1y={2I:S,4Q:S,29:S,2D:10,26:u(el,4J,2D,eG){k.1y.4Q=el;k.1y.29=4J;k.1y.2D=T(2D)||10;k.1y.2I=1X.6V(k.1y.eF,T(eG)||40)},eF:u(){24(i=0;i0&&k.1y.29[i].2X.y+k.1y.29[i].2X.t>69.y){k.1y.29[i].3d-=k.1y.2D}P if(k.1y.29[i].2X.t<=k.1y.29[i].2X.h&&k.1y.29[i].2X.t+k.1y.29[i].2X.hb<69.y+69.hb){k.1y.29[i].3d+=k.1y.2D}if(k.1y.29[i].2X.l>0&&k.1y.29[i].2X.x+k.1y.29[i].2X.l>69.x){k.1y.29[i].3c-=k.1y.2D}P if(k.1y.29[i].2X.l<=k.1y.29[i].2X.hP&&k.1y.29[i].2X.l+k.1y.29[i].2X.1C<69.x+69.1C){k.1y.29[i].3c+=k.1y.2D}}},8o:u(){1X.5T(k.1y.2I);k.1y.4Q=S;k.1y.29=S;24(i in k.1y.29){k.1y.29[i].2X=S}}};k.11={1c:S,F:S,4U:u(){E q.1E(u(){if(q.9I){q.A.5e.3q(\'5v\',k.11.bN);q.A=S;q.9I=I;if(k.3a.4t){q.bE="eN"}P{q.14.hq=\'\';q.14.e1=\'\';q.14.e7=\'\'}}})},bN:u(e){if(k.11.F!=S){k.11.9A(e);E I}D C=q.3U;k(1h).1J(\'3D\',k.11.bX).1J(\'5P\',k.11.9A);C.A.1s=k.1a.4a(e);C.A.4B=C.A.1s;C.A.7q=I;C.A.ho=q!=q.3U;k.11.F=C;if(C.A.5i&&q!=q.3U){bS=k.1a.3w(C.31);bQ=k.1a.2o(C);bR={x:T(k.B(C,\'O\'))||0,y:T(k.B(C,\'Q\'))||0};dx=C.A.4B.x-bS.x-bQ.1C/2-bR.x;dy=C.A.4B.y-bS.y-bQ.hb/2-bR.y;k.3b.5c(C,[dx,dy])}E k.7n||I},ea:u(e){D C=k.11.F;C.A.7q=1b;D 9G=C.14;C.A.7V=k.B(C,\'19\');C.A.4n=k.B(C,\'Y\');if(!C.A.cz)C.A.cz=C.A.4n;C.A.2c={x:T(k.B(C,\'O\'))||0,y:T(k.B(C,\'Q\'))||0};C.A.9B=0;C.A.ai=0;if(k.3a.4t){D bW=k.1a.6U(C,1b);C.A.9B=bW.l||0;C.A.ai=bW.t||0}C.A.1B=k.23(k.1a.3w(C),k.1a.2o(C));if(C.A.4n!=\'2s\'&&C.A.4n!=\'1P\'){9G.Y=\'2s\'}k.11.1c.5o();D 5g=C.fI(1b);k(5g).B({19:\'2B\',O:\'2P\',Q:\'2P\'});5g.14.5K=\'0\';5g.14.5z=\'0\';5g.14.5k=\'0\';5g.14.5j=\'0\';k.11.1c.1S(5g);D 3Y=k.11.1c.K(0).14;if(C.A.bD){3Y.Z=\'9F\';3Y.W=\'9F\'}P{3Y.W=C.A.1B.hb+\'U\';3Y.Z=C.A.1B.1C+\'U\'}3Y.19=\'2B\';3Y.5K=\'2P\';3Y.5z=\'2P\';3Y.5k=\'2P\';3Y.5j=\'2P\';k.23(C.A.1B,k.1a.2o(5g));if(C.A.2V){if(C.A.2V.O){C.A.2c.x+=C.A.1s.x-C.A.1B.x-C.A.2V.O;C.A.1B.x=C.A.1s.x-C.A.2V.O}if(C.A.2V.Q){C.A.2c.y+=C.A.1s.y-C.A.1B.y-C.A.2V.Q;C.A.1B.y=C.A.1s.y-C.A.2V.Q}if(C.A.2V.2L){C.A.2c.x+=C.A.1s.x-C.A.1B.x-C.A.1B.hb+C.A.2V.2L;C.A.1B.x=C.A.1s.x-C.A.1B.1C+C.A.2V.2L}if(C.A.2V.4D){C.A.2c.y+=C.A.1s.y-C.A.1B.y-C.A.1B.hb+C.A.2V.4D;C.A.1B.y=C.A.1s.y-C.A.1B.hb+C.A.2V.4D}}C.A.2v=C.A.2c.x;C.A.2q=C.A.2c.y;if(C.A.8s||C.A.2p==\'94\'){8U=k.1a.6U(C.31,1b);C.A.1B.x=C.8t+(k.3a.4t?0:k.3a.7I?-8U.l:8U.l);C.A.1B.y=C.8G+(k.3a.4t?0:k.3a.7I?-8U.t:8U.t);k(C.31).1S(k.11.1c.K(0))}if(C.A.2p){k.11.c5(C);C.A.5t.2p=k.11.ce}if(C.A.5i){k.3b.ct(C)}3Y.O=C.A.1B.x-C.A.9B+\'U\';3Y.Q=C.A.1B.y-C.A.ai+\'U\';3Y.Z=C.A.1B.1C+\'U\';3Y.W=C.A.1B.hb+\'U\';k.11.F.A.9E=I;if(C.A.gx){C.A.5t.6a=k.11.c7}if(C.A.3I!=I){k.11.1c.B(\'3I\',C.A.3I)}if(C.A.1G){k.11.1c.B(\'1G\',C.A.1G);if(1X.71){k.11.1c.B(\'5E\',\'8V(1G=\'+C.A.1G*2a+\')\')}}if(C.A.7O){k.11.1c.2R(C.A.7O);k.11.1c.K(0).7c.14.19=\'1o\'}if(C.A.4o)C.A.4o.1D(C,[5g,C.A.2c.x,C.A.2c.y]);if(k.1x&&k.1x.8D>0){k.1x.ed(C)}if(C.A.46==I){9G.19=\'1o\'}E I},c5:u(C){if(C.A.2p.1K==b0){if(C.A.2p==\'94\'){C.A.28=k.23({x:0,y:0},k.1a.2o(C.31));D 8S=k.1a.6U(C.31,1b);C.A.28.w=C.A.28.1C-8S.l-8S.r;C.A.28.h=C.A.28.hb-8S.t-8S.b}P if(C.A.2p==\'1h\'){D bY=k.1a.bm();C.A.28={x:0,y:0,w:bY.w,h:bY.h}}}P if(C.A.2p.1K==7F){C.A.28={x:T(C.A.2p[0])||0,y:T(C.A.2p[1])||0,w:T(C.A.2p[2])||0,h:T(C.A.2p[3])||0}}C.A.28.dx=C.A.28.x-C.A.1B.x;C.A.28.dy=C.A.28.y-C.A.1B.y},9H:u(F){if(F.A.8s||F.A.2p==\'94\'){k(\'2e\',1h).1S(k.11.1c.K(0))}k.11.1c.5o().2G().B(\'1G\',1);if(1X.71){k.11.1c.B(\'5E\',\'8V(1G=2a)\')}},9A:u(e){k(1h).3q(\'3D\',k.11.bX).3q(\'5P\',k.11.9A);if(k.11.F==S){E}D F=k.11.F;k.11.F=S;if(F.A.7q==I){E I}if(F.A.44==1b){k(F).B(\'Y\',F.A.4n)}D 9G=F.14;if(F.5i){k.11.1c.B(\'9b\',\'8j\')}if(F.A.7O){k.11.1c.4i(F.A.7O)}if(F.A.6N==I){if(F.A.fx>0){if(!F.A.1O||F.A.1O==\'4j\'){D x=12 k.fx(F,{1m:F.A.fx},\'O\');x.1L(F.A.2c.x,F.A.8y)}if(!F.A.1O||F.A.1O==\'49\'){D y=12 k.fx(F,{1m:F.A.fx},\'Q\');y.1L(F.A.2c.y,F.A.8v)}}P{if(!F.A.1O||F.A.1O==\'4j\')F.14.O=F.A.8y+\'U\';if(!F.A.1O||F.A.1O==\'49\')F.14.Q=F.A.8v+\'U\'}k.11.9H(F);if(F.A.46==I){k(F).B(\'19\',F.A.7V)}}P if(F.A.fx>0){F.A.9E=1b;D dh=I;if(k.1x&&k.1t&&F.A.44){dh=k.1a.3w(k.1t.1c.K(0))}k.11.1c.5w({O:dh?dh.x:F.A.1B.x,Q:dh?dh.y:F.A.1B.y},F.A.fx,u(){F.A.9E=I;if(F.A.46==I){F.14.19=F.A.7V}k.11.9H(F)})}P{k.11.9H(F);if(F.A.46==I){k(F).B(\'19\',F.A.7V)}}if(k.1x&&k.1x.8D>0){k.1x.eO(F)}if(k.1t&&F.A.44){k.1t.fC(F)}if(F.A.2Z&&(F.A.8y!=F.A.2c.x||F.A.8v!=F.A.2c.y)){F.A.2Z.1D(F,F.A.b3||[0,0,F.A.8y,F.A.8v])}if(F.A.3T)F.A.3T.1D(F);E I},c7:u(x,y,dx,dy){if(dx!=0)dx=T((dx+(q.A.gx*dx/18.3S(dx))/2)/q.A.gx)*q.A.gx;if(dy!=0)dy=T((dy+(q.A.gy*dy/18.3S(dy))/2)/q.A.gy)*q.A.gy;E{dx:dx,dy:dy,x:0,y:0}},ce:u(x,y,dx,dy){dx=18.3L(18.3r(dx,q.A.28.dx),q.A.28.w+q.A.28.dx-q.A.1B.1C);dy=18.3L(18.3r(dy,q.A.28.dy),q.A.28.h+q.A.28.dy-q.A.1B.hb);E{dx:dx,dy:dy,x:0,y:0}},bX:u(e){if(k.11.F==S||k.11.F.A.9E==1b){E}D F=k.11.F;F.A.4B=k.1a.4a(e);if(F.A.7q==I){45=18.ez(18.6b(F.A.1s.x-F.A.4B.x,2)+18.6b(F.A.1s.y-F.A.4B.y,2));if(450){k.1x.al(F)}E I},2r:u(o){if(!k.11.1c){k(\'2e\',1h).1S(\'<22 id="e8">\');k.11.1c=k(\'#e8\');D el=k.11.1c.K(0);D 4J=el.14;4J.Y=\'1P\';4J.19=\'1o\';4J.9b=\'8j\';4J.eu=\'1o\';4J.2U=\'2K\';if(1X.71){el.bE="e4"}P{4J.gi=\'1o\';4J.e7=\'1o\';4J.e1=\'1o\'}}if(!o){o={}}E q.1E(u(){if(q.9I||!k.1a)E;if(1X.71){q.gh=u(){E I};q.gj=u(){E I}}D el=q;D 5e=o.3v?k(q).gf(o.3v):k(q);if(k.3a.4t){5e.1E(u(){q.bE="e4"})}P{5e.B(\'-gI-7R-8C\',\'1o\');5e.B(\'7R-8C\',\'1o\');5e.B(\'-gH-7R-8C\',\'1o\')}q.A={5e:5e,6N:o.6N?1b:I,46:o.46?1b:I,44:o.44?o.44:I,5i:o.5i?o.5i:I,8s:o.8s?o.8s:I,3I:o.3I?T(o.3I)||0:I,1G:o.1G?2m(o.1G):I,fx:T(o.fx)||S,6R:o.6R?o.6R:I,5t:{},1s:{},4o:o.4o&&o.4o.1K==2A?o.4o:I,3T:o.3T&&o.3T.1K==2A?o.3T:I,2Z:o.2Z&&o.2Z.1K==2A?o.2Z:I,1O:/49|4j/.48(o.1O)?o.1O:I,6M:o.6M?T(o.6M)||0:0,2V:o.2V?o.2V:I,bD:o.bD?1b:I,7O:o.7O||I};if(o.5t&&o.5t.1K==2A)q.A.5t.7R=o.5t;if(o.4m&&o.4m.1K==2A)q.A.4m=o.4m;if(o.2p&&((o.2p.1K==b0&&(o.2p==\'94\'||o.2p==\'1h\'))||(o.2p.1K==7F&&o.2p.1g==4))){q.A.2p=o.2p}if(o.2O){q.A.2O=o.2O}if(o.6a){if(2g o.6a==\'gz\'){q.A.gx=T(o.6a)||1;q.A.gy=T(o.6a)||1}P if(o.6a.1g==2){q.A.gx=T(o.6a[0])||1;q.A.gy=T(o.6a[1])||1}}if(o.3H&&o.3H.1K==2A){q.A.3H=o.3H}q.9I=1b;5e.1E(u(){q.3U=el});5e.1J(\'5v\',k.11.bN)})}};k.fn.23({aS:k.11.4U,7t:k.11.2r});k.1x={du:u(5J,5G,7Q,7S){E 5J<=k.11.F.A.2v&&(5J+7Q)>=(k.11.F.A.2v+k.11.F.A.1B.w)&&5G<=k.11.F.A.2q&&(5G+7S)>=(k.11.F.A.2q+k.11.F.A.1B.h)?1b:I},cV:u(5J,5G,7Q,7S){E!(5J>(k.11.F.A.2v+k.11.F.A.1B.w)||(5J+7Q)(k.11.F.A.2q+k.11.F.A.1B.h)||(5G+7S)k.11.F.A.4B.x&&5Gk.11.F.A.4B.y?1b:I},5r:I,3Q:{},8D:0,3P:{},ed:u(C){if(k.11.F==S){E}D i;k.1x.3Q={};D bJ=I;24(i in k.1x.3P){if(k.1x.3P[i]!=S){D 1j=k.1x.3P[i].K(0);if(k(k.11.F).is(\'.\'+1j.1i.a)){if(1j.1i.m==I){1j.1i.p=k.23(k.1a.7G(1j),k.1a.74(1j));1j.1i.m=1b}if(1j.1i.ac){k.1x.3P[i].2R(1j.1i.ac)}k.1x.3Q[i]=k.1x.3P[i];if(k.1t&&1j.1i.s&&k.11.F.A.44){1j.1i.el=k(\'.\'+1j.1i.a,1j);C.14.19=\'1o\';k.1t.cT(1j);1j.1i.ay=k.1t.8x(k.1p(1j,\'id\')).7l;C.14.19=C.A.7V;bJ=1b}if(1j.1i.9i){1j.1i.9i.1D(k.1x.3P[i].K(0),[k.11.F])}}}}if(bJ){k.1t.26()}},dS:u(){k.1x.3Q={};24(i in k.1x.3P){if(k.1x.3P[i]!=S){D 1j=k.1x.3P[i].K(0);if(k(k.11.F).is(\'.\'+1j.1i.a)){1j.1i.p=k.23(k.1a.7G(1j),k.1a.74(1j));if(1j.1i.ac){k.1x.3P[i].2R(1j.1i.ac)}k.1x.3Q[i]=k.1x.3P[i];if(k.1t&&1j.1i.s&&k.11.F.A.44){1j.1i.el=k(\'.\'+1j.1i.a,1j);C.14.19=\'1o\';k.1t.cT(1j);C.14.19=C.A.7V}}}}},al:u(e){if(k.11.F==S){E}k.1x.5r=I;D i;D bK=I;D eQ=0;24(i in k.1x.3Q){D 1j=k.1x.3Q[i].K(0);if(k.1x.5r==I&&k.1x[1j.1i.t](1j.1i.p.x,1j.1i.p.y,1j.1i.p.1C,1j.1i.p.hb)){if(1j.1i.hc&&1j.1i.h==I){k.1x.3Q[i].2R(1j.1i.hc)}if(1j.1i.h==I&&1j.1i.7x){bK=1b}1j.1i.h=1b;k.1x.5r=1j;if(k.1t&&1j.1i.s&&k.11.F.A.44){k.1t.1c.K(0).3l=1j.1i.eV;k.1t.al(1j)}eQ++}P if(1j.1i.h==1b){if(1j.1i.7y){1j.1i.7y.1D(1j,[e,k.11.1c.K(0).7c,1j.1i.fx])}if(1j.1i.hc){k.1x.3Q[i].4i(1j.1i.hc)}1j.1i.h=I}}if(k.1t&&!k.1x.5r&&k.11.F.44){k.1t.1c.K(0).14.19=\'1o\'}if(bK){k.1x.5r.1i.7x.1D(k.1x.5r,[e,k.11.1c.K(0).7c])}},eO:u(e){D i;24(i in k.1x.3Q){D 1j=k.1x.3Q[i].K(0);if(1j.1i.ac){k.1x.3Q[i].4i(1j.1i.ac)}if(1j.1i.hc){k.1x.3Q[i].4i(1j.1i.hc)}if(1j.1i.s){k.1t.7s[k.1t.7s.1g]=i}if(1j.1i.9l&&1j.1i.h==1b){1j.1i.h=I;1j.1i.9l.1D(1j,[e,1j.1i.fx])}1j.1i.m=I;1j.1i.h=I}k.1x.3Q={}},4U:u(){E q.1E(u(){if(q.9j){if(q.1i.s){id=k.1p(q,\'id\');k.1t.5L[id]=S;k(\'.\'+q.1i.a,q).aS()}k.1x.3P[\'d\'+q.c2]=S;q.9j=I;q.f=S}})},2r:u(o){E q.1E(u(){if(q.9j==1b||!o.3C||!k.1a||!k.11){E}q.1i={a:o.3C,ac:o.9J||I,hc:o.a5||I,eV:o.58||I,9l:o.gq||o.9l||I,7x:o.7x||o.dC||I,7y:o.7y||o.fO||I,9i:o.9i||I,t:o.6I&&(o.6I==\'du\'||o.6I==\'cV\')?o.6I:\'1s\',fx:o.fx?o.fx:I,m:I,h:I};if(o.cQ==1b&&k.1t){id=k.1p(q,\'id\');k.1t.5L[id]=q.1i.a;q.1i.s=1b;if(o.2Z){q.1i.2Z=o.2Z;q.1i.ay=k.1t.8x(id).7l}}q.9j=1b;q.c2=T(18.6o()*c9);k.1x.3P[\'d\'+q.c2]=k(q);k.1x.8D++})}};k.fn.23({dR:k.1x.4U,do:k.1x.2r});k.gD=k.1x.dS;k.3B={1c:S,8L:u(){3g=q.2y;if(!3g)E;14={dz:k(q).B(\'dz\')||\'\',4A:k(q).B(\'4A\')||\'\',8Z:k(q).B(\'8Z\')||\'\',dP:k(q).B(\'dP\')||\'\',dT:k(q).B(\'dT\')||\'\',dU:k(q).B(\'dU\')||\'\',c3:k(q).B(\'c3\')||\'\',dY:k(q).B(\'dY\')||\'\'};k.3B.1c.B(14);3x=k.3B.dX(3g);3x=3x.4E(12 bb("\\\\n","g"),"
    ");k.3B.1c.3x(\'gL\');ci=k.3B.1c.K(0).4c;k.3B.1c.3x(3x);Z=k.3B.1c.K(0).4c+ci;if(q.6l.2M&&Z>q.6l.2M[0]){Z=q.6l.2M[0]}q.14.Z=Z+\'U\';if(q.4Y==\'cf\'){W=k.3B.1c.K(0).5W+ci;if(q.6l.2M&&W>q.6l.2M[1]){W=q.6l.2M[1]}q.14.W=W+\'U\'}},dX:u(3g){cg={\'&\':\'&gK;\',\'<\':\'&gJ;\',\'>\':\'>\',\'"\':\'&gs;\'};24(i in cg){3g=3g.4E(12 bb(i,\'g\'),cg[i])}E 3g},2r:u(2M){if(k.3B.1c==S){k(\'2e\',1h).1S(\'<22 id="dE" 14="Y: 1P; Q: 0; O: 0; 3n: 2K;">\');k.3B.1c=k(\'#dE\')}E q.1E(u(){if(/cf|ch/.48(q.4Y)){if(q.4Y==\'ch\'){dB=q.5C(\'1u\');if(!/3g|gr/.48(dB)){E}}if(2M&&(2M.1K==bn||(2M.1K==7F&&2M.1g==2))){if(2M.1K==bn)2M=[2M,2M];P{2M[0]=T(2M[0])||8J;2M[1]=T(2M[1])||8J}q.6l={2M:2M}}k(q).5B(k.3B.8L).6y(k.3B.8L).dH(k.3B.8L);k.3B.8L.1D(q)}})}};k.fn.kc=k.3B.2r;k.4K=u(e){if(/^kd$|^ke$|^ka$|^6L$|^k9$|^k5$|^k4$|^k6$|^k7$|^2e$|^k8$|^kf$|^kg$|^kn$|^ko$|^kp$|^kq$/i.48(e.9N))E I;P E 1b};k.fx.a0=u(e,65){D c=e.7c;D cs=c.14;cs.Y=65.Y;cs.5K=65.3G.t;cs.5j=65.3G.l;cs.5k=65.3G.b;cs.5z=65.3G.r;cs.Q=65.Q+\'U\';cs.O=65.O+\'U\';e.31.ew(c,e);e.31.km(e)};k.fx.9P=u(e){if(!k.4K(e))E I;D t=k(e);D es=e.14;D 73=I;if(t.B(\'19\')==\'1o\'){5Y=t.B(\'3n\');t.B(\'3n\',\'2K\').1Y();73=1b}D V={};V.Y=t.B(\'Y\');V.1q=k.1a.2o(e);V.3G=k.1a.cy(e);D co=e.4Z?e.4Z.ei:t.B(\'hU\');V.Q=T(t.B(\'Q\'))||0;V.O=T(t.B(\'O\'))||0;D eo=\'kl\'+T(18.6o()*c9);D 6u=1h.3F(/^1T$|^br$|^kh$|^hr$|^8C$|^kj$|^8T$|^3A$|^kk$|^k3$|^k2$|^9h$|^dl$|^jM$/i.48(e.9N)?\'22\':e.9N);k.1p(6u,\'id\',eo);D jN=k(6u).2R(\'jO\');D 4h=6u.14;D Q=0;D O=0;if(V.Y==\'2s\'||V.Y==\'1P\'){Q=V.Q;O=V.O}4h.Q=Q+\'U\';4h.O=O+\'U\';4h.Y=V.Y!=\'2s\'&&V.Y!=\'1P\'?\'2s\':V.Y;4h.W=V.1q.hb+\'U\';4h.Z=V.1q.1C+\'U\';4h.5K=V.3G.t;4h.5z=V.3G.r;4h.5k=V.3G.b;4h.5j=V.3G.l;4h.2U=\'2K\';if(k.3a.4t){4h.ei=co}P{4h.jK=co}if(k.3a=="4t"){es.5E="8V(1G="+0.ex*2a+")"}es.1G=0.ex;e.31.ew(6u,e);6u.jF(e);es.5K=\'2P\';es.5z=\'2P\';es.5k=\'2P\';es.5j=\'2P\';es.Y=\'1P\';es.eu=\'1o\';es.Q=\'2P\';es.O=\'2P\';if(73){t.2G();es.3n=5Y}E{V:V,3p:k(6u)}};k.fx.8E={jE:[0,1V,1V],jG:[eD,1V,1V],jH:[e6,e6,jI],jP:[0,0,0],ks:[0,0,1V],jY:[dv,42,42],jZ:[0,1V,1V],k0:[0,0,7w],k1:[0,7w,7w],jX:[cn,cn,cn],jS:[0,2a,0],jR:[jT,jU,eb],jV:[7w,0,7w],kr:[85,eb,47],kP:[1V,eA,0],kN:[kO,50,kx],kF:[7w,0,0],kD:[ku,f8,kt],ky:[kH,0,9C],kL:[1V,0,1V],kM:[1V,kJ,0],kv:[0,6C,0],kA:[75,0,kE],kC:[eD,eB,eA],kG:[kI,kB,eB],kw:[e0,1V,1V],kz:[eL,kK,eL],kQ:[9C,9C,9C],jC:[1V,iy,iz],iA:[1V,1V,e0],iB:[0,1V,0],ix:[1V,0,1V],iv:[6C,0,0],iq:[0,0,6C],ip:[6C,6C,0],ir:[1V,dv,0],it:[1V,ah,iu],iC:[6C,0,6C],iD:[1V,0,0],iK:[ah,ah,ah],iL:[1V,1V,1V],iM:[1V,1V,0]};k.fx.6D=u(4x,dm){if(k.fx.8E[4x])E{r:k.fx.8E[4x][0],g:k.fx.8E[4x][1],b:k.fx.8E[4x][2]};P if(2W=/^6Y\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)$/.a4(4x))E{r:T(2W[1]),g:T(2W[2]),b:T(2W[3])};P if(2W=/6Y\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)$/.a4(4x))E{r:2m(2W[1])*2.55,g:2m(2W[2])*2.55,b:2m(2W[3])*2.55};P if(2W=/^#([a-fA-79-9])([a-fA-79-9])([a-fA-79-9])$/.a4(4x))E{r:T("77"+2W[1]+2W[1]),g:T("77"+2W[2]+2W[2]),b:T("77"+2W[3]+2W[3])};P if(2W=/^#([a-fA-79-9]{2})([a-fA-79-9]{2})([a-fA-79-9]{2})$/.a4(4x))E{r:T("77"+2W[1]),g:T("77"+2W[2]),b:T("77"+2W[3])};P E dm==1b?I:{r:1V,g:1V,b:1V}};k.fx.dD={5Q:1,5b:1,5O:1,4S:1,4D:1,4A:1,W:1,O:1,c3:1,iI:1,5k:1,5j:1,5z:1,5K:1,8b:1,6x:1,8c:1,av:1,1G:1,iE:1,iF:1,5n:1,4X:1,5U:1,5M:1,2L:1,jD:1,Q:1,Z:1,3I:1};k.fx.dA={7i:1,iG:1,iH:1,io:1,im:1,4x:1,i2:1};k.fx.8A=[\'i3\',\'i4\',\'i5\',\'i1\'];k.fx.cc={\'cd\':[\'2E\',\'dK\'],\'a8\':[\'2E\',\'bh\'],\'6w\':[\'6w\',\'\'],\'8F\':[\'8F\',\'\']};k.fn.23({5w:u(5X,H,G,J){E q.1w(u(){D a1=k.H(H,G,J);D e=12 k.dM(q,a1,5X)})},c4:u(H,J){E q.1w(u(){D a1=k.H(H,J);D e=12 k.c4(q,a1)})},8o:u(2D){E q.1E(u(){if(q.6d)k.by(q,2D)})},i0:u(2D){E q.1E(u(){if(q.6d)k.by(q,2D);if(q.1w&&q.1w[\'fx\'])q.1w.fx=[]})}});k.23({c4:u(2f,M){D z=q,3t;z.2D=u(){if(k.fQ(M.21))M.21.1D(2f)};z.2I=6V(u(){z.2D()},M.1m);2f.6d=z},G:{c8:u(p,n,1W,1H,1m){E((-18.5H(p*18.2Q)/2)+0.5)*1H+1W}},dM:u(2f,M,5X){D z=q,3t;D y=2f.14;D fR=k.B(2f,"2U");D 72=k.B(2f,"19");D 2j={};z.9O=(12 7g()).7z();M.G=M.G&&k.G[M.G]?M.G:\'c8\';z.ag=u(2w,43){if(k.fx.dD[2w]){if(43==\'1Y\'||43==\'2G\'||43==\'3R\'){if(!2f.6v)2f.6v={};D r=2m(k.6E(2f,2w));2f.6v[2w]=r&&r>-c9?r:(2m(k.B(2f,2w))||0);43=43==\'3R\'?(72==\'1o\'?\'1Y\':\'2G\'):43;M[43]=1b;2j[2w]=43==\'1Y\'?[0,2f.6v[2w]]:[2f.6v[2w],0];if(2w!=\'1G\')y[2w]=2j[2w][0]+(2w!=\'3I\'&&2w!=\'8Z\'?\'U\':\'\');P k.1p(y,"1G",2j[2w][0])}P{2j[2w]=[2m(k.6E(2f,2w)),2m(43)||0]}}P if(k.fx.dA[2w])2j[2w]=[k.fx.6D(k.6E(2f,2w)),k.fx.6D(43)];P if(/^6w$|8F$|2E$|a8$|cd$/i.48(2w)){D m=43.4E(/\\s+/g,\' \').4E(/6Y\\s*\\(\\s*/g,\'6Y(\').4E(/\\s*,\\s*/g,\',\').4E(/\\s*\\)/g,\')\').d5(/([^\\s]+)/g);3m(2w){1e\'6w\':1e\'8F\':1e\'cd\':1e\'a8\':m[3]=m[3]||m[1]||m[0];m[2]=m[2]||m[0];m[1]=m[1]||m[0];24(D i=0;iM.1m+z.9O){5T(z.2I);z.2I=S;24(p in 2j){if(p=="1G")k.1p(y,"1G",2j[p][1]);P if(2g 2j[p][1]==\'8T\')y[p]=\'6Y(\'+2j[p][1].r+\',\'+2j[p][1].g+\',\'+2j[p][1].b+\')\';P y[p]=2j[p][1]+(p!=\'3I\'&&p!=\'8Z\'?\'U\':\'\')}if(M.2G||M.1Y)24(D p in 2f.6v)if(p=="1G")k.1p(y,p,2f.6v[p]);P y[p]="";y.19=M.2G?\'1o\':(72!=\'1o\'?72:\'2B\');y.2U=fR;2f.6d=S;if(k.fQ(M.21))M.21.1D(2f)}P{D n=t-q.9O;D 8w=n/M.1m;24(p in 2j){if(2g 2j[p][1]==\'8T\'){y[p]=\'6Y(\'+T(k.G[M.G](8w,n,2j[p][0].r,(2j[p][1].r-2j[p][0].r),M.1m))+\',\'+T(k.G[M.G](8w,n,2j[p][0].g,(2j[p][1].g-2j[p][0].g),M.1m))+\',\'+T(k.G[M.G](8w,n,2j[p][0].b,(2j[p][1].b-2j[p][0].b),M.1m))+\')\'}P{D bz=k.G[M.G](8w,n,2j[p][0],(2j[p][1]-2j[p][0]),M.1m);if(p=="1G")k.1p(y,"1G",bz);P y[p]=bz+(p!=\'3I\'&&p!=\'8Z\'?\'U\':\'\')}}}};z.2I=6V(u(){z.2D()},13);2f.6d=z},by:u(2f,2D){if(2D)2f.6d.9O-=iO;P{1X.5T(2f.6d.2I);2f.6d=S;k.2H(2f,"fx")}}});k.bl=u(5Z){D 5f={};if(2g 5Z==\'4V\'){5Z=5Z.6c().7C(\';\');24(D i=0;i<5Z.1g;i++){6X=5Z[i].7C(\':\');if(6X.1g==2){5f[k.g6(6X[0].4E(/\\-(\\w)/g,u(m,c){E c.jo()}))]=k.g6(6X[1])}}}E 5f};k.fn.23({g3:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'4F\',G)})},gb:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'4r\',G)})},jl:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'fJ\',G)})},jk:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'O\',G)})},jg:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'2L\',G)})},jf:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.61(q,H,J,\'fh\',G)})}});k.fx.61=u(e,H,J,2S,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.1N=k.1a.2o(e);z.G=2g J==\'4V\'?J:G||S;if(!e.4s)e.4s=z.el.B(\'19\');if(2S==\'fJ\'){2S=z.el.B(\'19\')==\'1o\'?\'4r\':\'4F\'}P if(2S==\'fh\'){2S=z.el.B(\'19\')==\'1o\'?\'2L\':\'O\'}z.el.1Y();z.H=H;z.J=2g J==\'u\'?J:S;z.fx=k.fx.9P(e);z.2S=2S;z.21=u(){if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}if(z.2S==\'4r\'||z.2S==\'2L\'){z.el.B(\'19\',z.el.K(0).4s==\'1o\'?\'2B\':z.el.K(0).4s)}P{z.el.2G()}k.fx.a0(z.fx.3p.K(0),z.fx.V);k.2H(z.el.K(0),\'1n\')};3m(z.2S){1e\'4F\':63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'W\');63.1L(z.fx.V.1q.hb,0);1r;1e\'4r\':z.fx.3p.B(\'W\',\'9R\');z.el.1Y();63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'W\');63.1L(0,z.fx.V.1q.hb);1r;1e\'O\':63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'Z\');63.1L(z.fx.V.1q.1C,0);1r;1e\'2L\':z.fx.3p.B(\'Z\',\'9R\');z.el.1Y();63=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'Z\');63.1L(0,z.fx.V.1q.1C);1r}};k.fn.ji=u(5D,J){E q.1w(\'1n\',u(){if(!k.4K(q)){k.2H(q,\'1n\');E I}D e=12 k.fx.f4(q,5D,J);e.bp()})};k.fx.f4=u(e,5D,J){D z=q;z.el=k(e);z.el.1Y();z.J=J;z.5D=T(5D)||40;z.V={};z.V.Y=z.el.B(\'Y\');z.V.Q=T(z.el.B(\'Q\'))||0;z.V.O=T(z.el.B(\'O\'))||0;if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.3V=5;z.5y=1;z.bp=u(){z.5y++;z.e=12 k.fx(z.el.K(0),{1m:jj,21:u(){z.e=12 k.fx(z.el.K(0),{1m:80,21:u(){z.5D=T(z.5D/2);if(z.5y<=z.3V)z.bp();P{z.el.B(\'Y\',z.V.Y).B(\'Q\',z.V.Q+\'U\').B(\'O\',z.V.O+\'U\');k.2H(z.el.K(0),\'1n\');if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}}}},\'Q\');z.e.1L(z.V.Q-z.5D,z.V.Q)}},\'Q\');z.e.1L(z.V.Q,z.V.Q-z.5D)}};k.fn.23({jy:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4r\',\'4l\',G)})},jz:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4r\',\'in\',G)})},jA:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4r\',\'3R\',G)})},jB:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4F\',\'4l\',G)})},jx:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4F\',\'in\',G)})},jw:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'4F\',\'3R\',G)})},js:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'O\',\'4l\',G)})},jt:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'O\',\'in\',G)})},ju:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'O\',\'3R\',G)})},jv:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'2L\',\'4l\',G)})},je:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'2L\',\'in\',G)})},jd:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.4f(q,H,J,\'2L\',\'3R\',G)})}});k.fx.4f=u(e,H,J,2S,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.V={};z.V.Y=z.el.B(\'Y\');z.V.Q=z.el.B(\'Q\');z.V.O=z.el.B(\'O\');if(!e.4s)e.4s=z.el.B(\'19\');if(1u==\'3R\'){1u=z.el.B(\'19\')==\'1o\'?\'in\':\'4l\'}z.el.1Y();if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.1u=1u;J=2g J==\'u\'?J:S;8H=1;3m(2S){1e\'4F\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'Q\');z.62=2m(z.V.Q)||0;z.9K=z.fG;8H=-1;1r;1e\'4r\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'Q\');z.62=2m(z.V.Q)||0;z.9K=z.fG;1r;1e\'2L\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'O\');z.62=2m(z.V.O)||0;z.9K=z.fy;1r;1e\'O\':z.e=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'O\');z.62=2m(z.V.O)||0;z.9K=z.fy;8H=-1;1r}z.e2=12 k.fx(z.el.K(0),k.H(H,z.G,u(){z.el.B(z.V);if(z.1u==\'4l\'){z.el.B(\'19\',\'1o\')}P z.el.B(\'19\',z.el.K(0).4s==\'1o\'?\'2B\':z.el.K(0).4s);k.2H(z.el.K(0),\'1n\')}),\'1G\');if(1u==\'in\'){z.e.1L(z.62+2a*8H,z.62);z.e2.1L(0,1)}P{z.e.1L(z.62,z.62+2a*8H);z.e2.1L(1,0)}};k.fn.23({j0:u(H,W,J,G){E q.1w(\'1n\',u(){12 k.fx.9L(q,H,W,J,\'fp\',G)})},iW:u(H,W,J,G){E q.1w(\'1n\',u(){12 k.fx.9L(q,H,W,J,\'9M\',G)})},iV:u(H,W,J,G){E q.1w(\'1n\',u(){12 k.fx.9L(q,H,W,J,\'3R\',G)})}});k.fx.9L=u(e,H,W,J,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;if(1u==\'3R\'){1u=z.el.B(\'19\')==\'1o\'?\'9M\':\'fp\'}z.H=H;z.W=W&&W.1K==bn?W:20;z.fx=k.fx.9P(e);z.1u=1u;z.21=u(){if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}if(z.1u==\'9M\'){z.el.1Y()}P{z.el.2G()}k.fx.a0(z.fx.3p.K(0),z.fx.V);k.2H(z.el.K(0),\'1n\')};if(z.1u==\'9M\'){z.el.1Y();z.fx.3p.B(\'W\',z.W+\'U\').B(\'Z\',\'9R\');z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,u(){z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'W\');z.ef.1L(z.W,z.fx.V.1q.hb)}),\'Z\');z.ef.1L(0,z.fx.V.1q.1C)}P{z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,u(){z.ef=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G,z.21),\'Z\');z.ef.1L(z.fx.V.1q.1C,0)}),\'W\');z.ef.1L(z.fx.V.1q.hb,z.W)}};k.fn.iR=u(H,4x,J,G){E q.1w(\'fv\',u(){q.6W=k(q).1p("14")||\'\';G=2g J==\'4V\'?J:G||S;J=2g J==\'u\'?J:S;D 9S=k(q).B(\'7i\');D 8I=q.31;7d(9S==\'cu\'&&8I){9S=k(8I).B(\'7i\');8I=8I.31}k(q).B(\'7i\',4x);if(2g q.6W==\'8T\')q.6W=q.6W["9X"];k(q).5w({\'7i\':9S},H,G,u(){k.2H(q,\'fv\');if(2g k(q).1p("14")==\'8T\'){k(q).1p("14")["9X"]="";k(q).1p("14")["9X"]=q.6W}P{k(q).1p("14",q.6W)}if(J)J.1D(q)})})};k.fn.23({iT:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'49\',\'6g\',G)})},iU:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'4j\',\'6g\',G)})},j1:u(H,J,G){E q.1w(\'1n\',u(){if(k.B(q,\'19\')==\'1o\'){12 k.fx.5m(q,H,J,\'4j\',\'6Z\',G)}P{12 k.fx.5m(q,H,J,\'4j\',\'6g\',G)}})},j2:u(H,J,G){E q.1w(\'1n\',u(){if(k.B(q,\'19\')==\'1o\'){12 k.fx.5m(q,H,J,\'49\',\'6Z\',G)}P{12 k.fx.5m(q,H,J,\'49\',\'6g\',G)}})},j9:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'49\',\'6Z\',G)})},ja:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.5m(q,H,J,\'4j\',\'6Z\',G)})}});k.fx.5m=u(e,H,J,2S,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;D 73=I;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;z.1u=1u;z.H=H;z.2i=k.1a.2o(e);z.V={};z.V.Y=z.el.B(\'Y\');z.V.19=z.el.B(\'19\');if(z.V.19==\'1o\'){5Y=z.el.B(\'3n\');z.el.1Y();73=1b}z.V.Q=z.el.B(\'Q\');z.V.O=z.el.B(\'O\');if(73){z.el.2G();z.el.B(\'3n\',5Y)}z.V.Z=z.2i.w+\'U\';z.V.W=z.2i.h+\'U\';z.V.2U=z.el.B(\'2U\');z.2i.Q=T(z.V.Q)||0;z.2i.O=T(z.V.O)||0;if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.el.B(\'2U\',\'2K\').B(\'W\',1u==\'6Z\'&&2S==\'49\'?1:z.2i.h+\'U\').B(\'Z\',1u==\'6Z\'&&2S==\'4j\'?1:z.2i.w+\'U\');z.21=u(){z.el.B(z.V);if(z.1u==\'6g\')z.el.2G();P z.el.1Y();k.2H(z.el.K(0),\'1n\')};3m(2S){1e\'49\':z.eh=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'W\');z.et=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'Q\');if(z.1u==\'6g\'){z.eh.1L(z.2i.h,0);z.et.1L(z.2i.Q,z.2i.Q+z.2i.h/2)}P{z.eh.1L(0,z.2i.h);z.et.1L(z.2i.Q+z.2i.h/2,z.2i.Q)}1r;1e\'4j\':z.eh=12 k.fx(z.el.K(0),k.H(H-15,z.G,J),\'Z\');z.et=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'O\');if(z.1u==\'6g\'){z.eh.1L(z.2i.w,0);z.et.1L(z.2i.O,z.2i.O+z.2i.w/2)}P{z.eh.1L(0,z.2i.w);z.et.1L(z.2i.O+z.2i.w/2,z.2i.O)}1r}};k.fn.bg=u(H,3V,J){E q.1w(\'1n\',u(){if(!k.4K(q)){k.2H(q,\'1n\');E I}D fx=12 k.fx.bg(q,H,3V,J);fx.bf()})};k.fx.bg=u(el,H,3V,J){D z=q;z.3V=3V;z.5y=1;z.el=el;z.H=H;z.J=J;k(z.el).1Y();z.bf=u(){z.5y++;z.e=12 k.fx(z.el,k.H(z.H,u(){z.ef=12 k.fx(z.el,k.H(z.H,u(){if(z.5y<=z.3V)z.bf();P{k.2H(z.el,\'1n\');if(z.J&&z.J.1K==2A){z.J.1D(z.el)}}}),\'1G\');z.ef.1L(0,1)}),\'1G\');z.e.1L(1,0)}};k.fn.23({jb:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.6G(q,H,1,2a,1b,J,\'fa\',G)})},jc:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.6G(q,H,2a,1,1b,J,\'b4\',G)})},j8:u(H,J,G){E q.1w(\'1n\',u(){D G=G||\'fl\';12 k.fx.6G(q,H,2a,f8,1b,J,\'6h\',G)})},6G:u(H,57,30,6H,J,G){E q.1w(\'1n\',u(){12 k.fx.6G(q,H,57,30,6H,J,\'6G\',G)})}});k.fx.6G=u(e,H,57,30,6H,J,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.57=T(57)||2a;z.30=T(30)||2a;z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;z.1m=k.H(H).1m;z.6H=6H||S;z.2i=k.1a.2o(e);z.V={Z:z.el.B(\'Z\'),W:z.el.B(\'W\'),4A:z.el.B(\'4A\')||\'2a%\',Y:z.el.B(\'Y\'),19:z.el.B(\'19\'),Q:z.el.B(\'Q\'),O:z.el.B(\'O\'),2U:z.el.B(\'2U\'),4S:z.el.B(\'4S\'),5O:z.el.B(\'5O\'),5Q:z.el.B(\'5Q\'),5b:z.el.B(\'5b\'),5M:z.el.B(\'5M\'),5U:z.el.B(\'5U\'),5n:z.el.B(\'5n\'),4X:z.el.B(\'4X\')};z.Z=T(z.V.Z)||e.4c||0;z.W=T(z.V.W)||e.5W||0;z.Q=T(z.V.Q)||0;z.O=T(z.V.O)||0;1q=[\'em\',\'U\',\'j7\',\'%\'];24(i in 1q){if(z.V.4A.3J(1q[i])>0){z.fg=1q[i];z.4A=2m(z.V.4A)}if(z.V.4S.3J(1q[i])>0){z.fc=1q[i];z.bw=2m(z.V.4S)||0}if(z.V.5O.3J(1q[i])>0){z.fe=1q[i];z.bc=2m(z.V.5O)||0}if(z.V.5Q.3J(1q[i])>0){z.fL=1q[i];z.bA=2m(z.V.5Q)||0}if(z.V.5b.3J(1q[i])>0){z.g8=1q[i];z.bt=2m(z.V.5b)||0}if(z.V.5M.3J(1q[i])>0){z.g4=1q[i];z.bx=2m(z.V.5M)||0}if(z.V.5U.3J(1q[i])>0){z.g9=1q[i];z.bv=2m(z.V.5U)||0}if(z.V.5n.3J(1q[i])>0){z.gc=1q[i];z.bj=2m(z.V.5n)||0}if(z.V.4X.3J(1q[i])>0){z.fK=1q[i];z.b7=2m(z.V.4X)||0}}if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.el.B(\'2U\',\'2K\');z.1u=1u;3m(z.1u){1e\'fa\':z.4b=z.Q+z.2i.h/2;z.5a=z.Q;z.4k=z.O+z.2i.w/2;z.59=z.O;1r;1e\'b4\':z.5a=z.Q+z.2i.h/2;z.4b=z.Q;z.59=z.O+z.2i.w/2;z.4k=z.O;1r;1e\'6h\':z.5a=z.Q-z.2i.h/4;z.4b=z.Q;z.59=z.O-z.2i.w/4;z.4k=z.O;1r}z.be=I;z.t=(12 7g).7z();z.4w=u(){5T(z.2I);z.2I=S};z.2D=u(){if(z.be==I){z.el.1Y();z.be=1b}D t=(12 7g).7z();D n=t-z.t;D p=n/z.1m;if(t>=z.1m+z.t){9T(u(){o=1;if(z.1u){t=z.5a;l=z.59;if(z.1u==\'6h\')o=0}z.bs(z.30,l,t,1b,o)},13);z.4w()}P{o=1;if(!k.G||!k.G[z.G]){s=((-18.5H(p*18.2Q)/2)+0.5)*(z.30-z.57)+z.57}P{s=k.G[z.G](p,n,z.57,(z.30-z.57),z.1m)}if(z.1u){if(!k.G||!k.G[z.G]){t=((-18.5H(p*18.2Q)/2)+0.5)*(z.5a-z.4b)+z.4b;l=((-18.5H(p*18.2Q)/2)+0.5)*(z.59-z.4k)+z.4k;if(z.1u==\'6h\')o=((-18.5H(p*18.2Q)/2)+0.5)*(-0.9Y)+0.9Y}P{t=k.G[z.G](p,n,z.4b,(z.5a-z.4b),z.1m);l=k.G[z.G](p,n,z.4k,(z.59-z.4k),z.1m);if(z.1u==\'6h\')o=k.G[z.G](p,n,0.9Y,-0.9Y,z.1m)}}z.bs(s,l,t,I,o)}};z.2I=6V(u(){z.2D()},13);z.bs=u(4q,O,Q,fM,1G){z.el.B(\'W\',z.W*4q/2a+\'U\').B(\'Z\',z.Z*4q/2a+\'U\').B(\'O\',O+\'U\').B(\'Q\',Q+\'U\').B(\'4A\',z.4A*4q/2a+z.fg);if(z.bw)z.el.B(\'4S\',z.bw*4q/2a+z.fc);if(z.bc)z.el.B(\'5O\',z.bc*4q/2a+z.fe);if(z.bA)z.el.B(\'5Q\',z.bA*4q/2a+z.fL);if(z.bt)z.el.B(\'5b\',z.bt*4q/2a+z.g8);if(z.bx)z.el.B(\'5M\',z.bx*4q/2a+z.g4);if(z.bv)z.el.B(\'5U\',z.bv*4q/2a+z.g9);if(z.bj)z.el.B(\'5n\',z.bj*4q/2a+z.gc);if(z.b7)z.el.B(\'4X\',z.b7*4q/2a+z.fK);if(z.1u==\'6h\'){if(1X.71)z.el.K(0).14.5E="8V(1G="+1G*2a+")";z.el.K(0).14.1G=1G}if(fM){if(z.6H){z.el.B(z.V)}if(z.1u==\'b4\'||z.1u==\'6h\'){z.el.B(\'19\',\'1o\');if(z.1u==\'6h\'){if(1X.71)z.el.K(0).14.5E="8V(1G="+2a+")";z.el.K(0).14.1G=1}}P z.el.B(\'19\',\'2B\');if(z.J)z.J.1D(z.el.K(0));k.2H(z.el.K(0),\'1n\')}}};k.fn.23({9U:u(H,1O,G){o=k.H(H);E q.1w(\'1n\',u(){12 k.fx.9U(q,o,1O,G)})},j6:u(H,1O,G){E q.1E(u(){k(\'a[@3h*="#"]\',q).5h(u(e){fW=q.3h.7C(\'#\');k(\'#\'+fW[1]).9U(H,1O,G);E I})})}});k.fx.9U=u(e,o,1O,G){D z=q;z.o=o;z.e=e;z.1O=/fT|gd/.48(1O)?1O:I;z.G=G;p=k.1a.3w(e);s=k.1a.6z();z.4w=u(){5T(z.2I);z.2I=S;k.2H(z.e,\'1n\')};z.t=(12 7g).7z();s.h=s.h>s.ih?(s.h-s.ih):s.h;s.w=s.w>s.iw?(s.w-s.iw):s.w;z.5a=p.y>s.h?s.h:p.y;z.59=p.x>s.w?s.w:p.x;z.4b=s.t;z.4k=s.l;z.2D=u(){D t=(12 7g).7z();D n=t-z.t;D p=n/z.o.1m;if(t>=z.o.1m+z.t){z.4w();9T(u(){z.d3(z.5a,z.59)},13)}P{if(!z.1O||z.1O==\'fT\'){if(!k.G||!k.G[z.G]){9V=((-18.5H(p*18.2Q)/2)+0.5)*(z.5a-z.4b)+z.4b}P{9V=k.G[z.G](p,n,z.4b,(z.5a-z.4b),z.o.1m)}}P{9V=z.4b}if(!z.1O||z.1O==\'gd\'){if(!k.G||!k.G[z.G]){9W=((-18.5H(p*18.2Q)/2)+0.5)*(z.59-z.4k)+z.4k}P{9W=k.G[z.G](p,n,z.4k,(z.59-z.4k),z.o.1m)}}P{9W=z.4k}z.d3(9V,9W)}};z.d3=u(t,l){1X.j4(l,t)};z.2I=6V(u(){z.2D()},13)};k.fn.cY=u(3V,J){E q.1w(\'1n\',u(){if(!k.4K(q)){k.2H(q,\'1n\');E I}D e=12 k.fx.cY(q,3V,J);e.cG()})};k.fx.cY=u(e,3V,J){D z=q;z.el=k(e);z.el.1Y();z.3V=T(3V)||3;z.J=J;z.5y=1;z.V={};z.V.Y=z.el.B(\'Y\');z.V.Q=T(z.el.B(\'Q\'))||0;z.V.O=T(z.el.B(\'O\'))||0;if(z.V.Y!=\'2s\'&&z.V.Y!=\'1P\'){z.el.B(\'Y\',\'2s\')}z.cG=u(){z.5y++;z.e=12 k.fx(z.el.K(0),{1m:60,21:u(){z.e=12 k.fx(z.el.K(0),{1m:60,21:u(){z.e=12 k.fx(e,{1m:60,21:u(){if(z.5y<=z.3V)z.cG();P{z.el.B(\'Y\',z.V.Y).B(\'Q\',z.V.Q+\'U\').B(\'O\',z.V.O+\'U\');k.2H(z.el.K(0),\'1n\');if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}}}},\'O\');z.e.1L(z.V.O-20,z.V.O)}},\'O\');z.e.1L(z.V.O+20,z.V.O-20)}},\'O\');z.e.1L(z.V.O,z.V.O+20)}};k.fn.23({fo:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4F\',\'in\',G)})},fq:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4F\',\'4l\',G)})},iY:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4F\',\'3R\',G)})},iX:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4r\',\'in\',G)})},jr:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4r\',\'4l\',G)})},jq:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'4r\',\'3R\',G)})},jp:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'O\',\'in\',G)})},jn:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'O\',\'4l\',G)})},jm:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'O\',\'3R\',G)})},iP:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'2L\',\'in\',G)})},ic:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'2L\',\'4l\',G)})},ib:u(H,J,G){E q.1w(\'1n\',u(){12 k.fx.1z(q,H,J,\'2L\',\'3R\',G)})}});k.fx.1z=u(e,H,J,2S,1u,G){if(!k.4K(e)){k.2H(e,\'1n\');E I}D z=q;z.el=k(e);z.G=2g J==\'4V\'?J:G||S;z.J=2g J==\'u\'?J:S;if(1u==\'3R\'){1u=z.el.B(\'19\')==\'1o\'?\'in\':\'4l\'}if(!e.4s)e.4s=z.el.B(\'19\');z.el.1Y();z.H=H;z.fx=k.fx.9P(e);z.1u=1u;z.2S=2S;z.21=u(){if(z.1u==\'4l\')z.el.B(\'3n\',\'2K\');k.fx.a0(z.fx.3p.K(0),z.fx.V);if(z.1u==\'in\'){z.el.B(\'19\',z.el.K(0).4s==\'1o\'?\'2B\':z.el.K(0).4s)}P{z.el.B(\'19\',\'1o\');z.el.B(\'3n\',\'dd\')}if(z.J&&z.J.1K==2A){z.J.1D(z.el.K(0))}k.2H(z.el.K(0),\'1n\')};3m(z.2S){1e\'4F\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'Q\');z.7v=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G),\'W\');if(z.1u==\'in\'){z.ef.1L(-z.fx.V.1q.hb,0);z.7v.1L(0,z.fx.V.1q.hb)}P{z.ef.1L(0,-z.fx.V.1q.hb);z.7v.1L(z.fx.V.1q.hb,0)}1r;1e\'4r\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'Q\');if(z.1u==\'in\'){z.ef.1L(z.fx.V.1q.hb,0)}P{z.ef.1L(0,z.fx.V.1q.hb)}1r;1e\'O\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'O\');z.7v=12 k.fx(z.fx.3p.K(0),k.H(z.H,z.G),\'Z\');if(z.1u==\'in\'){z.ef.1L(-z.fx.V.1q.1C,0);z.7v.1L(0,z.fx.V.1q.1C)}P{z.ef.1L(0,-z.fx.V.1q.1C);z.7v.1L(z.fx.V.1q.1C,0)}1r;1e\'2L\':z.ef=12 k.fx(z.el.K(0),k.H(z.H,z.G,z.21),\'O\');if(z.1u==\'in\'){z.ef.1L(z.fx.V.1q.1C,0)}P{z.ef.1L(0,z.fx.V.1q.1C)}1r}};k.3f=S;k.fn.ig=u(o){E q.1w(\'1n\',u(){12 k.fx.dG(q,o)})};k.fx.dG=u(e,o){if(k.3f==S){k(\'2e\',1h).1S(\'<22 id="3f">\');k.3f=k(\'#3f\')}k.3f.B(\'19\',\'2B\').B(\'Y\',\'1P\');D z=q;z.el=k(e);if(!o||!o.30){E}if(o.30.1K==b0&&1h.9e(o.30)){o.30=1h.9e(o.30)}P if(!o.30.dq){E}if(!o.1m){o.1m=g5}z.1m=o.1m;z.30=o.30;z.8r=o.3l;z.21=o.21;if(z.8r){k.3f.2R(z.8r)}z.a3=0;z.a2=0;if(k.dF){z.a3=(T(k.3f.B(\'5b\'))||0)+(T(k.3f.B(\'5O\'))||0)+(T(k.3f.B(\'4X\'))||0)+(T(k.3f.B(\'5U\'))||0);z.a2=(T(k.3f.B(\'4S\'))||0)+(T(k.3f.B(\'5Q\'))||0)+(T(k.3f.B(\'5M\'))||0)+(T(k.3f.B(\'5n\'))||0)}z.26=k.23(k.1a.3w(z.el.K(0)),k.1a.2o(z.el.K(0)));z.2T=k.23(k.1a.3w(z.30),k.1a.2o(z.30));z.26.1C-=z.a3;z.26.hb-=z.a2;z.2T.1C-=z.a3;z.2T.hb-=z.a2;z.J=o.21;k.3f.B(\'Z\',z.26.1C+\'U\').B(\'W\',z.26.hb+\'U\').B(\'Q\',z.26.y+\'U\').B(\'O\',z.26.x+\'U\').5w({Q:z.2T.y,O:z.2T.x,Z:z.2T.1C,W:z.2T.hb},z.1m,u(){if(z.8r)k.3f.4i(z.8r);k.3f.B(\'19\',\'1o\');if(z.21&&z.21.1K==2A){z.21.1D(z.el.K(0),[z.30])}k.2H(z.el.K(0),\'1n\')})};k.1v={M:{2E:10,ec:\'1Q/iJ.eZ\',e3:\'<1T 2J="1Q/6g.da" />\',eW:0.8,d8:\'iN a6\',dc:\'57\',3W:8J},jQ:I,jW:I,6j:S,8m:I,8k:I,d1:u(2k){if(!k.1v.8k||k.1v.8m)E;D 3K=2k.7L||2k.7K||-1;3m(3K){1e 35:if(k.1v.6j)k.1v.26(S,k(\'a[@4I=\'+k.1v.6j+\']:jJ\').K(0));1r;1e 36:if(k.1v.6j)k.1v.26(S,k(\'a[@4I=\'+k.1v.6j+\']:jL\').K(0));1r;1e 37:1e 8:1e 33:1e 80:1e kb:D 9p=k(\'#87\');if(9p.K(0).53!=S){9p.K(0).53.1D(9p.K(0))}1r;1e 38:1r;1e 39:1e 34:1e 32:1e gl:1e 78:D 9k=k(\'#88\');if(9k.K(0).53!=S){9k.K(0).53.1D(9k.K(0))}1r;1e 40:1r;1e 27:k.1v.au();1r}},7q:u(M){if(M)k.23(k.1v.M,M);if(1X.2k){k(\'2e\',1h).1J(\'6y\',k.1v.d1)}P{k(1h).1J(\'6y\',k.1v.d1)}k(\'a\').1E(u(){el=k(q);en=el.1p(\'4I\')||\'\';e9=el.1p(\'3h\')||\'\';ev=/\\.da|\\.gw|\\.8X|\\.eZ|\\.gn/g;if(e9.6c().d5(ev)!=S&&en.6c().3J(\'eU\')==0){el.1J(\'5h\',k.1v.26)}});if(k.3a.4t){3A=1h.3F(\'3A\');k(3A).1p({id:\'cN\',2J:\'ek:I;\',ej:\'cD\',ep:\'cD\'}).B({19:\'1o\',Y:\'1P\',Q:\'0\',O:\'0\',5E:\'9n:9w.9y.cC(1G=0)\'});k(\'2e\').1S(3A)}8n=1h.3F(\'22\');k(8n).1p(\'id\',\'cP\').B({Y:\'1P\',19:\'1o\',Q:\'0\',O:\'0\',1G:0}).1S(1h.8M(\' \')).1J(\'5h\',k.1v.au);6A=1h.3F(\'22\');k(6A).1p(\'id\',\'eK\').B({4X:k.1v.M.2E+\'U\'}).1S(1h.8M(\' \'));cE=1h.3F(\'22\');k(cE).1p(\'id\',\'dg\').B({4X:k.1v.M.2E+\'U\',5n:k.1v.M.2E+\'U\'}).1S(1h.8M(\' \'));cF=1h.3F(\'a\');k(cF).1p({id:\'gg\',3h:\'#\'}).B({Y:\'1P\',2L:k.1v.M.2E+\'U\',Q:\'0\'}).1S(k.1v.M.e3).1J(\'5h\',k.1v.au);7m=1h.3F(\'22\');k(7m).1p(\'id\',\'cM\').B({Y:\'2s\',cA:\'O\',6w:\'0 9F\',3I:1}).1S(6A).1S(cE).1S(cF);2b=1h.3F(\'1T\');2b.2J=k.1v.M.ec;k(2b).1p(\'id\',\'eM\').B({Y:\'1P\'});4G=1h.3F(\'a\');k(4G).1p({id:\'87\',3h:\'#\'}).B({Y:\'1P\',19:\'1o\',2U:\'2K\',ey:\'1o\'}).1S(1h.8M(\' \'));4M=1h.3F(\'a\');k(4M).1p({id:\'88\',3h:\'#\'}).B({Y:\'1P\',2U:\'2K\',ey:\'1o\'}).1S(1h.8M(\' \'));1Z=1h.3F(\'22\');k(1Z).1p(\'id\',\'eE\').B({19:\'1o\',Y:\'2s\',2U:\'2K\',cA:\'O\',6w:\'0 9F\',Q:\'0\',O:\'0\',3I:2}).1S([2b,4G,4M]);6F=1h.3F(\'22\');k(6F).1p(\'id\',\'ao\').B({19:\'1o\',Y:\'1P\',2U:\'2K\',Q:\'0\',O:\'0\',cA:\'cv\',7i:\'cu\',hC:\'0\'}).1S([1Z,7m]);k(\'2e\').1S(8n).1S(6F)},26:u(e,C){el=C?k(C):k(q);9t=el.1p(\'4I\');D 6B,4u,4G,4M;if(9t!=\'eU\'){k.1v.6j=9t;8Y=k(\'a[@4I=\'+9t+\']\');6B=8Y.1N();4u=8Y.cZ(C?C:q);4G=8Y.K(4u-1);4M=8Y.K(4u+1)}89=el.1p(\'3h\');6A=el.1p(\'4g\');3O=k.1a.6z();8n=k(\'#cP\');if(!k.1v.8k){k.1v.8k=1b;if(k.3a.4t){k(\'#cN\').B(\'W\',18.3r(3O.ih,3O.h)+\'U\').B(\'Z\',18.3r(3O.iw,3O.w)+\'U\').1Y()}8n.B(\'W\',18.3r(3O.ih,3O.h)+\'U\').B(\'Z\',18.3r(3O.iw,3O.w)+\'U\').1Y().fX(cO,k.1v.M.eW,u(){k.1v.cw(89,6A,3O,6B,4u,4G,4M)});k(\'#ao\').B(\'Z\',18.3r(3O.iw,3O.w)+\'U\')}P{k(\'#87\').K(0).53=S;k(\'#88\').K(0).53=S;k.1v.cw(89,6A,3O,6B,4u,4G,4M)}E I},cw:u(89,gP,3O,6B,4u,4G,4M){k(\'#cW\').bk();aX=k(\'#87\');aX.2G();aO=k(\'#88\');aO.2G();2b=k(\'#eM\');1Z=k(\'#eE\');6F=k(\'#ao\');7m=k(\'#cM\').B(\'3n\',\'2K\');k(\'#eK\').3x(6A);k.1v.8m=1b;if(6B)k(\'#dg\').3x(k.1v.M.d8+\' \'+(4u+1)+\' \'+k.1v.M.dc+\' \'+6B);if(4G){aX.K(0).53=u(){q.5B();k.1v.26(S,4G);E I}}if(4M){aO.K(0).53=u(){q.5B();k.1v.26(S,4M);E I}}2b.1Y();82=k.1a.2o(1Z.K(0));56=18.3r(82.1C,2b.K(0).Z+k.1v.M.2E*2);6f=18.3r(82.hb,2b.K(0).W+k.1v.M.2E*2);2b.B({O:(56-2b.K(0).Z)/2+\'U\',Q:(6f-2b.K(0).W)/2+\'U\'});1Z.B({Z:56+\'U\',W:6f+\'U\'}).1Y();dw=k.1a.bm();6F.B(\'Q\',3O.t+(dw.h/15)+\'U\');if(6F.B(\'19\')==\'1o\'){6F.1Y().7f(k.1v.M.3W)}6k=12 9s;k(6k).1p(\'id\',\'cW\').1J(\'hJ\',u(){56=6k.Z+k.1v.M.2E*2;6f=6k.W+k.1v.M.2E*2;2b.2G();1Z.5w({W:6f},82.hb!=6f?k.1v.M.3W:1,u(){1Z.5w({Z:56},82.1C!=56?k.1v.M.3W:1,u(){1Z.bG(6k);k(6k).B({Y:\'1P\',O:k.1v.M.2E+\'U\',Q:k.1v.M.2E+\'U\'}).7f(k.1v.M.3W,u(){db=k.1a.2o(7m.K(0));if(4G){aX.B({O:k.1v.M.2E+\'U\',Q:k.1v.M.2E+\'U\',Z:56/2-k.1v.M.2E*3+\'U\',W:6f-k.1v.M.2E*2+\'U\'}).1Y()}if(4M){aO.B({O:56/2+k.1v.M.2E*2+\'U\',Q:k.1v.M.2E+\'U\',Z:56/2-k.1v.M.2E*3+\'U\',W:6f-k.1v.M.2E*2+\'U\'}).1Y()}7m.B({Z:56+\'U\',Q:-db.hb+\'U\',3n:\'dd\'}).5w({Q:-1},k.1v.M.3W,u(){k.1v.8m=I})})})})});6k.2J=89},au:u(){k(\'#cW\').bk();k(\'#ao\').2G();k(\'#cM\').B(\'3n\',\'2K\');k(\'#cP\').fX(cO,0,u(){k(q).2G();if(k.3a.4t){k(\'#cN\').2G()}});k(\'#87\').K(0).53=S;k(\'#88\').K(0).53=S;k.1v.6j=S;k.1v.8k=I;k.1v.8m=I;E I}};k.R={1A:S,41:S,F:S,1s:S,1q:S,Y:S,9a:u(e){k.R.F=(q.d0)?q.d0:q;k.R.1s=k.1a.4a(e);k.R.1q={Z:T(k(k.R.F).B(\'Z\'))||0,W:T(k(k.R.F).B(\'W\'))||0};k.R.Y={Q:T(k(k.R.F).B(\'Q\'))||0,O:T(k(k.R.F).B(\'O\'))||0};k(1h).1J(\'3D\',k.R.cR).1J(\'5P\',k.R.cK);if(2g k.R.F.1k.g2===\'u\'){k.R.F.1k.g2.1D(k.R.F)}E I},cK:u(e){k(1h).3q(\'3D\',k.R.cR).3q(\'5P\',k.R.cK);if(2g k.R.F.1k.fN===\'u\'){k.R.F.1k.fN.1D(k.R.F)}k.R.F=S},cR:u(e){if(!k.R.F){E}1s=k.1a.4a(e);7p=k.R.Y.Q-k.R.1s.y+1s.y;7r=k.R.Y.O-k.R.1s.x+1s.x;7p=18.3r(18.3L(7p,k.R.F.1k.8g-k.R.1q.W),k.R.F.1k.7h);7r=18.3r(18.3L(7r,k.R.F.1k.8h-k.R.1q.Z),k.R.F.1k.70);if(2g k.R.F.1k.4m===\'u\'){D 8a=k.R.F.1k.4m.1D(k.R.F,[7r,7p]);if(2g 8a==\'hh\'&&8a.1g==2){7r=8a[0];7p=8a[1]}}k.R.F.14.Q=7p+\'U\';k.R.F.14.O=7r+\'U\';E I},26:u(e){k(1h).1J(\'3D\',k.R.8j).1J(\'5P\',k.R.8o);k.R.1A=q.1A;k.R.41=q.41;k.R.1s=k.1a.4a(e);k.R.1q={Z:T(k(q.1A).B(\'Z\'))||0,W:T(k(q.1A).B(\'W\'))||0};k.R.Y={Q:T(k(q.1A).B(\'Q\'))||0,O:T(k(q.1A).B(\'O\'))||0};if(k.R.1A.1k.4o){k.R.1A.1k.4o.1D(k.R.1A,[q])}E I},8o:u(){k(1h).3q(\'3D\',k.R.8j).3q(\'5P\',k.R.8o);if(k.R.1A.1k.3T){k.R.1A.1k.3T.1D(k.R.1A,[k.R.41])}k.R.1A=S;k.R.41=S},6i:u(dx,az){E 18.3L(18.3r(k.R.1q.Z+dx*az,k.R.1A.1k.av),k.R.1A.1k.6x)},6m:u(dy,az){E 18.3L(18.3r(k.R.1q.W+dy*az,k.R.1A.1k.8c),k.R.1A.1k.8b)},fb:u(W){E 18.3L(18.3r(W,k.R.1A.1k.8c),k.R.1A.1k.8b)},8j:u(e){if(k.R.1A==S){E}1s=k.1a.4a(e);dx=1s.x-k.R.1s.x;dy=1s.y-k.R.1s.y;1I={Z:k.R.1q.Z,W:k.R.1q.W};2z={Q:k.R.Y.Q,O:k.R.Y.O};3m(k.R.41){1e\'e\':1I.Z=k.R.6i(dx,1);1r;1e\'fj\':1I.Z=k.R.6i(dx,1);1I.W=k.R.6m(dy,1);1r;1e\'w\':1I.Z=k.R.6i(dx,-1);2z.O=k.R.Y.O-1I.Z+k.R.1q.Z;1r;1e\'5F\':1I.Z=k.R.6i(dx,-1);2z.O=k.R.Y.O-1I.Z+k.R.1q.Z;1I.W=k.R.6m(dy,1);1r;1e\'76\':1I.W=k.R.6m(dy,-1);2z.Q=k.R.Y.Q-1I.W+k.R.1q.W;1I.Z=k.R.6i(dx,-1);2z.O=k.R.Y.O-1I.Z+k.R.1q.Z;1r;1e\'n\':1I.W=k.R.6m(dy,-1);2z.Q=k.R.Y.Q-1I.W+k.R.1q.W;1r;1e\'at\':1I.W=k.R.6m(dy,-1);2z.Q=k.R.Y.Q-1I.W+k.R.1q.W;1I.Z=k.R.6i(dx,1);1r;1e\'s\':1I.W=k.R.6m(dy,1);1r}if(k.R.1A.1k.4v){if(k.R.41==\'n\'||k.R.41==\'s\')4p=1I.W*k.R.1A.1k.4v;P 4p=1I.Z;4W=k.R.fb(4p*k.R.1A.1k.4v);4p=4W/k.R.1A.1k.4v;3m(k.R.41){1e\'n\':1e\'76\':1e\'at\':2z.Q+=1I.W-4W;1r}3m(k.R.41){1e\'76\':1e\'w\':1e\'5F\':2z.O+=1I.Z-4p;1r}1I.W=4W;1I.Z=4p}if(2z.Qk.R.1A.1k.8g){1I.W=k.R.1A.1k.8g-2z.Q;if(k.R.1A.1k.4v){1I.Z=1I.W/k.R.1A.1k.4v}}if(2z.O+1I.Z>k.R.1A.1k.8h){1I.Z=k.R.1A.1k.8h-2z.O;if(k.R.1A.1k.4v){1I.W=1I.Z*k.R.1A.1k.4v}}D 6p=I;if(k.R.1A.1k.f7){6p=k.R.1A.1k.f7.1D(k.R.1A,[1I,2z]);if(6p){if(6p.1q){k.23(1I,6p.1q)}if(6p.Y){k.23(2z,6p.Y)}}}8d=k.R.1A.14;8d.O=2z.O+\'U\';8d.Q=2z.Q+\'U\';8d.Z=1I.Z+\'U\';8d.W=1I.W+\'U\';E I},2r:u(M){if(!M||!M.3Z||M.3Z.1K!=7M){E}E q.1E(u(){D el=q;el.1k=M;el.1k.av=M.av||10;el.1k.8c=M.8c||10;el.1k.6x=M.6x||6P;el.1k.8b=M.8b||6P;el.1k.7h=M.7h||-aC;el.1k.70=M.70||-aC;el.1k.8h=M.8h||6P;el.1k.8g=M.8g||6P;d6=k(el).B(\'Y\');if(!(d6==\'2s\'||d6==\'1P\')){el.14.Y=\'2s\'}fS=/n|at|e|fj|s|5F|w|76/g;24(i in el.1k.3Z){if(i.6c().d5(fS)!=S){if(el.1k.3Z[i].1K==b0){3v=k(el.1k.3Z[i]);if(3v.1N()>0){el.1k.3Z[i]=3v.K(0)}}if(el.1k.3Z[i].4Y){el.1k.3Z[i].1A=el;el.1k.3Z[i].41=i;k(el.1k.3Z[i]).1J(\'5v\',k.R.26)}}}if(el.1k.5S){if(2g el.1k.5S===\'4V\'){aV=k(el.1k.5S);if(aV.1N()>0){aV.1E(u(){q.d0=el});aV.1J(\'5v\',k.R.9a)}}P if(el.1k.5S==1b){k(q).1J(\'5v\',k.R.9a)}}})},4U:u(){E q.1E(u(){D el=q;24(i in el.1k.3Z){el.1k.3Z[i].1A=S;el.1k.3Z[i].41=S;k(el.1k.3Z[i]).3q(\'5v\',k.R.26)}if(el.1k.5S){if(2g el.1k.5S===\'4V\'){3v=k(el.1k.5S);if(3v.1N()>0){3v.3q(\'5v\',k.R.9a)}}P if(el.1k.5S==1b){k(q).3q(\'5v\',k.R.9a)}}el.1k=S})}};k.fn.23({hz:k.R.2r,hs:k.R.4U});k.2C=S;k.7n=I;k.3k=S;k.7o=[];k.9v=u(e){D 3K=e.7L||e.7K||-1;if(3K==17||3K==16){k.7n=1b}};k.9u=u(e){k.7n=I};k.dL=u(e){q.f.1s=k.1a.4a(e);q.f.1M=k.23(k.1a.3w(q),k.1a.2o(q));q.f.3e=k.1a.6z(q);q.f.1s.x-=q.f.1M.x;q.f.1s.y-=q.f.1M.y;k(q).1S(k.2C.K(0));if(q.f.hc)k.2C.2R(q.f.hc).B(\'19\',\'2B\');k.2C.B({19:\'2B\',Z:\'2P\',W:\'2P\'});if(q.f.o){k.2C.B(\'1G\',q.f.o)}k.3k=q;k.96=I;k.7o=[];q.f.el.1E(u(){q.1M={x:q.8t+(q.4Z&&!k.3a.7I?T(q.4Z.5b)||0:0)+(k.3k.3c||0),y:q.8G+(q.4Z&&!k.3a.7I?T(q.4Z.4S)||0:0)+(k.3k.3d||0),1C:q.4c,hb:q.5W};if(q.s==1b){if(k.7n==I){q.s=I;k(q).4i(k.3k.f.7j)}P{k.96=1b;k.7o[k.7o.1g]=k.1p(q,\'id\')}}});k.am.1D(q,[e]);k(1h).1J(\'3D\',k.am).1J(\'5P\',k.cX);E I};k.am=u(e){if(!k.3k)E;k.fd.1D(k.3k,[e])};k.fd=u(e){if(!k.3k)E;D 1s=k.1a.4a(e);D 3e=k.1a.6z(k.3k);1s.x+=3e.l-q.f.3e.l-q.f.1M.x;1s.y+=3e.t-q.f.3e.t-q.f.1M.y;D 93=18.3L(1s.x,q.f.1s.x);D 5F=18.3L(18.3S(1s.x-q.f.1s.x),18.3S(q.f.3e.w-93));D 99=18.3L(1s.y,q.f.1s.y);D 9g=18.3L(18.3S(1s.y-q.f.1s.y),18.3S(q.f.3e.h-99));if(q.3d>0&&1s.y-20q.3d+q.f.1M.h){D 3X=18.3L(q.f.3e.h-q.3d,10);q.3d+=3X;if(q.3d!=3e.t)9g+=3X}if(q.3c>0&&1s.x-20q.3c+q.f.1M.w){D 3X=18.3L(q.f.3e.w-q.3c,10);q.3c+=3X;if(q.3c!=3e.l)5F+=3X}k.2C.B({O:93+\'U\',Q:99+\'U\',Z:5F+\'U\',W:9g+\'U\'});k.2C.l=93+q.f.3e.l;k.2C.t=99+q.f.3e.t;k.2C.r=k.2C.l+5F;k.2C.b=k.2C.t+9g;k.96=I;q.f.el.1E(u(){aw=k.7o.3J(k.1p(q,\'id\'));if(!(q.1M.x>k.2C.r||(q.1M.x+q.1M.1C)k.2C.b||(q.1M.y+q.1M.hb)0){h+=\'&\'}h+=s+\'[]=\'+k.1p(q,\'id\');o[o.1g]=k.1p(q,\'id\')}})}E{7l:h,o:o}};k.fn.gZ=u(o){if(!k.2C){k(\'2e\',1h).1S(\'<22 id="2C">\').1J(\'7B\',k.9v).1J(\'6y\',k.9u);k.2C=k(\'#2C\');k.2C.B({Y:\'1P\',19:\'1o\'});if(1X.2k){k(\'2e\',1h).1J(\'7B\',k.9v).1J(\'6y\',k.9u)}P{k(1h).1J(\'7B\',k.9v).1J(\'6y\',k.9u)}}if(!o){o={}}E q.1E(u(){if(q.eP)E;q.eP=1b;q.f={a:o.3C,o:o.1G?2m(o.1G):I,7j:o.eS?o.eS:I,hc:o.58?o.58:I,98:o.98?o.98:I,9d:o.9d?o.9d:I};q.f.el=k(\'.\'+o.3C);k(q).1J(\'5v\',k.dL).B(\'Y\',\'2s\')})};k.3b={bM:1,eH:u(3t){D 3t=3t;E q.1E(u(){q.4z.6s.1E(u(ab){k.3b.5c(q,3t[ab])})})},K:u(){D 3t=[];q.1E(u(cL){if(q.bI){3t[cL]=[];D C=q;D 1q=k.1a.2o(q);q.4z.6s.1E(u(ab){D x=q.8t;D y=q.8G;92=T(x*2a/(1q.w-q.4c));91=T(y*2a/(1q.h-q.5W));3t[cL][ab]=[92||0,91||0,x||0,y||0]})}});E 3t},ct:u(C){C.A.fu=C.A.28.w-C.A.1B.1C;C.A.fw=C.A.28.h-C.A.1B.hb;if(C.9r.4z.bC){9Z=C.9r.4z.6s.K(C.bF+1);if(9Z){C.A.28.w=(T(k(9Z).B(\'O\'))||0)+C.A.1B.1C;C.A.28.h=(T(k(9Z).B(\'Q\'))||0)+C.A.1B.hb}9Q=C.9r.4z.6s.K(C.bF-1);if(9Q){D cU=T(k(9Q).B(\'O\'))||0;D cH=T(k(9Q).B(\'O\'))||0;C.A.28.x+=cU;C.A.28.y+=cH;C.A.28.w-=cU;C.A.28.h-=cH}}C.A.g7=C.A.28.w-C.A.1B.1C;C.A.eC=C.A.28.h-C.A.1B.hb;if(C.A.2O){C.A.gx=((C.A.28.w-C.A.1B.1C)/C.A.2O)||1;C.A.gy=((C.A.28.h-C.A.1B.hb)/C.A.2O)||1;C.A.fU=C.A.g7/C.A.2O;C.A.fH=C.A.eC/C.A.2O}C.A.28.dx=C.A.28.x-C.A.2c.x;C.A.28.dy=C.A.28.y-C.A.2c.y;k.11.1c.B(\'9b\',\'ad\')},3H:u(C,x,y){if(C.A.2O){fE=T(x/C.A.fU);92=fE*2a/C.A.2O;ft=T(y/C.A.fH);91=ft*2a/C.A.2O}P{92=T(x*2a/C.A.fu);91=T(y*2a/C.A.fw)}C.A.b3=[92||0,91||0,x||0,y||0];if(C.A.3H)C.A.3H.1D(C,C.A.b3)},eI:u(2k){3K=2k.7L||2k.7K||-1;3m(3K){1e 35:k.3b.5c(q.3U,[ae,ae]);1r;1e 36:k.3b.5c(q.3U,[-ae,-ae]);1r;1e 37:k.3b.5c(q.3U,[-q.3U.A.gx||-1,0]);1r;1e 38:k.3b.5c(q.3U,[0,-q.3U.A.gy||-1]);1r;1e 39:k.3b.5c(q.3U,[q.3U.A.gx||1,0]);1r;1e 40:k.11.5c(q.3U,[0,q.3U.A.gy||1]);1r}},5c:u(C,Y){if(!C.A){E}C.A.1B=k.23(k.1a.3w(C),k.1a.2o(C));C.A.2c={x:T(k.B(C,\'O\'))||0,y:T(k.B(C,\'Q\'))||0};C.A.4n=k.B(C,\'Y\');if(C.A.4n!=\'2s\'&&C.A.4n!=\'1P\'){C.14.Y=\'2s\'}k.11.c5(C);k.3b.ct(C);dx=T(Y[0])||0;dy=T(Y[1])||0;2v=C.A.2c.x+dx;2q=C.A.2c.y+dy;if(C.A.2O){3y=k.11.c7.1D(C,[2v,2q,dx,dy]);if(3y.1K==7M){dx=3y.dx;dy=3y.dy}2v=C.A.2c.x+dx;2q=C.A.2c.y+dy}3y=k.11.ce.1D(C,[2v,2q,dx,dy]);if(3y&&3y.1K==7M){dx=3y.dx;dy=3y.dy}2v=C.A.2c.x+dx;2q=C.A.2c.y+dy;if(C.A.5i&&(C.A.3H||C.A.2Z)){k.3b.3H(C,2v,2q)}2v=!C.A.1O||C.A.1O==\'4j\'?2v:C.A.2c.x||0;2q=!C.A.1O||C.A.1O==\'49\'?2q:C.A.2c.y||0;C.14.O=2v+\'U\';C.14.Q=2q+\'U\'},2r:u(o){E q.1E(u(){if(q.bI==1b||!o.3C||!k.1a||!k.11||!k.1x){E}5x=k(o.3C,q);if(5x.1N()==0){E}D 4N={2p:\'94\',5i:1b,3H:o.3H&&o.3H.1K==2A?o.3H:S,2Z:o.2Z&&o.2Z.1K==2A?o.2Z:S,3v:q,1G:o.1G||I};if(o.2O&&T(o.2O)){4N.2O=T(o.2O)||1;4N.2O=4N.2O>0?4N.2O:1}if(5x.1N()==1)5x.7t(4N);P{k(5x.K(0)).7t(4N);4N.3v=S;5x.7t(4N)}5x.7B(k.3b.eI);5x.1p(\'bM\',k.3b.bM++);q.bI=1b;q.4z={};q.4z.er=4N.er;q.4z.2O=4N.2O;q.4z.6s=5x;q.4z.bC=o.bC?1b:I;bZ=q;bZ.4z.6s.1E(u(2N){q.bF=2N;q.9r=bZ});if(o.3t&&o.3t.1K==7F){24(i=o.3t.1g-1;i>=0;i--){if(o.3t[i].1K==7F&&o.3t[i].1g==2){el=q.4z.6s.K(i);if(el.4Y){k.3b.5c(el,o.3t[i])}}}}})}};k.fn.23({hN:k.3b.2r,hS:k.3b.eH,hG:k.3b.K});k.2u={5I:[],eg:u(){q.5B();X=q.31;id=k.1p(X,\'id\');if(k.2u.5I[id]!=S){1X.5T(k.2u.5I[id])}1z=X.L.3u+1;if(X.L.1Q.1g<1z){1z=1}1Q=k(\'1T\',X.L.5u);X.L.3u=1z;if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}},dp:u(){q.5B();X=q.31;id=k.1p(X,\'id\');if(k.2u.5I[id]!=S){1X.5T(k.2u.5I[id])}1z=X.L.3u-1;1Q=k(\'1T\',X.L.5u);if(1z<1){1z=X.L.1Q.1g}X.L.3u=1z;if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}},2I:u(c){X=1h.9e(c);if(X.L.6o){1z=X.L.3u;7d(1z==X.L.3u){1z=1+T(18.6o()*X.L.1Q.1g)}}P{1z=X.L.3u+1;if(X.L.1Q.1g<1z){1z=1}}1Q=k(\'1T\',X.L.5u);X.L.3u=1z;if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}},go:u(o){D X;if(o&&o.1K==7M){if(o.2b){X=1h.9e(o.2b.X);5N=1X.hn.3h.7C("#");o.2b.6S=S;if(5N.1g==2){1z=T(5N[1]);1Y=5N[1].4E(1z,\'\');if(k.1p(X,\'id\')!=1Y){1z=1}}P{1z=1}}if(o.90){o.90.5B();X=o.90.31.31;id=k.1p(X,\'id\');if(k.2u.5I[id]!=S){1X.5T(k.2u.5I[id])}5N=o.90.3h.7C("#");1z=T(5N[1]);1Y=5N[1].4E(1z,\'\');if(k.1p(X,\'id\')!=1Y){1z=1}}if(X.L.1Q.1g<1z||1z<1){1z=1}X.L.3u=1z;52=k.1a.2o(X);dt=k.1a.aT(X);d9=k.1a.6U(X);if(X.L.3z){X.L.3z.o.B(\'19\',\'1o\')}if(X.L.3s){X.L.3s.o.B(\'19\',\'1o\')}if(X.L.2b){y=T(dt.t)+T(d9.t);if(X.L.1U){if(X.L.1U.5A==\'Q\'){y+=X.L.1U.4C.hb}P{52.h-=X.L.1U.4C.hb}}if(X.L.2x){if(X.L.2x&&X.L.2x.6Q==\'Q\'){y+=X.L.2x.4C.hb}P{52.h-=X.L.2x.4C.hb}}if(!X.L.c1){X.L.df=o.2b?o.2b.W:(T(X.L.2b.B(\'W\'))||0);X.L.c1=o.2b?o.2b.Z:(T(X.L.2b.B(\'Z\'))||0)}X.L.2b.B(\'Q\',y+(52.h-X.L.df)/2+\'U\');X.L.2b.B(\'O\',(52.1C-X.L.c1)/2+\'U\');X.L.2b.B(\'19\',\'2B\')}1Q=k(\'1T\',X.L.5u);if(1Q.1N()>0){1Q.7a(X.L.3W,k.2u.95)}P{aj=k(\'a\',X.L.1U.o).K(1z-1);k(aj).2R(X.L.1U.5R);D 1T=12 9s();1T.X=k.1p(X,\'id\');1T.1z=1z-1;1T.2J=X.L.1Q[X.L.3u-1].2J;if(1T.21){1T.6S=S;k.2u.19.1D(1T)}P{1T.6S=k.2u.19}if(X.L.2x){X.L.2x.o.3x(X.L.1Q[1z-1].6L)}}}},95:u(){X=q.31.31;X.L.5u.B(\'19\',\'1o\');if(X.L.1U.5R){aj=k(\'a\',X.L.1U.o).4i(X.L.1U.5R).K(X.L.3u-1);k(aj).2R(X.L.1U.5R)}D 1T=12 9s();1T.X=k.1p(X,\'id\');1T.1z=X.L.3u-1;1T.2J=X.L.1Q[X.L.3u-1].2J;if(1T.21){1T.6S=S;k.2u.19.1D(1T)}P{1T.6S=k.2u.19}if(X.L.2x){X.L.2x.o.3x(X.L.1Q[X.L.3u-1].6L)}},19:u(){X=1h.9e(q.X);if(X.L.3z){X.L.3z.o.B(\'19\',\'1o\')}if(X.L.3s){X.L.3s.o.B(\'19\',\'1o\')}52=k.1a.2o(X);y=0;if(X.L.1U){if(X.L.1U.5A==\'Q\'){y+=X.L.1U.4C.hb}P{52.h-=X.L.1U.4C.hb}}if(X.L.2x){if(X.L.2x&&X.L.2x.6Q==\'Q\'){y+=X.L.2x.4C.hb}P{52.h-=X.L.2x.4C.hb}}hg=k(\'.ca\',X);y=y+(52.h-q.W)/2;x=(52.1C-q.Z)/2;X.L.5u.B(\'Q\',y+\'U\').B(\'O\',x+\'U\').3x(\'<1T 2J="\'+q.2J+\'" />\');X.L.5u.7f(X.L.3W);3s=X.L.3u+1;if(3s>X.L.1Q.1g){3s=1}3z=X.L.3u-1;if(3z<1){3z=X.L.1Q.1g}X.L.3s.o.B(\'19\',\'2B\').B(\'Q\',y+\'U\').B(\'O\',x+2*q.Z/3+\'U\').B(\'Z\',q.Z/3+\'U\').B(\'W\',q.W+\'U\').1p(\'4g\',X.L.1Q[3s-1].6L);X.L.3s.o.K(0).3h=\'#\'+3s+k.1p(X,\'id\');X.L.3z.o.B(\'19\',\'2B\').B(\'Q\',y+\'U\').B(\'O\',x+\'U\').B(\'Z\',q.Z/3+\'U\').B(\'W\',q.W+\'U\').1p(\'4g\',X.L.1Q[3z-1].6L);X.L.3z.o.K(0).3h=\'#\'+3z+k.1p(X,\'id\')},2r:u(o){if(!o||!o.1Z||k.2u.5I[o.1Z])E;D 1Z=k(\'#\'+o.1Z);D el=1Z.K(0);if(el.14.Y!=\'1P\'&&el.14.Y!=\'2s\'){el.14.Y=\'2s\'}el.14.2U=\'2K\';if(1Z.1N()==0)E;el.L={};el.L.1Q=o.1Q?o.1Q:[];el.L.6o=o.6o&&o.6o==1b||I;97=el.f3(\'hL\');24(i=0;i<97.1g;i++){7Z=el.L.1Q.1g;el.L.1Q[7Z]={2J:97[i].2J,6L:97[i].4g||97[i].hD||\'\'}}if(el.L.1Q.1g==0){E}el.L.4n=k.23(k.1a.3w(el),k.1a.2o(el));el.L.b5=k.1a.aT(el);el.L.bu=k.1a.6U(el);t=T(el.L.b5.t)+T(el.L.bu.t);b=T(el.L.b5.b)+T(el.L.bu.b);k(\'1T\',el).bk();el.L.3W=o.3W?o.3W:g5;if(o.5A||o.9f||o.5R){el.L.1U={};1Z.1S(\'<22 6T="g1">\');el.L.1U.o=k(\'.g1\',el);if(o.9f){el.L.1U.9f=o.9f;el.L.1U.o.2R(o.9f)}if(o.5R){el.L.1U.5R=o.5R}el.L.1U.o.B(\'Y\',\'1P\').B(\'Z\',el.L.4n.w+\'U\');if(o.5A&&o.5A==\'Q\'){el.L.1U.5A=\'Q\';el.L.1U.o.B(\'Q\',t+\'U\')}P{el.L.1U.5A=\'4D\';el.L.1U.o.B(\'4D\',b+\'U\')}el.L.1U.aE=o.aE?o.aE:\' \';24(D i=0;i\'+7Z+\'\'+(7Z!=el.L.1Q.1g?el.L.1U.aE:\'\'))}k(\'a\',el.L.1U.o).1J(\'5h\',u(){k.2u.go({90:q})});el.L.1U.4C=k.1a.2o(el.L.1U.o.K(0))}if(o.6Q||o.9c){el.L.2x={};1Z.1S(\'<22 6T="dn">&7k;\');el.L.2x.o=k(\'.dn\',el);if(o.9c){el.L.2x.9c=o.9c;el.L.2x.o.2R(o.9c)}el.L.2x.o.B(\'Y\',\'1P\').B(\'Z\',el.L.4n.w+\'U\');if(o.6Q&&o.6Q==\'Q\'){el.L.2x.6Q=\'Q\';el.L.2x.o.B(\'Q\',(el.L.1U&&el.L.1U.5A==\'Q\'?el.L.1U.4C.hb+t:t)+\'U\')}P{el.L.2x.6Q=\'4D\';el.L.2x.o.B(\'4D\',(el.L.1U&&el.L.1U.5A==\'4D\'?el.L.1U.4C.hb+b:b)+\'U\')}el.L.2x.4C=k.1a.2o(el.L.2x.o.K(0))}if(o.9D){el.L.3s={9D:o.9D};1Z.1S(\'&7k;\');el.L.3s.o=k(\'.eY\',el);el.L.3s.o.B(\'Y\',\'1P\').B(\'19\',\'1o\').B(\'2U\',\'2K\').B(\'4A\',\'eR\').2R(el.L.3s.9D);el.L.3s.o.1J(\'5h\',k.2u.eg)}if(o.9o){el.L.3z={9o:o.9o};1Z.1S(\'&7k;\');el.L.3z.o=k(\'.ee\',el);el.L.3z.o.B(\'Y\',\'1P\').B(\'19\',\'1o\').B(\'2U\',\'2K\').B(\'4A\',\'eR\').2R(el.L.3z.9o);el.L.3z.o.1J(\'5h\',k.2u.dp)}1Z.bG(\'<22 6T="ca">\');el.L.5u=k(\'.ca\',el);el.L.5u.B(\'Y\',\'1P\').B(\'Q\',\'2P\').B(\'O\',\'2P\').B(\'19\',\'1o\');if(o.2b){1Z.bG(\'<22 6T="dW" 14="19: 1o;"><1T 2J="\'+o.2b+\'" />\');el.L.2b=k(\'.dW\',el);el.L.2b.B(\'Y\',\'1P\');D 1T=12 9s();1T.X=o.1Z;1T.2J=o.2b;if(1T.21){1T.6S=S;k.2u.go({2b:1T})}P{1T.6S=u(){k.2u.go({2b:q})}}}P{k.2u.go({1Z:el})}if(o.cS){fi=T(o.cS)*aC}k.2u.5I[o.1Z]=o.cS?1X.6V(\'k.2u.2I(\\\'\'+o.1Z+\'\\\')\',fi):S}};k.X=k.2u.2r;k.1t={7s:[],5L:{},1c:I,7u:S,26:u(){if(k.11.F==S){E}D 4O,3G,c,cs;k.1t.1c.K(0).3l=k.11.F.A.6R;4O=k.1t.1c.K(0).14;4O.19=\'2B\';k.1t.1c.1B=k.23(k.1a.3w(k.1t.1c.K(0)),k.1a.2o(k.1t.1c.K(0)));4O.Z=k.11.F.A.1B.1C+\'U\';4O.W=k.11.F.A.1B.hb+\'U\';3G=k.1a.cy(k.11.F);4O.5K=3G.t;4O.5z=3G.r;4O.5k=3G.b;4O.5j=3G.l;if(k.11.F.A.46==1b){c=k.11.F.fI(1b);cs=c.14;cs.5K=\'2P\';cs.5z=\'2P\';cs.5k=\'2P\';cs.5j=\'2P\';cs.19=\'2B\';k.1t.1c.5o().1S(c)}k(k.11.F).f5(k.1t.1c.K(0));k.11.F.14.19=\'1o\'},fC:u(e){if(!e.A.44&&k.1x.5r.cQ){if(e.A.3T)e.A.3T.1D(F);k(e).B(\'Y\',e.A.cz||e.A.4n);k(e).aS();k(k.1x.5r).f6(e)}k.1t.1c.4i(e.A.6R).3x(\'&7k;\');k.1t.7u=S;D 4O=k.1t.1c.K(0).14;4O.19=\'1o\';k.1t.1c.f5(e);if(e.A.fx>0){k(e).7f(e.A.fx)}k(\'2e\').1S(k.1t.1c.K(0));D 86=[];D 8q=I;24(D i=0;i0){8q(86)}},al:u(e,o){if(!k.11.F)E;D 6e=I;D i=0;if(e.1i.el.1N()>0){24(i=e.1i.el.1N();i>0;i--){if(e.1i.el.K(i-1)!=k.11.F){if(!e.5V.b2){if((e.1i.el.K(i-1).1M.y+e.1i.el.K(i-1).1M.hb/2)>k.11.F.A.2q){6e=e.1i.el.K(i-1)}P{1r}}P{if((e.1i.el.K(i-1).1M.x+e.1i.el.K(i-1).1M.1C/2)>k.11.F.A.2v&&(e.1i.el.K(i-1).1M.y+e.1i.el.K(i-1).1M.hb/2)>k.11.F.A.2q){6e=e.1i.el.K(i-1)}}}}}if(6e&&k.1t.7u!=6e){k.1t.7u=6e;k(6e).h5(k.1t.1c.K(0))}P if(!6e&&(k.1t.7u!=S||k.1t.1c.K(0).31!=e)){k.1t.7u=S;k(e).1S(k.1t.1c.K(0))}k.1t.1c.K(0).14.19=\'2B\'},cT:u(e){if(k.11.F==S){E}e.1i.el.1E(u(){q.1M=k.23(k.1a.74(q),k.1a.7G(q))})},8x:u(s){D i;D h=\'\';D o={};if(s){if(k.1t.5L[s]){o[s]=[];k(\'#\'+s+\' .\'+k.1t.5L[s]).1E(u(){if(h.1g>0){h+=\'&\'}h+=s+\'[]=\'+k.1p(q,\'id\');o[s][o[s].1g]=k.1p(q,\'id\')})}P{24(a in s){if(k.1t.5L[s[a]]){o[s[a]]=[];k(\'#\'+s[a]+\' .\'+k.1t.5L[s[a]]).1E(u(){if(h.1g>0){h+=\'&\'}h+=s[a]+\'[]=\'+k.1p(q,\'id\');o[s[a]][o[s[a]].1g]=k.1p(q,\'id\')})}}}}P{24(i in k.1t.5L){o[i]=[];k(\'#\'+i+\' .\'+k.1t.5L[i]).1E(u(){if(h.1g>0){h+=\'&\'}h+=i+\'[]=\'+k.1p(q,\'id\');o[i][o[i].1g]=k.1p(q,\'id\')})}}E{7l:h,o:o}},fF:u(e){if(!e.dq){E}E q.1E(u(){if(!q.5V||!k(e).is(\'.\'+q.5V.3C))k(e).2R(q.5V.3C);k(e).7t(q.5V.A)})},4U:u(){E q.1E(u(){k(\'.\'+q.5V.3C).aS();k(q).dR();q.5V=S;q.fm=S})},2r:u(o){if(o.3C&&k.1a&&k.11&&k.1x){if(!k.1t.1c){k(\'2e\',1h).1S(\'<22 id="e5">&7k;\');k.1t.1c=k(\'#e5\');k.1t.1c.K(0).14.19=\'1o\'}q.do({3C:o.3C,9J:o.9J?o.9J:I,a5:o.a5?o.a5:I,58:o.58?o.58:I,7x:o.7x||o.dC,7y:o.7y||o.fO,cQ:1b,2Z:o.2Z||o.ia,fx:o.fx?o.fx:I,46:o.46?1b:I,6I:o.6I?o.6I:\'cV\'});E q.1E(u(){D A={6N:o.6N?1b:I,ff:6P,1G:o.1G?2m(o.1G):I,6R:o.58?o.58:I,fx:o.fx?o.fx:I,44:1b,46:o.46?1b:I,3v:o.3v?o.3v:S,2p:o.2p?o.2p:S,4o:o.4o&&o.4o.1K==2A?o.4o:I,4m:o.4m&&o.4m.1K==2A?o.4m:I,3T:o.3T&&o.3T.1K==2A?o.3T:I,1O:/49|4j/.48(o.1O)?o.1O:I,6M:o.6M?T(o.6M)||0:I,2V:o.2V?o.2V:I};k(\'.\'+o.3C,q).7t(A);q.fm=1b;q.5V={3C:o.3C,6N:o.6N?1b:I,ff:6P,1G:o.1G?2m(o.1G):I,6R:o.58?o.58:I,fx:o.fx?o.fx:I,44:1b,46:o.46?1b:I,3v:o.3v?o.3v:S,2p:o.2p?o.2p:S,b2:o.b2?1b:I,A:A}})}}};k.fn.23({j3:k.1t.2r,f6:k.1t.fF,iS:k.1t.4U});k.iZ=k.1t.8x;k.2t={6O:S,7b:I,9m:S,6K:u(e){k.2t.7b=1b;k.2t.1Y(e,q,1b)},cq:u(e){if(k.2t.6O!=q)E;k.2t.7b=I;k.2t.2G(e,q)},1Y:u(e,el,7b){if(k.2t.6O!=S)E;if(!el){el=q}k.2t.6O=el;1M=k.23(k.1a.3w(el),k.1a.2o(el));8u=k(el);4g=8u.1p(\'4g\');3h=8u.1p(\'3h\');if(4g){k.2t.9m=4g;8u.1p(\'4g\',\'\');k(\'#eT\').3x(4g);if(3h)k(\'#bL\').3x(3h.4E(\'jh://\',\'\'));P k(\'#bL\').3x(\'\');1c=k(\'#8z\');if(el.4H.3l){1c.K(0).3l=el.4H.3l}P{1c.K(0).3l=\'\'}bo=k.1a.2o(1c.K(0));ga=7b&&el.4H.Y==\'bO\'?\'4D\':el.4H.Y;3m(ga){1e\'Q\':2q=1M.y-bo.hb;2v=1M.x;1r;1e\'O\':2q=1M.y;2v=1M.x-bo.1C;1r;1e\'2L\':2q=1M.y;2v=1M.x+1M.1C;1r;1e\'bO\':k(\'2e\').1J(\'3D\',k.2t.3D);1s=k.1a.4a(e);2q=1s.y+15;2v=1s.x+15;1r;ad:2q=1M.y+1M.hb;2v=1M.x;1r}1c.B({Q:2q+\'U\',O:2v+\'U\'});if(el.4H.54==I){1c.1Y()}P{1c.7f(el.4H.54)}if(el.4H.2Y)el.4H.2Y.1D(el);8u.1J(\'8B\',k.2t.2G).1J(\'5B\',k.2t.cq)}},3D:u(e){if(k.2t.6O==S){k(\'2e\').3q(\'3D\',k.2t.3D);E}1s=k.1a.4a(e);k(\'#8z\').B({Q:1s.y+15+\'U\',O:1s.x+15+\'U\'})},2G:u(e,el){if(!el){el=q}if(k.2t.7b!=1b&&k.2t.6O==el){k.2t.6O=S;k(\'#8z\').7a(1);k(el).1p(\'4g\',k.2t.9m).3q(\'8B\',k.2t.2G).3q(\'5B\',k.2t.cq);if(el.4H.3i)el.4H.3i.1D(el);k.2t.9m=S}},2r:u(M){if(!k.2t.1c){k(\'2e\').1S(\'<22 id="8z"><22 id="eT"><22 id="bL">\');k(\'#8z\').B({Y:\'1P\',3I:6P,19:\'1o\'});k.2t.1c=1b}E q.1E(u(){if(k.1p(q,\'4g\')){q.4H={Y:/Q|4D|O|2L|bO/.48(M.Y)?M.Y:\'4D\',3l:M.3l?M.3l:I,54:M.54?M.54:I,2Y:M.2Y&&M.2Y.1K==2A?M.2Y:I,3i:M.3i&&M.3i.1K==2A?M.3i:I};D el=k(q);el.1J(\'9z\',k.2t.1Y);el.1J(\'6K\',k.2t.6K)}})}};k.fn.hO=k.2t.2r;k.84={bq:u(e){3K=e.7L||e.7K||-1;if(3K==9){if(1X.2k){1X.2k.bT=1b;1X.2k.c0=I}P{e.aP();e.aW()}if(q.b1){1h.6J.dZ().3g="\\t";q.dV=u(){q.6K();q.dV=S}}P if(q.aF){26=q.5q;2T=q.dN;q.2y=q.2y.hd(0,26)+"\\t"+q.2y.h8(2T);q.aF(26+1,26+1);q.6K()}E I}},4U:u(){E q.1E(u(){if(q.7P&&q.7P==1b){k(q).3q(\'7B\',k.84.bq);q.7P=I}})},2r:u(){E q.1E(u(){if(q.4Y==\'cf\'&&(!q.7P||q.7P==I)){k(q).1J(\'7B\',k.84.bq);q.7P=1b}})}};k.fn.23({j5:k.84.2r,hH:k.84.4U});k.1a={3w:u(e){D x=0;D y=0;D es=e.14;D bP=I;if(k(e).B(\'19\')==\'1o\'){D 5Y=es.3n;D 9q=es.Y;bP=1b;es.3n=\'2K\';es.19=\'2B\';es.Y=\'1P\'}D el=e;7d(el){x+=el.8t+(el.4Z&&!k.3a.7I?T(el.4Z.5b)||0:0);y+=el.8G+(el.4Z&&!k.3a.7I?T(el.4Z.4S)||0:0);el=el.dJ}el=e;7d(el&&el.4Y&&el.4Y.6c()!=\'2e\'){x-=el.3c||0;y-=el.3d||0;el=el.31}if(bP==1b){es.19=\'1o\';es.Y=9q;es.3n=5Y}E{x:x,y:y}},7G:u(el){D x=0,y=0;7d(el){x+=el.8t||0;y+=el.8G||0;el=el.dJ}E{x:x,y:y}},2o:u(e){D w=k.B(e,\'Z\');D h=k.B(e,\'W\');D 1C=0;D hb=0;D es=e.14;if(k(e).B(\'19\')!=\'1o\'){1C=e.4c;hb=e.5W}P{D 5Y=es.3n;D 9q=es.Y;es.3n=\'2K\';es.19=\'2B\';es.Y=\'1P\';1C=e.4c;hb=e.5W;es.19=\'1o\';es.Y=9q;es.3n=5Y}E{w:w,h:h,1C:1C,hb:hb}},74:u(el){E{1C:el.4c||0,hb:el.5W||0}},bm:u(e){D h,w,de;if(e){w=e.8W;h=e.8O}P{de=1h.5d;w=1X.d4||aa.d4||(de&&de.8W)||1h.2e.8W;h=1X.cB||aa.cB||(de&&de.8O)||1h.2e.8O}E{w:w,h:h}},6z:u(e){D t=0,l=0,w=0,h=0,iw=0,ih=0;if(e&&e.9N.6c()!=\'2e\'){t=e.3d;l=e.3c;w=e.d7;h=e.d2;iw=0;ih=0}P{if(1h.5d){t=1h.5d.3d;l=1h.5d.3c;w=1h.5d.d7;h=1h.5d.d2}P if(1h.2e){t=1h.2e.3d;l=1h.2e.3c;w=1h.2e.d7;h=1h.2e.d2}iw=aa.d4||1h.5d.8W||1h.2e.8W||0;ih=aa.cB||1h.5d.8O||1h.2e.8O||0}E{t:t,l:l,w:w,h:h,iw:iw,ih:ih}},cy:u(e,7N){D el=k(e);D t=el.B(\'5K\')||\'\';D r=el.B(\'5z\')||\'\';D b=el.B(\'5k\')||\'\';D l=el.B(\'5j\')||\'\';if(7N)E{t:T(t)||0,r:T(r)||0,b:T(b)||0,l:T(l)};P E{t:t,r:r,b:b,l:l}},aT:u(e,7N){D el=k(e);D t=el.B(\'5M\')||\'\';D r=el.B(\'5U\')||\'\';D b=el.B(\'5n\')||\'\';D l=el.B(\'4X\')||\'\';if(7N)E{t:T(t)||0,r:T(r)||0,b:T(b)||0,l:T(l)};P E{t:t,r:r,b:b,l:l}},6U:u(e,7N){D el=k(e);D t=el.B(\'4S\')||\'\';D r=el.B(\'5O\')||\'\';D b=el.B(\'5Q\')||\'\';D l=el.B(\'5b\')||\'\';if(7N)E{t:T(t)||0,r:T(r)||0,b:T(b)||0,l:T(l)||0};P E{t:t,r:r,b:b,l:l}},4a:u(2k){D x=2k.hT||(2k.gM+(1h.5d.3c||1h.2e.3c))||0;D y=2k.ki||(2k.iQ+(1h.5d.3d||1h.2e.3d))||0;E{x:x,y:y}},cI:u(4R,cx){cx(4R);4R=4R.7c;7d(4R){k.1a.cI(4R,cx);4R=4R.hQ}},h7:u(4R){k.1a.cI(4R,u(el){24(D 1p in el){if(2g el[1p]===\'u\'){el[1p]=S}}})},hV:u(el,1O){D 5l=k.1a.6z();D b6=k.1a.2o(el);if(!1O||1O==\'49\')k(el).B({Q:5l.t+((18.3r(5l.h,5l.ih)-5l.t-b6.hb)/2)+\'U\'});if(!1O||1O==\'4j\')k(el).B({O:5l.l+((18.3r(5l.w,5l.iw)-5l.l-b6.1C)/2)+\'U\'})},hW:u(el,dk){D 1Q=k(\'1T[@2J*="8X"]\',el||1h),8X;1Q.1E(u(){8X=q.2J;q.2J=dk;q.14.5E="9n:9w.9y.hE(2J=\'"+8X+"\')"})}};[].3J||(7F.hF.3J=u(v,n){n=(n==S)?0:n;D m=q.1g;24(D i=n;i= 0 ? '&' : '?') + q; options.data = null; // data is null for 'get' } else options.data = q; // data is the query string for 'post' var $form = this, callbacks = []; if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); // perform a load on the target only if dataType is not provided if (!options.dataType && options.target) { var oldSuccess = options.success || function(){}; callbacks.push(function(data, status) { jQuery(options.target).attr("innerHTML", data).evalScripts().each(oldSuccess, [data, status]); }); } else if (options.success) callbacks.push(options.success); options.success = function(data, status) { for (var i=0, max=callbacks.length; i < max; i++) callbacks[i](data, status); }; jQuery.ajax(options); return this; }; /** * ajaxForm() provides a mechanism for fully automating form submission. * * The advantages of using this method instead of ajaxSubmit() are: * * 1: This method will include coordinates for elements (if the element * is used to submit the form). * 2. This method will include the submit element's name/value data (for the element that was * used to submit the form). * 3. This method binds the submit() method to the form for you. * * Note that for accurate x/y coordinates of image submit elements in all browsers * you need to also use the "dimensions" plugin (this method will auto-detect its presence). * * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely * passes the options argument along after properly binding events for submit elements and * the form itself. See ajaxSubmit for a full description of the options argument. * * * @example * var options = { * target: '#myTargetDiv' * }; * $('#myForm').ajaxSForm(options); * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response * when the form is submitted. * * * @example * var options = { * success: function(responseText) { * alert(responseText); * } * }; * $('#myForm').ajaxSubmit(options); * @desc Bind form's submit event so that server response is alerted after the form is submitted. * * * @example * var options = { * beforeSubmit: function(formArray, jqForm) { * if (formArray.length == 0) { * alert('Please enter data.'); * return false; * } * } * }; * $('#myForm').ajaxSubmit(options); * @desc Bind form's submit event so that pre-submit callback is invoked before the form * is submitted. * * * @name ajaxForm * @param options object literal containing options which control the form submission process * @return jQuery * @cat Plugins/Form * @type jQuery * @see ajaxSubmit * @author jQuery Community */ jQuery.fn.ajaxForm = function(options) { return this.each(function() { jQuery("input:submit,input:image,button:submit", this).click(function(ev) { var $form = this.form; $form.clk = this; if (this.type == 'image') { if (ev.offsetX != undefined) { $form.clk_x = ev.offsetX; $form.clk_y = ev.offsetY; } else if (typeof jQuery.fn.offset == 'function') { // try to use dimensions plugin var offset = jQuery(this).offset(); $form.clk_x = ev.pageX - offset.left; $form.clk_y = ev.pageY - offset.top; } else { $form.clk_x = ev.pageX - this.offsetLeft; $form.clk_y = ev.pageY - this.offsetTop; } } // clear form vars setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10); }) }).submit(function(e) { jQuery(this).ajaxSubmit(options); return false; }); }; /** * formToArray() gathers form element data into an array of objects that can * be passed to any of the following ajax functions: $.get, $.post, or load. * Each object in the array has both a 'name' and 'value' property. An example of * an array for a simple login form might be: * * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] * * It is this array that is passed to pre-submit callback functions provided to the * ajaxSubmit() and ajaxForm() methods. * * The semantic argument can be used to force form serialization in semantic order. * This is normally true anyway, unless the form contains input elements of type='image'. * If your form must be submitted with name/value pairs in semantic order and your form * contains an input of type='image" then pass true for this arg, otherwise pass false * (or nothing) to avoid the overhead for this logic. * * @example var data = $("#myForm").formToArray(); * $.post( "myscript.cgi", data ); * @desc Collect all the data from a form and submit it to the server. * * @name formToArray * @param semantic true if serialization must maintain strict semantic ordering of elements (slower) * @type Array * @cat Plugins/Form * @see ajaxForm * @see ajaxSubmit * @author jQuery Community */ jQuery.fn.formToArray = function(semantic) { var a = []; if (this.length == 0) return a; var form = this[0]; var els = semantic ? form.getElementsByTagName('*') : form.elements; if (!els) return a; for(var i=0, max=els.length; i < max; i++) { var el = els[i]; var n = el.name; if (!n) continue; if (semantic && form.clk && el.type == "image") { // handle image inputs on the fly when semantic == true if(!el.disabled && form.clk == el) a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); continue; } var v = jQuery.fieldValue(el, true); if (v === null) continue; if (v.constructor == Array) { for(var j=0, jmax=v.length; j < jmax; j++) a.push({name: n, value: v[j]}); } else a.push({name: n, value: v}); } if (!semantic && form.clk) { // input type=='image' are not found in elements array! handle them here var inputs = form.getElementsByTagName("input"); for(var i=0, max=inputs.length; i < max; i++) { var input = inputs[i]; var n = input.name; if(n && !input.disabled && input.type == "image" && form.clk == input) a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y}); } } return a; }; /** * Serializes form data into a 'submittable' string. This method will return a string * in the format: name1=value1&name2=value2 * * The semantic argument can be used to force form serialization in semantic order. * If your form must be submitted with name/value pairs in semantic order then pass * true for this arg, otherwise pass false (or nothing) to avoid the overhead for * this logic (which can be significant for very large forms). * * @example var data = $("#myForm").formSerialize(); * $.ajax('POST', "myscript.cgi", data); * @desc Collect all the data from a form into a single string * * @name formSerialize * @param semantic true if serialization must maintain strict semantic ordering of elements (slower) * @type String * @cat Plugins/Form * @see formToArray * @author jQuery Community */ jQuery.fn.formSerialize = function(semantic) { //hand off to jQuery.param for proper encoding return jQuery.param(this.formToArray(semantic)); }; /** * Serializes all field elements in the jQuery object into a query string. * This method will return a string in the format: name1=value1&name2=value2 * * The successful argument controls whether or not serialization is limited to * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). * The default value of the successful argument is true. * * @example var data = $("input").formSerialize(); * @desc Collect the data from all successful input elements into a query string * * @example var data = $(":radio").formSerialize(); * @desc Collect the data from all successful radio input elements into a query string * * @example var data = $("#myForm :checkbox").formSerialize(); * @desc Collect the data from all successful checkbox input elements in myForm into a query string * * @example var data = $("#myForm :checkbox").formSerialize(false); * @desc Collect the data from all checkbox elements in myForm (even the unchecked ones) into a query string * * @example var data = $(":input").formSerialize(); * @desc Collect the data from all successful input, select, textarea and button elements into a query string * * @name fieldSerialize * @param successful true if only successful controls should be serialized (default is true) * @type String * @cat Plugins/Form */ jQuery.fn.fieldSerialize = function(successful) { var a = []; this.each(function() { var n = this.name; if (!n) return; var v = jQuery.fieldValue(this, successful); if (v && v.constructor == Array) { for (var i=0,max=v.length; i < max; i++) a.push({name: n, value: v[i]}); } else if (v !== null && typeof v != 'undefined') a.push({name: this.name, value: v}); }); //hand off to jQuery.param for proper encoding return jQuery.param(a); }; /** * Returns the value of the field element in the jQuery object. If there is more than one field element * in the jQuery object the value of the first successful one is returned. * * The successful argument controls whether or not the field element must be 'successful' * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). * The default value of the successful argument is true. If this value is false then * the value of the first field element in the jQuery object is returned. * * Note: If no valid value can be determined the return value will be undifined. * * Note: The fieldValue returned for a select-multiple element or for a checkbox input will * always be an array if it is not undefined. * * * @example var data = $("#myPasswordElement").formValue(); * @desc Gets the current value of the myPasswordElement element * * @example var data = $("#myForm :input").formValue(); * @desc Get the value of the first successful control in the jQuery object. * * @example var data = $("#myForm :checkbox").formValue(); * @desc Get the array of values for the first set of successful checkbox controls in the jQuery object. * * @example var data = $("#mySingleSelect").formValue(); * @desc Get the value of the select control * * @example var data = $("#myMultiSelect").formValue(); * @desc Get the array of selected values for the select-multiple control * * @name fieldValue * @param Boolean successful true if value returned must be for a successful controls (default is true) * @type String or Array * @cat Plugins/Form */ jQuery.fn.fieldValue = function(successful) { var cbVal, cbName; // loop until we find a value for (var i=0, max=this.length; i < max; i++) { var el = this[i]; var v = jQuery.fieldValue(el, successful); if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) continue; // for checkboxes, consider multiple elements, for everything else just return first valid value if (el.type != 'checkbox') return v; cbName = cbName || el.name; if (cbName != el.name) // return if we hit a checkbox with a different name return cbVal; cbVal = cbVal || []; cbVal.push(v); } return cbVal; }; /** * Returns the value of the field element. * * The successful argument controls whether or not the field element must be 'successful' * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls). * The default value of the successful argument is true. If the given element is not * successful and the successful arg is not false then the returned value will be null. * * Note: The fieldValue returned for a select-multiple element will always be an array. * * @example var data = jQuery.fieldValue($("#myPasswordElement")[0]); * @desc Gets the current value of the myPasswordElement element * * @name fieldValue * @param Element el The DOM element for which the value will be returned * @param Boolean successful true if value returned must be for a successful controls (default is true) * @type String or Array * @cat Plugins/Form */ jQuery.fieldValue = function(el, successful) { var n = el.name, t = el.type, tag = el.tagName.toLowerCase(); if (typeof successful == 'undefined') successful = true; if (successful && ( !n || el.disabled || t == 'reset' || (t == 'checkbox' || t == 'radio') && !el.checked || (t == 'submit' || t == 'image') && el.form && el.form.clk != el || tag == 'select' && el.selectedIndex == -1)) return null; if (tag == 'select') { var index = el.selectedIndex; if (index < 0) return null; var a = [], ops = el.options; var one = (t == 'select-one'); var max = (one ? index+1 : ops.length); for(var i=(one ? index : 0); i < max; i++) { var op = ops[i]; if (op.selected) { // extra pain for IE... var v = jQuery.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value; if (one) return v; a.push(v); } } return a; } return el.value; }; /** * Clears the form data. Takes the following actions on the form's input fields: * - input text fields will have their 'value' property set to the empty string * - select elements will have their 'selectedIndex' property set to -1 * - checkbox and radio inputs will have their 'checked' property set to false * - inputs of type submit, button, reset, and hidden will *not* be effected * - button elements will *not* be effected * * @example $('form').clearForm(); * @desc Clears all forms on the page. * * @name clearForm * @type jQuery * @cat Plugins/Form * @see resetForm */ jQuery.fn.clearForm = function() { return this.each(function() { jQuery('input,select,textarea', this).clearFields(); }); }; /** * Clears the selected form elements. Takes the following actions on the matched elements: * - input text fields will have their 'value' property set to the empty string * - select elements will have their 'selectedIndex' property set to -1 * - checkbox and radio inputs will have their 'checked' property set to false * - inputs of type submit, button, reset, and hidden will *not* be effected * - button elements will *not* be effected * * @example $('.myInputs').clearFields(); * @desc Clears all inputs with class myInputs * * @name clearFields * @type jQuery * @cat Plugins/Form * @see clearForm */ jQuery.fn.clearFields = jQuery.fn.clearInputs = function() { return this.each(function() { var t = this.type, tag = this.tagName.toLowerCase(); if (t == 'text' || t == 'password' || tag == 'textarea') this.value = ''; else if (t == 'checkbox' || t == 'radio') this.checked = false; else if (tag == 'select') this.selectedIndex = -1; }); }; /** * Resets the form data. Causes all form elements to be reset to their original value. * * @example $('form').resetForm(); * @desc Resets all forms on the page. * * @name resetForm * @type jQuery * @cat Plugins/Form * @see clearForm */ jQuery.fn.resetForm = function() { return this.each(function() { // guard against an input with the name of 'reset' // note that IE reports the reset function as an 'object' if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) this.reset(); }); }; Awordpress/wp-includes/js/jquery/.svn/text-base/jquery.js.svn-baseReval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1C 1w.6=="T"){1w.T=1w.T;B 6=u(a,c){7(1w==q)v 1p 6(a,c);a=a||17;7(6.1t(a))v 1p 6(17)[6.E.27?"27":"2O"](a);7(1C a=="23"){B m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2Q(a);7(m)a=6.3k([m[1]]);J v 1p 6(c).2o(a)}v q.6r(a.1l==2y&&a||(a.3Y||a.I&&a!=1w&&!a.24&&a[0]!=T&&a[0].24)&&6.3M(a)||[a])};7(1C $!="T")6.2S$=$;B $=6;6.E=6.8p={3Y:"1.1.2",8q:u(){v q.I},I:0,2b:u(1T){v 1T==T?6.3M(q):q[1T]},2r:u(a){B L=6(a);L.6p=q;v L},6r:u(a){q.I=0;[].1g.14(q,a);v q},K:u(E,1E){v 6.K(q,E,1E)},2h:u(1c){B 4c=-1;q.K(u(i){7(q==1c)4c=i});v 4c},1I:u(1Y,O,C){B 1c=1Y;7(1Y.1l==3t)7(O==T)v q.I&&6[C||"1I"](q[0],1Y)||T;J{1c={};1c[1Y]=O}v q.K(u(2h){P(B H 1x 1c)6.1I(C?q.1q:q,H,6.H(q,1c[H],C,2h,H))})},1m:u(1Y,O){v q.1I(1Y,O,"30")},2L:u(e){7(1C e=="23")v q.3u().3r(17.8t(e));B t="";6.K(e||q,u(){6.K(q.2I,u(){7(q.24!=8)t+=q.24!=1?q.60:6.E.2L([q])})});v t},2K:u(){B a=6.3k(1A);v q.K(u(){B b=a[0].3l(U);q.11.2X(b,q);22(b.1b)b=b.1b;b.4C(q)})},3r:u(){v q.3j(1A,U,1,u(a){q.4C(a)})},5i:u(){v q.3j(1A,U,-1,u(a){q.2X(a,q.1b)})},5j:u(){v q.3j(1A,12,1,u(a){q.11.2X(a,q)})},5t:u(){v q.3j(1A,12,-1,u(a){q.11.2X(a,q.2e)})},4g:u(){v q.6p||6([])},2o:u(t){v q.2r(6.31(q,u(a){v 6.2o(t,a)}),t)},4Y:u(4N){v q.2r(6.31(q,u(a){B a=a.3l(4N!=T?4N:U);a.$1H=16;v a}))},1D:u(t){v q.2r(6.1t(t)&&6.2q(q,u(2z,2h){v t.14(2z,[2h])})||6.3z(t,q))},2g:u(t){v q.2r(t.1l==3t&&6.3z(t,q,U)||6.2q(q,u(a){v(t.1l==2y||t.3Y)?6.3y(a,t)<0:a!=t}))},1M:u(t){v q.2r(6.2k(q.2b(),t.1l==3t?6(t).2b():t.I!=T&&(!t.1f||t.1f=="8v")?t:[t]))},4l:u(1s){v 1s?6.1D(1s,q).r.I>0:12},1a:u(1a){v 1a==T?(q.I?q[0].O:16):q.1I("O",1a)},4U:u(1a){v 1a==T?(q.I?q[0].2t:16):q.3u().3r(1a)},3j:u(1E,1P,3Z,E){B 4Y=q.I>1;B a=6.3k(1E);7(3Z<0)a.8w();v q.K(u(){B 1c=q;7(1P&&6.1f(q,"1P")&&6.1f(a[0],"3m"))1c=q.5J("20")[0]||q.4C(17.6n("20"));6.K(a,u(){E.14(1c,[4Y?q.3l(U):q])})})}};6.1z=6.E.1z=u(){B 1O=1A[0],a=1;7(1A.I==1){1O=q;a=0}B H;22(H=1A[a++])P(B i 1x H)1O[i]=H[i];v 1O};6.1z({8x:u(){7(6.2S$)$=6.2S$;v 6},1t:u(E){v!!E&&1C E!="23"&&!E.1f&&1C E[0]=="T"&&/u/i.1n(E+"")},4B:u(D){v D.66&&D.5I&&!D.5I.64},1f:u(D,Y){v D.1f&&D.1f.3K()==Y.3K()},K:u(1c,E,1E){7(1c.I==T)P(B i 1x 1c)E.14(1c[i],1E||[i,1c[i]]);J P(B i=0,6q=1c.I;i<6q;i++)7(E.14(1c[i],1E||[i,1c[i]])===12)3O;v 1c},H:u(D,O,C,2h,H){7(6.1t(O))O=O.3n(D,[2h]);B 6s=/z-?2h|7P-?8A|1d|58|8B-?28/i;v O&&O.1l==3Q&&C=="30"&&!6s.1n(H)?O+"4S":O},19:{1M:u(D,c){6.K(c.3o(/\\s+/),u(i,Q){7(!6.19.2V(D.19,Q))D.19+=(D.19?" ":"")+Q})},2f:u(D,c){D.19=c?6.2q(D.19.3o(/\\s+/),u(Q){v!6.19.2V(c,Q)}).6t(" "):""},2V:u(t,c){t=t.19||t;c=c.1R(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g,"\\\\$1");v t&&1p 4v("(^|\\\\s)"+c+"(\\\\s|$)").1n(t)}},4d:u(e,o,f){P(B i 1x o){e.1q["1N"+i]=e.1q[i];e.1q[i]=o[i]}f.14(e,[]);P(B i 1x o)e.1q[i]=e.1q["1N"+i]},1m:u(e,p){7(p=="28"||p=="3V"){B 1N={},46,3P,d=["7d","8C","8D","8E"];6.K(d,u(){1N["8F"+q]=0;1N["8G"+q+"8H"]=0});6.4d(e,1N,u(){7(6.1m(e,"1h")!="1Z"){46=e.8I;3P=e.8J}J{e=6(e.3l(U)).2o(":4j").5l("2Z").4g().1m({4n:"1G",45:"8K",1h:"2D",7I:"0",8M:"0"}).5z(e.11)[0];B 3d=6.1m(e.11,"45");7(3d==""||3d=="4b")e.11.1q.45="6x";46=e.6y;3P=e.6z;7(3d==""||3d=="4b")e.11.1q.45="4b";e.11.33(e)}});v p=="28"?46:3P}v 6.30(e,p)},30:u(D,H,53){B L;7(H=="1d"&&6.W.1j)v 6.1I(D.1q,"1d");7(H=="4h"||H=="2v")H=6.W.1j?"3T":"2v";7(!53&&D.1q[H])L=D.1q[H];J 7(17.44&&17.44.4W){7(H=="2v"||H=="3T")H="4h";H=H.1R(/([A-Z])/g,"-$1").4m();B Q=17.44.4W(D,16);7(Q)L=Q.55(H);J 7(H=="1h")L="1Z";J 6.4d(D,{1h:"2D"},u(){B c=17.44.4W(q,"");L=c&&c.55(H)||""})}J 7(D.51){B 56=H.1R(/\\-(\\w)/g,u(m,c){v c.3K()});L=D.51[H]||D.51[56]}v L},3k:u(a){B r=[];6.K(a,u(i,1r){7(!1r)v;7(1r.1l==3Q)1r=1r.6C();7(1C 1r=="23"){B s=6.35(1r),1V=17.6n("1V"),2i=[];B 2K=!s.18("<1u")&&[1,"<42>",""]||(!s.18("<6D")||!s.18("<20")||!s.18("<6E"))&&[1,"<1P>",""]||!s.18("<3m")&&[2,"<1P><20>",""]||(!s.18("<6F")||!s.18("<6G"))&&[3,"<1P><20><3m>",""]||[0,"",""];1V.2t=2K[1]+s+2K[2];22(2K[0]--)1V=1V.1b;7(6.W.1j){7(!s.18("<1P")&&s.18("<20")<0)2i=1V.1b&&1V.1b.2I;J 7(2K[1]=="<1P>"&&s.18("<20")<0)2i=1V.2I;P(B n=2i.I-1;n>=0;--n)7(6.1f(2i[n],"20")&&!2i[n].2I.I)2i[n].11.33(2i[n])}1r=[];P(B i=0,l=1V.2I.I;im[3]-0",2a:"m[3]-0==i",5q:"m[3]-0==i",2u:"i==0",2T:"i==r.I-1",5R:"i%2==0",5S:"i%2","2a-3s":"6.2a(a.11.1b,m[3],\'2e\',a)==a","2u-3s":"6.2a(a.11.1b,1,\'2e\')==a","2T-3s":"6.2a(a.11.7n,1,\'5s\')==a","7p-3s":"6.2B(a.11.1b).I==1",5u:"a.1b",3u:"!a.1b",5v:"6.E.2L.14([a]).18(m[3])>=0",3i:\'a.C!="1G"&&6.1m(a,"1h")!="1Z"&&6.1m(a,"4n")!="1G"\',1G:\'a.C=="1G"||6.1m(a,"1h")=="1Z"||6.1m(a,"4n")=="1G"\',7v:"!a.2W",2W:"a.2W",2Z:"a.2Z",2Y:"a.2Y||6.1I(a,\'2Y\')",2L:"a.C==\'2L\'",4j:"a.C==\'4j\'",5x:"a.C==\'5x\'",4G:"a.C==\'4G\'",5y:"a.C==\'5y\'",4R:"a.C==\'4R\'",5A:"a.C==\'5A\'",5B:"a.C==\'5B\'",3x:\'a.C=="3x"||6.1f(a,"3x")\',5C:"/5C|42|7A|3x/i.1n(a.1f)"},".":"6.19.2V(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.18(m[4])","$=":"z&&z.2U(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.18(m[4])>=0","":"z",4u:u(m){v["",m[1],m[3],m[2],m[5]]},5P:"z=a[m[3]];7(!z||/5E|3e/.1n(m[3]))z=6.1I(a,m[3]);"},"[":"6.2o(m[2],a).I"},5M:[/^\\[ *(@)([a-2m-3C-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2m-3C-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2m-3C*-]*)/i],1Q:[/^(\\/?\\.\\.)/,"a.11",/^(>|\\/)/,"6.2B(a.1b)",/^(\\+)/,"6.2a(a,2,\'2e\')",/^(~)/,u(a){B s=6.2B(a.11.1b);v s.3N(6.3y(a,s)+1)}],3z:u(1s,1U,2g){B 1N,Q=[];22(1s&&1s!=1N){1N=1s;B f=6.1D(1s,1U,2g);1s=f.t.1R(/^\\s*,\\s*/,"");Q=2g?1U=f.r:6.2k(Q,f.r)}v Q},2o:u(t,1B){7(1C t!="23")v[t];7(1B&&!1B.24)1B=16;1B=1B||17;7(!t.18("//")){1B=1B.4H;t=t.2U(2,t.I)}J 7(!t.18("/")){1B=1B.4H;t=t.2U(1,t.I);7(t.18("/")>=1)t=t.2U(t.18("/"),t.I)}B L=[1B],2c=[],2T=16;22(t&&2T!=t){B r=[];2T=t;t=6.35(t).1R(/^\\/\\//i,"");B 3B=12;B 1J=/^[\\/>]\\s*([a-2m-9*-]+)/i;B m=1J.2Q(t);7(m){6.K(L,u(){P(B c=q.1b;c;c=c.2e)7(c.24==1&&(6.1f(c,m[1])||m[1]=="*"))r.1g(c)});L=r;t=t.1R(1J,"");7(t.18(" ")==0)5F;3B=U}J{P(B i=0;i<6.1Q.I;i+=2){B 1J=6.1Q[i];B m=1J.2Q(t);7(m){r=L=6.31(L,6.1t(6.1Q[i+1])?6.1Q[i+1]:u(a){v 40(6.1Q[i+1])});t=6.35(t.1R(1J,""));3B=U;3O}}}7(t&&!3B){7(!t.18(",")){7(L[0]==1B)L.4L();6.2k(2c,L);r=L=[1B];t=" "+t.2U(1,t.I)}J{B 34=/^([a-2m-3C-]+)(#)([a-2m-9\\\\*2S-]*)/i;B m=34.2Q(t);7(m){m=[0,m[2],m[3],m[1]]}J{34=/^([#.]?)([a-2m-9\\\\*2S-]*)/i;m=34.2Q(t)}7(m[1]=="#"&&L[L.I-1].4X){B 2l=L[L.I-1].4X(m[2]);7(6.W.1j&&2l&&2l.2J!=m[2])2l=6(\'[@2J="\'+m[2]+\'"]\',L[L.I-1])[0];L=r=2l&&(!m[3]||6.1f(2l,m[3]))?[2l]:[]}J{7(m[1]==".")B 4r=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");6.K(L,u(){B 3E=m[1]!=""||m[0]==""?"*":m[2];7(6.1f(q,"7J")&&3E=="*")3E="3g";6.2k(r,m[1]!=""&&L.I!=1?6.4x(q,[],m[1],m[2],4r):q.5J(3E))});7(m[1]=="."&&L.I==1)r=6.2q(r,u(e){v 4r.1n(e.19)});7(m[1]=="#"&&L.I==1){B 5K=r;r=[];6.K(5K,u(){7(q.36("2J")==m[2]){r=[q];v 12}})}L=r}t=t.1R(34,"")}}7(t){B 1a=6.1D(t,r);L=r=1a.r;t=6.35(1a.t)}}7(L&&L[0]==1B)L.4L();6.2k(2c,L);v 2c},1D:u(t,r,2g){22(t&&/^[a-z[({<*:.#]/i.1n(t)){B p=6.5M,m;6.K(p,u(i,1J){m=1J.2Q(t);7(m){t=t.7M(m[0].I);7(6.1s[m[1]].4u)m=6.1s[m[1]].4u(m);v 12}});7(m[1]==":"&&m[2]=="2g")r=6.1D(m[3],r,U).r;J 7(m[1]=="."){B 1J=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2q(r,u(e){v 1J.1n(e.19||"")},2g)}J{B f=6.1s[m[1]];7(1C f!="23")f=6.1s[m[1]][m[2]];40("f = u(a,i){"+(6.1s[m[1]].5P||"")+"v "+f+"}");r=6.2q(r,f,2g)}}v{r:r,t:t}},4x:u(o,r,1Q,Y,1J){P(B s=o.1b;s;s=s.2e)7(s.24==1){B 1M=U;7(1Q==".")1M=s.19&&1J.1n(s.19);J 7(1Q=="#")1M=s.36("2J")==Y;7(1M)r.1g(s);7(1Q=="#"&&r.I)3O;7(s.1b)6.4x(s,r,1Q,Y,1J)}v r},4z:u(D){B 4A=[];B Q=D.11;22(Q&&Q!=17){4A.1g(Q);Q=Q.11}v 4A},2a:u(Q,1i,3Z,D){1i=1i||1;B 1T=0;P(;Q;Q=Q[3Z]){7(Q.24==1)1T++;7(1T==1i||1i=="5R"&&1T%2==0&&1T>1&&Q==D||1i=="5S"&&1T%2==1&&Q==D)v Q}},2B:u(n,D){B r=[];P(;n;n=n.2e){7(n.24==1&&(!D||n!=D))r.1g(n)}v r}});6.G={1M:u(S,C,1o,F){7(6.W.1j&&S.3L!=T)S=1w;7(F)1o.F=F;7(!1o.2A)1o.2A=q.2A++;7(!S.$1H)S.$1H={};B 38=S.$1H[C];7(!38){38=S.$1H[C]={};7(S["39"+C])38[0]=S["39"+C]}38[1o.2A]=1o;S["39"+C]=q.5Y;7(!q.1k[C])q.1k[C]=[];q.1k[C].1g(S)},2A:1,1k:{},2f:u(S,C,1o){7(S.$1H){B i,j,k;7(C&&C.C){1o=C.1o;C=C.C}7(C&&S.$1H[C])7(1o)5U S.$1H[C][1o.2A];J P(i 1x S.$1H[C])5U S.$1H[C][i];J P(j 1x S.$1H)q.2f(S,j);P(k 1x S.$1H[C])7(k){k=U;3O}7(!k)S["39"+C]=16}},1S:u(C,F,S){F=6.3M(F||[]);7(!S)6.K(q.1k[C]||[],u(){6.G.1S(C,F,q)});J{B 1o=S["39"+C],1a,E=6.1t(S[C]);7(1o){F.61(q.2j({C:C,1O:S}));7((1a=1o.14(S,F))!==12)q.4F=U}7(E&&1a!==12)S[C]();q.4F=12}},5Y:u(G){7(1C 6=="T"||6.G.4F)v;G=6.G.2j(G||1w.G||{});B 3R;B c=q.$1H[G.C];B 1E=[].3N.3n(1A,1);1E.61(G);P(B j 1x c){1E[0].1o=c[j];1E[0].F=c[j].F;7(c[j].14(q,1E)===12){G.2n();G.2H();3R=12}}7(6.W.1j)G.1O=G.2n=G.2H=G.1o=G.F=16;v 3R},2j:u(G){7(!G.1O&&G.63)G.1O=G.63;7(G.65==T&&G.67!=T){B e=17.4H,b=17.64;G.65=G.67+(e.68||b.68);G.7Y=G.7Z+(e.6c||b.6c)}7(6.W.2N&&G.1O.24==3){B 3a=G;G=6.1z({},3a);G.1O=3a.1O.11;G.2n=u(){v 3a.2n()};G.2H=u(){v 3a.2H()}}7(!G.2n)G.2n=u(){q.3R=12};7(!G.2H)G.2H=u(){q.82=U};v G}};6.E.1z({3U:u(C,F,E){v q.K(u(){6.G.1M(q,C,E||F,F)})},6u:u(C,F,E){v q.K(u(){6.G.1M(q,C,u(G){6(q).6f(G);v(E||F).14(q,1A)},F)})},6f:u(C,E){v q.K(u(){6.G.2f(q,C,E)})},1S:u(C,F){v q.K(u(){6.G.1S(C,F,q)})},3X:u(){B a=1A;v q.6j(u(e){q.4M=q.4M==0?1:0;e.2n();v a[q.4M].14(q,[e])||12})},83:u(f,g){u 4O(e){B p=(e.C=="41"?e.84:e.85)||e.86;22(p&&p!=q)2G{p=p.11}2w(e){p=q};7(p==q)v 12;v(e.C=="41"?f:g).14(q,[e])}v q.41(4O).6k(4O)},27:u(f){7(6.3W)f.14(17,[6]);J{6.3c.1g(u(){v f.14(q,[6])})}v q}});6.1z({3W:12,3c:[],27:u(){7(!6.3W){6.3W=U;7(6.3c){6.K(6.3c,u(){q.14(17)});6.3c=16}7(6.W.3h||6.W.3f)17.87("6o",6.27,12)}}});1p u(){6.K(("88,8a,2O,8b,8d,52,6j,8e,"+"8f,8g,8h,41,6k,8j,42,"+"4R,8k,8l,8m,2C").3o(","),u(i,o){6.E[o]=u(f){v f?q.3U(o,f):q.1S(o)}});7(6.W.3h||6.W.3f)17.8n("6o",6.27,12);J 7(6.W.1j){17.8o("<8r"+"8s 2J=62 8u=U "+"3e=//:><\\/2d>");B 2d=17.4X("62");7(2d)2d.37=u(){7(q.3D!="1X")v;q.11.33(q);6.27()};2d=16}J 7(6.W.2N)6.50=3L(u(){7(17.3D=="8y"||17.3D=="1X"){4p(6.50);6.50=16;6.27()}},10);6.G.1M(1w,"2O",6.27)};7(6.W.1j)6(1w).6u("52",u(){B 1k=6.G.1k;P(B C 1x 1k){B 4Z=1k[C],i=4Z.I;7(i&&C!=\'52\')6w 6.G.2f(4Z[i-1],C);22(--i)}});6.E.1z({6A:u(V,21,M){q.2O(V,21,M,1)},2O:u(V,21,M,1W){7(6.1t(V))v q.3U("2O",V);M=M||u(){};B C="5d";7(21)7(6.1t(21)){M=21;21=16}J{21=6.3g(21);C="5V"}B 4e=q;6.3v({V:V,C:C,F:21,1W:1W,1X:u(2P,15){7(15=="2M"||!1W&&15=="5L")4e.1I("2t",2P.3G).4V().K(M,[2P.3G,15,2P]);J M.14(4e,[2P.3G,15,2P])}});v q},6B:u(){v 6.3g(q)},4V:u(){v q.2o("2d").K(u(){7(q.3e)6.59(q.3e);J 6.4a(q.2L||q.6H||q.2t||"")}).4g()}});7(!1w.3p)3p=u(){v 1p 6I("6K.6M")};6.K("5m,5Q,5O,5W,5N,5H".3o(","),u(i,o){6.E[o]=u(f){v q.3U(o,f)}});6.1z({2b:u(V,F,M,C,1W){7(6.1t(F)){M=F;F=16}v 6.3v({V:V,F:F,2M:M,4t:C,1W:1W})},6Q:u(V,F,M,C){v 6.2b(V,F,M,C,1)},59:u(V,M){v 6.2b(V,16,M,"2d")},6S:u(V,F,M){v 6.2b(V,F,M,"6m")},6U:u(V,F,M,C){7(6.1t(F)){M=F;F={}}v 6.3v({C:"5V",V:V,F:F,2M:M,4t:C})},6X:u(29){6.3q.29=29},6Y:u(5c){6.1z(6.3q,5c)},3q:{1k:U,C:"5d",29:0,5r:"70/x-73-3w-77",5h:U,48:U,F:16},3S:{},3v:u(s){s=6.1z({},6.3q,s);7(s.F){7(s.5h&&1C s.F!="23")s.F=6.3g(s.F);7(s.C.4m()=="2b"){s.V+=((s.V.18("?")>-1)?"&":"?")+s.F;s.F=16}}7(s.1k&&!6.4E++)6.G.1S("5m");B 4y=12;B N=1p 3p();N.7j(s.C,s.V,s.48);7(s.F)N.3A("7l-7m",s.5r);7(s.1W)N.3A("7o-4K-7q",6.3S[s.V]||"7s, 7t 7w 7x 4o:4o:4o 7z");N.3A("X-7B-7C","3p");7(N.7E)N.3A("7F","7G");7(s.5G)s.5G(N);7(s.1k)6.G.1S("5H",[N,s]);B 37=u(4s){7(N&&(N.3D==4||4s=="29")){4y=U;7(3I){4p(3I);3I=16}B 15;2G{15=6.5Z(N)&&4s!="29"?s.1W&&6.69(N,s.V)?"5L":"2M":"2C";7(15!="2C"){B 3F;2G{3F=N.4P("6b-4K")}2w(e){}7(s.1W&&3F)6.3S[s.V]=3F;B F=6.6i(N,s.4t);7(s.2M)s.2M(F,15);7(s.1k)6.G.1S("5N",[N,s])}J 6.3J(s,N,15)}2w(e){15="2C";6.3J(s,N,15,e)}7(s.1k)6.G.1S("5O",[N,s]);7(s.1k&&!--6.4E)6.G.1S("5Q");7(s.1X)s.1X(N,15);7(s.48)N=16}};B 3I=3L(37,13);7(s.29>0)57(u(){7(N){N.7N();7(!4y)37("29")}},s.29);2G{N.7Q(s.F)}2w(e){6.3J(s,N,16,e)}7(!s.48)37();v N},3J:u(s,N,15,e){7(s.2C)s.2C(N,15,e);7(s.1k)6.G.1S("5W",[N,s,e])},4E:0,5Z:u(r){2G{v!r.15&&7V.7W=="4G:"||(r.15>=5X&&r.15<7X)||r.15==6d||6.W.2N&&r.15==T}2w(e){}v 12},69:u(N,V){2G{B 6e=N.4P("6b-4K");v N.15==6d||6e==6.3S[V]||6.W.2N&&N.15==T}2w(e){}v 12},6i:u(r,C){B 4Q=r.4P("8c-C");B F=!C&&4Q&&4Q.18("N")>=0;F=C=="N"||F?r.8i:r.3G;7(C=="2d")6.4a(F);7(C=="6m")40("F = "+F);7(C=="4U")6("<1V>").4U(F).4V();v F},3g:u(a){B s=[];7(a.1l==2y||a.3Y)6.K(a,u(){s.1g(2x(q.Y)+"="+2x(q.O))});J P(B j 1x a)7(a[j]&&a[j].1l==2y)6.K(a[j],u(){s.1g(2x(j)+"="+2x(q))});J s.1g(2x(j)+"="+2x(a[j]));v s.6t("&")},4a:u(F){7(1w.54)1w.54(F);J 7(6.W.2N)1w.57(F,0);J 40.3n(1w,F)}});6.E.1z({1L:u(R,M){B 1G=q.1D(":1G");R?1G.26({28:"1L",3V:"1L",1d:"1L"},R,M):1G.K(u(){q.1q.1h=q.2E?q.2E:"";7(6.1m(q,"1h")=="1Z")q.1q.1h="2D"});v q},1K:u(R,M){B 3i=q.1D(":3i");R?3i.26({28:"1K",3V:"1K",1d:"1K"},R,M):3i.K(u(){q.2E=q.2E||6.1m(q,"1h");7(q.2E=="1Z")q.2E="2D";q.1q.1h="1Z"});v q},5g:6.E.3X,3X:u(E,4I){B 1E=1A;v 6.1t(E)&&6.1t(4I)?q.5g(E,4I):q.K(u(){6(q)[6(q).4l(":1G")?"1L":"1K"].14(6(q),1E)})},7a:u(R,M){v q.26({28:"1L"},R,M)},7c:u(R,M){v q.26({28:"1K"},R,M)},7f:u(R,M){v q.K(u(){B 5k=6(q).4l(":1G")?"1L":"1K";6(q).26({28:5k},R,M)})},7r:u(R,M){v q.26({1d:"1L"},R,M)},7u:u(R,M){v q.26({1d:"1K"},R,M)},7y:u(R,43,M){v q.26({1d:43},R,M)},26:u(H,R,1v,M){v q.1F(u(){q.2F=6.1z({},H);B 1u=6.R(R,1v,M);P(B p 1x H){B e=1p 6.3b(q,1u,p);7(H[p].1l==3Q)e.2s(e.Q(),H[p]);J e[H[p]](H)}})},1F:u(C,E){7(!E){E=C;C="3b"}v q.K(u(){7(!q.1F)q.1F={};7(!q.1F[C])q.1F[C]=[];q.1F[C].1g(E);7(q.1F[C].I==1)E.14(q)})}});6.1z({R:u(R,1v,E){B 1u=R&&R.1l==7K?R:{1X:E||!E&&1v||6.1t(R)&&R,25:R,1v:E&&1v||1v&&1v.1l!=4w&&1v};1u.25=(1u.25&&1u.25.1l==3Q?1u.25:{7R:7S,7T:5X}[1u.25])||7U;1u.1N=1u.1X;1u.1X=u(){6.6a(q,"3b");7(6.1t(1u.1N))1u.1N.14(q)};v 1u},1v:{},1F:{},6a:u(D,C){C=C||"3b";7(D.1F&&D.1F[C]){D.1F[C].4L();B f=D.1F[C][0];7(f)f.14(D)}},3b:u(D,1e,H){B z=q;B y=D.1q;B 4D=6.1m(D,"1h");y.5T="1G";z.a=u(){7(1e.49)1e.49.14(D,[z.2p]);7(H=="1d")6.1I(y,"1d",z.2p);J 7(6l(z.2p))y[H]=6l(z.2p)+"4S";y.1h="2D"};z.6v=u(){v 4T(6.1m(D,H))};z.Q=u(){B r=4T(6.30(D,H));v r&&r>-8z?r:z.6v()};z.2s=u(4f,43){z.4J=(1p 5o()).5w();z.2p=4f;z.a();z.4q=3L(u(){z.49(4f,43)},13)};z.1L=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1L=U;z.2s(0,D.1y[H]);7(H!="1d")y[H]="5a"};z.1K=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1K=U;z.2s(D.1y[H],0)};z.3X=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();7(4D=="1Z"){1e.1L=U;7(H!="1d")y[H]="5a";z.2s(0,D.1y[H])}J{1e.1K=U;z.2s(D.1y[H],0)}};z.49=u(32,47){B t=(1p 5o()).5w();7(t>1e.25+z.4J){4p(z.4q);z.4q=16;z.2p=47;z.a();7(D.2F)D.2F[H]=U;B 2c=U;P(B i 1x D.2F)7(D.2F[i]!==U)2c=12;7(2c){y.5T="";y.1h=4D;7(6.1m(D,"1h")=="1Z")y.1h="2D";7(1e.1K)y.1h="1Z";7(1e.1K||1e.1L)P(B p 1x D.2F)7(p=="1d")6.1I(y,p,D.1y[p]);J y[p]=""}7(2c&&6.1t(1e.1X))1e.1X.14(D)}J{B n=t-q.4J;B p=n/1e.25;z.2p=1e.1v&&6.1v[1e.1v]?6.1v[1e.1v](p,n,32,(47-32),1e.25):((-6h.7O(p*6h.8L)/2)+0.5)*(47-32)+32;z.a()}}}})}',62,545,'||||||jQuery|if|||||||||||||||||||this||||function|return||||||var|type|elem|fn|data|event|prop|length|else|each|ret|callback|xml|value|for|cur|speed|element|undefined|true|url|browser||name|||parentNode|false||apply|status|null|document|indexOf|className|val|firstChild|obj|opacity|options|nodeName|push|display|result|msie|global|constructor|css|test|handler|new|style|arg|expr|isFunction|opt|easing|window|in|orig|extend|arguments|context|typeof|filter|args|queue|hidden|events|attr|re|hide|show|add|old|target|table|token|replace|trigger|num|elems|div|ifModified|complete|key|none|tbody|params|while|string|nodeType|duration|animate|ready|height|timeout|nth|get|done|script|nextSibling|remove|not|index|tb|fix|merge|oid|z0|preventDefault|find|now|grep|pushStack|custom|innerHTML|first|cssFloat|catch|encodeURIComponent|Array|el|guid|sibling|error|block|oldblock|curAnim|try|stopPropagation|childNodes|id|wrap|text|success|safari|load|res|exec|al|_|last|substr|has|disabled|insertBefore|selected|checked|curCSS|map|firstNum|removeChild|re2|trim|getAttribute|onreadystatechange|handlers|on|originalEvent|fx|readyList|parPos|src|opera|param|mozilla|visible|domManip|clean|cloneNode|tr|call|split|XMLHttpRequest|ajaxSettings|append|child|String|empty|ajax|form|button|inArray|multiFilter|setRequestHeader|foundToken|9_|readyState|tag|modRes|responseText|second|ival|handleError|toUpperCase|setInterval|makeArray|slice|break|oWidth|Number|returnValue|lastModified|styleFloat|bind|width|isReady|toggle|jquery|dir|eval|mouseover|select|to|defaultView|position|oHeight|lastNum|async|step|globalEval|static|pos|swap|self|from|end|float|alpha|radio|inv|is|toLowerCase|visibility|00|clearInterval|timer|rec|isTimeout|dataType|_resort|RegExp|Function|getAll|requestDone|parents|matched|isXMLDoc|appendChild|oldDisplay|active|triggered|file|documentElement|fn2|startTime|Modified|shift|lastToggle|deep|handleHover|getResponseHeader|ct|submit|px|parseFloat|html|evalScripts|getComputedStyle|getElementById|clone|els|safariTimer|currentStyle|unload|force|execScript|getPropertyValue|newProp|setTimeout|zoom|getScript|1px|sl|settings|GET|rl|check|_toggle|processData|prepend|before|state|removeAttr|ajaxStart|lt|Date|gt|eq|contentType|previousSibling|after|parent|contains|getTime|checkbox|password|appendTo|image|reset|input|webkit|href|continue|beforeSend|ajaxSend|ownerDocument|getElementsByTagName|tmp|notmodified|parse|ajaxSuccess|ajaxComplete|_prefix|ajaxStop|even|odd|overflow|delete|POST|ajaxError|200|handle|httpSuccess|nodeValue|unshift|__ie_init|srcElement|body|pageX|tagName|clientX|scrollLeft|httpNotModified|dequeue|Last|scrollTop|304|xmlRes|unbind|100|Math|httpData|click|mouseout|parseInt|json|createElement|DOMContentLoaded|prevObject|ol|setArray|exclude|join|one|max|do|relative|clientHeight|clientWidth|loadIfModified|serialize|toString|thead|tfoot|td|th|textContent|ActiveXObject|htmlFor|Microsoft|class|XMLHTTP|readOnly|gi|match|getIfModified|9999|getJSON|getAttributeNode|post|setAttribute|ig|ajaxTimeout|ajaxSetup|concat|application|userAgent|compatible|www|compatMode|CSS1Compat|next|urlencoded|siblings|children|slideDown|prependTo|slideUp|Top|insertAfter|slideToggle|removeAttribute|addClass|removeClass|open|toggleClass|Content|Type|lastChild|If|only|Since|fadeIn|Thu|01|fadeOut|enabled|Jan|1970|fadeTo|GMT|textarea|Requested|With|prev|overrideMimeType|Connection|close|boxModel|right|object|Object|navigator|substring|abort|cos|font|send|slow|600|fast|400|location|protocol|300|pageY|clientY|method|action|cancelBubble|hover|fromElement|toElement|relatedTarget|removeEventListener|blur|readonly|focus|resize|content|scroll|dblclick|mousedown|mouseup|mousemove|responseXML|change|keydown|keypress|keyup|addEventListener|write|prototype|size|scr|ipt|createTextNode|defer|FORM|reverse|noConflict|loaded|10000|weight|line|Bottom|Right|Left|padding|border|Width|offsetHeight|offsetWidth|absolute|PI|left'.split('|'),0,{}));jQuery.noConflict(); -wordpress/wp-includes/js/list-manipulation.js$paddLoadEvent( function() { if ( 'undefined' != typeof listManL10n ) Object.extend(listMan.prototype, listManL10n); theList = new listMan(); } ); function deleteSomething( what, id, message, obj ) { if ( !obj ) obj=theList; if ( !message ) message = obj.delText.replace(/%thing%/g, what); if( confirm(message) ) return obj.ajaxDelete( what, id ); else return false; } function dimSomething( what, id, dimClass, obj ) { if ( !obj ) obj = theList; return obj.ajaxDimmer(what,id,dimClass); } var listMan = Class.create(); Object.extend(listMan.prototype, { ajaxRespEl: 'ajax-response', ajaxHandler: false, inputData: '', clearInputs: [], showLink: true, topAdder: false, alt: 'alternate', altOffset: 0, addComplete: null, delComplete: null, dimComplete: null, dataStore: null, formStore: null, jumpText: '', // We get these from listManL10n delText: '', initialize: function(theListId) { this.theList = $(theListId ? theListId : 'the-list'); if ( !this.theList ) return false; Element.cleanWhitespace(this.theList); }, // sends add-what and fields contained in where // recieves html with top element having an id like what-# ajaxAdder: function( what, where, update ) { // Do NOT wrap TR in TABLE TBODY var ajaxAdd = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); if ( ajaxAdd.notInitialized() ) return true; var action = ( update ? 'update-' : 'add-' ) + what; ajaxAdd.options.parameters = $H(ajaxAdd.options.parameters).merge({action: action}).merge(this.inputData.toQueryParams()).merge(this.grabInputs( where, ajaxAdd ).toQueryParams()); var tempObj=this; ajaxAdd.addOnComplete( function(transport) { var newItems = $A(transport.responseXML.getElementsByTagName(what)); if ( newItems ) { var showLinkMessage = ''; var m = ''; newItems.each( function(i) { var id = i.getAttribute('id'); var exists = $(what+'-'+id); if ( exists ) tempObj.replaceListItem( exists, getNodeValue(i,'response_data'), update ); else tempObj.addListItem( getNodeValue(i, 'response_data') ); m = getNodeValue(i, 'show-link'); showLinkMessage += showLinkMessage ? "
    \n" : ''; if ( m ) showLinkMessage += m; else showLinkMessage += "" + tempObj.jumpText + ""; }); if ( tempObj.showLink && showLinkMessage ) Element.update(ajaxAdd.myResponseElement,""); } if ( tempObj.addComplete && typeof tempObj.addComplete == 'function' ) tempObj.addComplete( what, where, update, transport ); tempObj.recolorList(); ajaxAdd.restoreInputs = null; }); if ( !update ) ajaxAdd.addOnWPError( function(transport) { tempObj.restoreForm(ajaxAdd.restoreInputs); }); ajaxAdd.request(ajaxAdd.url); if ( !update ) this.clear(); return false; }, // sends update-what and fields contained in where // recieves html with top element having an id like what-# ajaxUpdater: function( what, where ) { return this.ajaxAdder( what, where, true ); }, // sends delete-what and id# ajaxDelete: function( what, id ) { var ajaxDel = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); if( ajaxDel.notInitialized() ) return true; var tempObj = this; var action = 'delete-' + what; var actionId = action + '&id=' + id; var idName = what.replace('-as-spam','') + '-' + id; ajaxDel.addOnComplete( function(transport) { Element.update(ajaxDel.myResponseElement,''); tempObj.destore(actionId); if( tempObj.delComplete && typeof tempObj.delComplete == 'function' ) tempObj.delComplete( what, id, transport ); }); ajaxDel.addOnWPError( function(transport) { tempObj.restore(actionId, true); }); ajaxDel.options.parameters = $H(ajaxDel.options.parameters).merge({action: action, id: id}).merge(this.inputData.toQueryParams()); ajaxDel.request(ajaxDel.url); this.store(actionId, idName); tempObj.removeListItem( idName ); return false; }, // Toggles class nomes // sends dim-what and id# ajaxDimmer: function( what, id, dimClass ) { ajaxDim = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); if ( ajaxDim.notInitialized() ) return true; var tempObj = this; var action = 'dim-' + what; var actionId = action + '&id=' + id; var idName = what + '-' + id; ajaxDim.addOnComplete( function(transport) { Element.update(ajaxDim.myResponseElement,''); tempObj.destore(actionId); if ( tempObj.dimComplete && typeof tempObj.dimComplete == 'function' ) tempObj.dimComplete( what, id, dimClass, transport ); }); ajaxDim.addOnWPError( function(transport) { tempObj.restore(actionId, true); }); ajaxDim.options.parameters = $H(ajaxDim.options.parameters).merge({action: action, id: id}).merge(this.inputData.toQueryParams()); ajaxDim.request(ajaxDim.url); this.store(actionId, idName); this.dimItem( idName, dimClass ); return false; }, addListItem: function( h ) { new Insertion[this.topAdder ? 'Top' : 'Bottom'](this.theList,h); Element.cleanWhitespace(this.theList); var id = this.topAdder ? this.theList.firstChild.id : this.theList.lastChild.id; if ( this.alt ) if ( ( this.theList.childNodes.length + this.altOffset ) % 2 ) Element.addClassName($(id),this.alt); Fat.fade_element(id); }, // only hides the element sa it can be put back again if necessary removeListItem: function( id, noFade ) { id = $(id); if ( !noFade ) { Fat.fade_element(id.id,null,700,'#FF3333'); var tempObj = this; var func = function() { id.hide(); tempObj.recolorList(); } setTimeout(func, 705); } else { id.hide(); this.recolorList(); } }, replaceListItem: function( id, h, update ) { id = $(id); if ( !update ) { Element.remove(id); this.addListItem( h ); return; } id.replace(h); Fat.fade_element(id.id); }, // toggles class dimItem: function( id, dimClass, noFade ) { id = $(id); if ( Element.hasClassName(id,dimClass) ) { if ( !noFade ) Fat.fade_element(id.id,null,700,null); Element.removeClassName(id,dimClass); } else { if ( !noFade ) Fat.fade_element(id.id,null,700,'#FF3333'); Element.addClassName(id,dimClass); } }, // store an element in case we need it later store: function(action, id) { if ( !this.dataStore ) this.dataStore = $H(); this.dataStore[action] = $(id).cloneNode(true); }, // delete from store destore: function(action) { delete(this.dataStore[action]); }, // restore element from store into existing (possibly hidden) element of same id restore: function(action, error) { var id = this.dataStore[action].id; this.theList.replaceChild(this.dataStore[action], $(id)); delete(this.dataStore[action]); if ( error ) { func = function() { Element.setStyle($(id),{backgroundColor:'#FF3333'}); } func(); setTimeout(func, 705); // Hit it twice in case it's still fading. } }, // Like Form.serialize, but excludes action and sets up clearInputs grabInputs: function( where, ajaxObj ) { if ( ajaxObj ) ajaxObj.restoreInputs = []; var elements = Form.getElements($(where)); var queryComponents = new Array(); for (var i = 0; i < elements.length; i++) { if ( 'action' == elements[i].name ) continue; if ( 'hidden' != elements[i].type && 'submit' != elements[i].type && 'button' != elements[i].type ) { this.clearInputs.push(elements[i]); if ( ajaxObj ) ajaxObj.restoreInputs.push([elements[i], elements[i].value]); } var queryComponent = Form.Element.serialize(elements[i]); if (queryComponent) { queryComponents.push(queryComponent); } } return queryComponents.join('&'); }, // form.reset() can only do whole forms. This can do subsections. clear: function() { this.clearInputs.each( function(i) { i = $(i); if ( 'textarea' == i.tagName.toLowerCase() ) i.value = ''; else switch ( i.type.toLowerCase() ) { case 'password': case 'text': i.value = ''; break; case 'checkbox': case 'radio': i.checked = false; break; case 'select': case 'select-one': i.selectedIndex = null; break; case 'select-multiple': for (var o = 0; o < i.length; o++) i.options[o].selected = false; break; } }); this.clearInputs = []; }, restoreForm: function(elements) { elements.each( function(i) { i[0].value = i[1]; }); }, recolorList: function() { if ( !this.alt ) return; var alt = this.alt; var offset = this.altOffset; var listItems = $A(this.theList.childNodes).findAll( function(i) { return Element.visible(i) } ); listItems.each( function(i,n) { if ( ( n + offset ) % 2 ) Element.removeClassName(i,alt); else Element.addClassName(i,alt); }); } }); //No submit unless code returns true. function killSubmit ( code, e ) { e = e ? e : window.event; if ( !e ) return; var t = e.target ? e.target : e.srcElement; if ( ( 'text' == t.type && e.keyCode == 13 ) || ( 'submit' == t.type && 'click' == e.type ) ) { if ( ( 'string' == typeof code && !eval(code) ) || ( 'function' == typeof code && !code() ) ) { e.returnValue = false; e.cancelBubble = true; return false; } } } //Generic but lame JS closure function encloseFunc(f){var a=arguments[1];return function(){return f(a);}} %wordpress/wp-includes/js/prototype.js\/* Prototype JavaScript framework, version 1.5.0 * (c) 2005-2007 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.5.0', BrowserFeatures: { XPath: !!document.evaluate }, ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', emptyFunction: function() {}, K: function(x) { return x } } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } Object.extend(Object, { inspect: function(object) { try { if (object === undefined) return 'undefined'; if (object === null) return 'null'; return object.inspect ? object.inspect() : object.toString(); } catch (e) { if (e instanceof RangeError) return '...'; throw e; } }, keys: function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }, values: function(object) { var values = []; for (var property in object) values.push(object[property]); return values; }, clone: function(object) { return Object.extend({}, object); } }); Function.prototype.bind = function() { var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); } } Function.prototype.bindAsEventListener = function(object) { var __method = this, args = $A(arguments), object = args.shift(); return function(event) { return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); } } Object.extend(Number.prototype, { toColorPart: function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; }, succ: function() { return this + 1; }, times: function(iterator) { $R(0, this, true).each(iterator); return this; } }); var Try = { these: function() { var returnValue; for (var i = 0, length = arguments.length; i < length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, stop: function() { if (!this.timer) return; clearInterval(this.timer); this.timer = null; }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(this); } finally { this.currentlyExecuting = false; } } } } String.interpret = function(value){ return value == null ? '' : String(value); } Object.extend(String.prototype, { gsub: function(pattern, replacement) { var result = '', source = this, match; replacement = arguments.callee.prepareReplacement(replacement); while (source.length > 0) { if (match = source.match(pattern)) { result += source.slice(0, match.index); result += String.interpret(replacement(match)); source = source.slice(match.index + match[0].length); } else { result += source, source = ''; } } return result; }, sub: function(pattern, replacement, count) { replacement = this.gsub.prepareReplacement(replacement); count = count === undefined ? 1 : count; return this.gsub(pattern, function(match) { if (--count < 0) return match[0]; return replacement(match); }); }, scan: function(pattern, iterator) { this.gsub(pattern, iterator); return this; }, truncate: function(length, truncation) { length = length || 30; truncation = truncation === undefined ? '...' : truncation; return this.length > length ? this.slice(0, length - truncation.length) + truncation : this; }, strip: function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }, stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, stripScripts: function() { return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); }, extractScripts: function() { var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); return (this.match(matchAll) || []).map(function(scriptTag) { return (scriptTag.match(matchOne) || ['', ''])[1]; }); }, evalScripts: function() { return this.extractScripts().map(function(script) { return eval(script) }); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0] ? (div.childNodes.length > 1 ? $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : div.childNodes[0].nodeValue) : ''; }, toQueryParams: function(separator) { var match = this.strip().match(/([^?#]*)(#.*)?$/); if (!match) return {}; return match[1].split(separator || '&').inject({}, function(hash, pair) { if ((pair = pair.split('='))[0]) { var name = decodeURIComponent(pair[0]); var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; if (hash[name] !== undefined) { if (hash[name].constructor != Array) hash[name] = [hash[name]]; if (value) hash[name].push(value); } else hash[name] = value; } return hash; }); }, toArray: function() { return this.split(''); }, succ: function() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); }, camelize: function() { var parts = this.split('-'), len = parts.length; if (len == 1) return parts[0]; var camelized = this.charAt(0) == '-' ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) : parts[0]; for (var i = 1; i < len; i++) camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); return camelized; }, capitalize: function(){ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); }, underscore: function() { return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); }, dasherize: function() { return this.gsub(/_/,'-'); }, inspect: function(useDoubleQuotes) { var escapedString = this.replace(/\\/g, '\\\\'); if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; else return "'" + escapedString.replace(/'/g, '\\\'') + "'"; } }); String.prototype.gsub.prepareReplacement = function(replacement) { if (typeof replacement == 'function') return replacement; var template = new Template(replacement); return function(match) { return template.evaluate(match) }; } String.prototype.parseQuery = String.prototype.toQueryParams; var Template = Class.create(); Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; Template.prototype = { initialize: function(template, pattern) { this.template = template.toString(); this.pattern = pattern || Template.Pattern; }, evaluate: function(object) { return this.template.gsub(this.pattern, function(match) { var before = match[1]; if (before == '\\') return match[2]; return before + String.interpret(object[match[3]]); }); } } var $break = new Object(); var $continue = new Object(); var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch (e) { if (e != $break) throw e; } return this; }, eachSlice: function(number, iterator) { var index = -number, slices = [], array = this.toArray(); while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.map(iterator); }, all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; }, any: function(iterator) { var result = false; this.each(function(value, index) { if (result = !!(iterator || Prototype.K)(value, index)) throw $break; }); return result; }, collect: function(iterator) { var results = []; this.each(function(value, index) { results.push((iterator || Prototype.K)(value, index)); }); return results; }, detect: function(iterator) { var result; this.each(function(value, index) { if (iterator(value, index)) { result = value; throw $break; } }); return result; }, findAll: function(iterator) { var results = []; this.each(function(value, index) { if (iterator(value, index)) results.push(value); }); return results; }, grep: function(pattern, iterator) { var results = []; this.each(function(value, index) { var stringValue = value.toString(); if (stringValue.match(pattern)) results.push((iterator || Prototype.K)(value, index)); }) return results; }, include: function(object) { var found = false; this.each(function(value) { if (value == object) { found = true; throw $break; } }); return found; }, inGroupsOf: function(number, fillWith) { fillWith = fillWith === undefined ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); }, inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; }, invoke: function(method) { var args = $A(arguments).slice(1); return this.map(function(value) { return value[method].apply(value, args); }); }, max: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value >= result) result = value; }); return result; }, min: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value < result) result = value; }); return result; }, partition: function(iterator) { var trues = [], falses = []; this.each(function(value, index) { ((iterator || Prototype.K)(value, index) ? trues : falses).push(value); }); return [trues, falses]; }, pluck: function(property) { var results = []; this.each(function(value, index) { results.push(value[property]); }); return results; }, reject: function(iterator) { var results = []; this.each(function(value, index) { if (!iterator(value, index)) results.push(value); }); return results; }, sortBy: function(iterator) { return this.map(function(value, index) { return {value: value, criteria: iterator(value, index)}; }).sort(function(left, right) { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; }).pluck('value'); }, toArray: function() { return this.map(); }, zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { return iterator(collections.pluck(index)); }); }, size: function() { return this.toArray().length; }, inspect: function() { return '#'; } } Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.detect, select: Enumerable.findAll, member: Enumerable.include, entries: Enumerable.toArray }); var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0, length = iterable.length; i < length; i++) results.push(iterable[i]); return results; } } Object.extend(Array.prototype, Enumerable); if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0, length = this.length; i < length; i++) iterator(this[i]); }, clear: function() { this.length = 0; return this; }, first: function() { return this[0]; }, last: function() { return this[this.length - 1]; }, compact: function() { return this.select(function(value) { return value != null; }); }, flatten: function() { return this.inject([], function(array, value) { return array.concat(value && value.constructor == Array ? value.flatten() : [value]); }); }, without: function() { var values = $A(arguments); return this.select(function(value) { return !values.include(value); }); }, indexOf: function(object) { for (var i = 0, length = this.length; i < length; i++) if (this[i] == object) return i; return -1; }, reverse: function(inline) { return (inline !== false ? this : this.toArray())._reverse(); }, reduce: function() { return this.length > 1 ? this : this[0]; }, uniq: function() { return this.inject([], function(array, value) { return array.include(value) ? array : array.concat([value]); }); }, clone: function() { return [].concat(this); }, size: function() { return this.length; }, inspect: function() { return '[' + this.map(Object.inspect).join(', ') + ']'; } }); Array.prototype.toArray = Array.prototype.clone; function $w(string){ string = string.strip(); return string ? string.split(/\s+/) : []; } if(window.opera){ Array.prototype.concat = function(){ var array = []; for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); for(var i = 0, length = arguments.length; i < length; i++) { if(arguments[i].constructor == Array) { for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) array.push(arguments[i][j]); } else { array.push(arguments[i]); } } return array; } } var Hash = function(obj) { Object.extend(this, obj || {}); }; Object.extend(Hash, { toQueryString: function(obj) { var parts = []; this.prototype._each.call(obj, function(pair) { if (!pair.key) return; if (pair.value && pair.value.constructor == Array) { var values = pair.value.compact(); if (values.length < 2) pair.value = values.reduce(); else { key = encodeURIComponent(pair.key); values.each(function(value) { value = value != undefined ? encodeURIComponent(value) : ''; parts.push(key + '=' + encodeURIComponent(value)); }); return; } } if (pair.value == undefined) pair[1] = ''; parts.push(pair.map(encodeURIComponent).join('=')); }); return parts.join('&'); } }); Object.extend(Hash.prototype, Enumerable); Object.extend(Hash.prototype, { _each: function(iterator) { for (var key in this) { var value = this[key]; if (value && value == Hash.prototype[key]) continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, keys: function() { return this.pluck('key'); }, values: function() { return this.pluck('value'); }, merge: function(hash) { return $H(hash).inject(this, function(mergedHash, pair) { mergedHash[pair.key] = pair.value; return mergedHash; }); }, remove: function() { var result; for(var i = 0, length = arguments.length; i < length; i++) { var value = this[arguments[i]]; if (value !== undefined){ if (result === undefined) result = value; else { if (result.constructor != Array) result = [result]; result.push(value) } } delete this[arguments[i]]; } return result; }, toQueryString: function() { return Hash.toQueryString(this); }, inspect: function() { return '#'; } }); function $H(object) { if (object && object.constructor == Hash) return object; return new Hash(object); }; ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }, _each: function(iterator) { var value = this.start; while (this.include(value)) { iterator(value); value = value.succ(); } }, include: function(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } }); var $R = function(start, end, exclusive) { return new ObjectRange(start, end, exclusive); } var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, activeRequestCount: 0 } Ajax.Responders = { responders: [], _each: function(iterator) { this.responders._each(iterator); }, register: function(responder) { if (!this.include(responder)) this.responders.push(responder); }, unregister: function(responder) { this.responders = this.responders.without(responder); }, dispatch: function(callback, request, transport, json) { this.each(function(responder) { if (typeof responder[callback] == 'function') { try { responder[callback].apply(responder, [request, transport, json]); } catch (e) {} } }); } }; Object.extend(Ajax.Responders, Enumerable); Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++; }, onComplete: function() { Ajax.activeRequestCount--; } }); Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, contentType: 'application/x-www-form-urlencoded', encoding: 'UTF-8', parameters: '' } Object.extend(this.options, options || {}); this.options.method = this.options.method.toLowerCase(); if (typeof this.options.parameters == 'string') this.options.parameters = this.options.parameters.toQueryParams(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { _complete: false, initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { this.url = url; this.method = this.options.method; var params = this.options.parameters; if (!['get', 'post'].include(this.method)) { // simulate other verbs over post params['_method'] = this.method; this.method = 'post'; } params = Hash.toQueryString(params); if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' // when GET, append parameters to URL if (this.method == 'get' && params) this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; try { Ajax.Responders.dispatch('onCreate', this, this.transport); this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous); if (this.options.asynchronous) setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); this.transport.onreadystatechange = this.onStateChange.bind(this); this.setRequestHeaders(); var body = this.method == 'post' ? (this.options.postBody || params) : null; this.transport.send(body); /* Force Firefox to handle ready state 4 for synchronous requests */ if (!this.options.asynchronous && this.transport.overrideMimeType) this.onStateChange(); } catch (e) { this.dispatchException(e); } }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState > 1 && !((readyState == 4) && this._complete)) this.respondToReadyState(this.transport.readyState); }, setRequestHeaders: function() { var headers = { 'X-Requested-With': 'XMLHttpRequest', 'X-Prototype-Version': Prototype.Version, 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' }; if (this.method == 'post') { headers['Content-type'] = this.options.contentType + (this.options.encoding ? '; charset=' + this.options.encoding : ''); /* Force "Connection: close" for older Mozilla browsers to work * around a bug where XMLHttpRequest sends an incorrect * Content-length header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) headers['Connection'] = 'close'; } // user-defined headers if (typeof this.options.requestHeaders == 'object') { var extras = this.options.requestHeaders; if (typeof extras.push == 'function') for (var i = 0, length = extras.length; i < length; i += 2) headers[extras[i]] = extras[i+1]; else $H(extras).each(function(pair) { headers[pair.key] = pair.value }); } for (var name in headers) this.transport.setRequestHeader(name, headers[name]); }, success: function() { return !this.transport.status || (this.transport.status >= 200 && this.transport.status < 300); }, respondToReadyState: function(readyState) { var state = Ajax.Request.Events[readyState]; var transport = this.transport, json = this.evalJSON(); if (state == 'Complete') { try { this._complete = true; (this.options['on' + this.transport.status] || this.options['on' + (this.success() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(transport, json); } catch (e) { this.dispatchException(e); } if ((this.getHeader('Content-type') || 'text/javascript').strip(). match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) this.evalResponse(); } try { (this.options['on' + state] || Prototype.emptyFunction)(transport, json); Ajax.Responders.dispatch('on' + state, this, transport, json); } catch (e) { this.dispatchException(e); } if (state == 'Complete') { // avoid memory leak in MSIE: clean up this.transport.onreadystatechange = Prototype.emptyFunction; } }, getHeader: function(name) { try { return this.transport.getResponseHeader(name); } catch (e) { return null } }, evalJSON: function() { try { var json = this.getHeader('X-JSON'); return json ? eval('(' + json + ')') : null; } catch (e) { return null } }, evalResponse: function() { try { return eval(this.transport.responseText); } catch (e) { this.dispatchException(e); } }, dispatchException: function(exception) { (this.options.onException || Prototype.emptyFunction)(this, exception); Ajax.Responders.dispatch('onException', this, exception); } }); Ajax.Updater = Class.create(); Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { this.container = { success: (container.success || container), failure: (container.failure || (container.success ? null : container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function(transport, param) { this.updateContent(); onComplete(transport, param); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.container[this.success() ? 'success' : 'failure']; var response = this.transport.responseText; if (!this.options.evalScripts) response = response.stripScripts(); if (receiver = $(receiver)) { if (this.options.insertion) new this.options.insertion(receiver, response); else receiver.update(response); } if (this.success()) { if (this.onComplete) setTimeout(this.onComplete.bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = (this.options.decay || 1); this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.options.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); function $(element) { if (arguments.length > 1) { for (var i = 0, elements = [], length = arguments.length; i < length; i++) elements.push($(arguments[i])); return elements; } if (typeof element == 'string') element = document.getElementById(element); return Element.extend(element); } if (Prototype.BrowserFeatures.XPath) { document._getElementsByXPath = function(expression, parentElement) { var results = []; var query = document.evaluate(expression, $(parentElement) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i)); return results; }; } document.getElementsByClassName = function(className, parentElement) { if (Prototype.BrowserFeatures.XPath) { var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; return document._getElementsByXPath(q, parentElement); } else { var children = ($(parentElement) || document.body).getElementsByTagName('*'); var elements = [], child; for (var i = 0, length = children.length; i < length; i++) { child = children[i]; if (Element.hasClassName(child, className)) elements.push(Element.extend(child)); } return elements; } }; /*--------------------------------------------------------------------------*/ if (!window.Element) var Element = new Object(); Element.extend = function(element) { if (!element || _nativeExtensions || element.nodeType == 3) return element; if (!element._extended && element.tagName && element != window) { var methods = Object.clone(Element.Methods), cache = Element.extend.cache; if (element.tagName == 'FORM') Object.extend(methods, Form.Methods); if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) Object.extend(methods, Form.Element.Methods); Object.extend(methods, Element.Methods.Simulated); for (var property in methods) { var value = methods[property]; if (typeof value == 'function' && !(property in element)) element[property] = cache.findOrStore(value); } } element._extended = true; return element; }; Element.extend.cache = { findOrStore: function(value) { return this[value] = this[value] || function() { return value.apply(null, [this].concat($A(arguments))); } } }; Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; }, toggle: function(element) { element = $(element); Element[Element.visible(element) ? 'hide' : 'show'](element); return element; }, hide: function(element) { $(element).style.display = 'none'; return element; }, show: function(element) { $(element).style.display = ''; return element; }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); return element; }, update: function(element, html) { html = typeof html == 'undefined' ? '' : html.toString(); $(element).innerHTML = html.stripScripts(); setTimeout(function() {html.evalScripts()}, 10); return element; }, replace: function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); if (element.outerHTML) { element.outerHTML = html.stripScripts(); } else { var range = element.ownerDocument.createRange(); range.selectNodeContents(element); element.parentNode.replaceChild( range.createContextualFragment(html.stripScripts()), element); } setTimeout(function() {html.evalScripts()}, 10); return element; }, inspect: function(element) { element = $(element); var result = '<' + element.tagName.toLowerCase(); $H({'id': 'id', 'className': 'class'}).each(function(pair) { var property = pair.first(), attribute = pair.last(); var value = (element[property] || '').toString(); if (value) result += ' ' + attribute + '=' + value.inspect(true); }); return result + '>'; }, recursivelyCollect: function(element, property) { element = $(element); var elements = []; while (element = element[property]) if (element.nodeType == 1) elements.push(Element.extend(element)); return elements; }, ancestors: function(element) { return $(element).recursivelyCollect('parentNode'); }, descendants: function(element) { return $A($(element).getElementsByTagName('*')); }, immediateDescendants: function(element) { if (!(element = $(element).firstChild)) return []; while (element && element.nodeType != 1) element = element.nextSibling; if (element) return [element].concat($(element).nextSiblings()); return []; }, previousSiblings: function(element) { return $(element).recursivelyCollect('previousSibling'); }, nextSiblings: function(element) { return $(element).recursivelyCollect('nextSibling'); }, siblings: function(element) { element = $(element); return element.previousSiblings().reverse().concat(element.nextSiblings()); }, match: function(element, selector) { if (typeof selector == 'string') selector = new Selector(selector); return selector.match($(element)); }, up: function(element, expression, index) { return Selector.findElement($(element).ancestors(), expression, index); }, down: function(element, expression, index) { return Selector.findElement($(element).descendants(), expression, index); }, previous: function(element, expression, index) { return Selector.findElement($(element).previousSiblings(), expression, index); }, next: function(element, expression, index) { return Selector.findElement($(element).nextSiblings(), expression, index); }, getElementsBySelector: function() { var args = $A(arguments), element = $(args.shift()); return Selector.findChildElements(element, args); }, getElementsByClassName: function(element, className) { return document.getElementsByClassName(className, element); }, readAttribute: function(element, name) { element = $(element); if (document.all && !window.opera) { var t = Element._attributeTranslations; if (t.values[name]) return t.values[name](element, name); if (t.names[name]) name = t.names[name]; var attribute = element.attributes[name]; if(attribute) return attribute.nodeValue; } return element.getAttribute(name); }, getHeight: function(element) { return $(element).getDimensions().height; }, getWidth: function(element) { return $(element).getDimensions().width; }, classNames: function(element) { return new Element.ClassNames(element); }, hasClassName: function(element, className) { if (!(element = $(element))) return; var elementClassName = element.className; if (elementClassName.length == 0) return false; if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) return true; return false; }, addClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).add(className); return element; }, removeClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).remove(className); return element; }, toggleClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); return element; }, observe: function() { Event.observe.apply(Event, arguments); return $A(arguments).first(); }, stopObserving: function() { Event.stopObserving.apply(Event, arguments); return $A(arguments).first(); }, // removes whitespace-only text node children cleanWhitespace: function(element) { element = $(element); var node = element.firstChild; while (node) { var nextNode = node.nextSibling; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) element.removeChild(node); node = nextNode; } return element; }, empty: function(element) { return $(element).innerHTML.match(/^\s*$/); }, descendantOf: function(element, ancestor) { element = $(element), ancestor = $(ancestor); while (element = element.parentNode) if (element == ancestor) return true; return false; }, scrollTo: function(element) { element = $(element); var pos = Position.cumulativeOffset(element); window.scrollTo(pos[0], pos[1]); return element; }, getStyle: function(element, style) { element = $(element); if (['float','cssFloat'].include(style)) style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); style = style.camelize(); var value = element.style[style]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css[style] : null; } else if (element.currentStyle) { value = element.currentStyle[style]; } } if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) value = element['offset'+style.capitalize()] + 'px'; if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) if (Element.getStyle(element, 'position') == 'static') value = 'auto'; if(style == 'opacity') { if(value) return parseFloat(value); if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) if(value[1]) return parseFloat(value[1]) / 100; return 1.0; } return value == 'auto' ? null : value; }, setStyle: function(element, style) { element = $(element); for (var name in style) { var value = style[name]; if(name == 'opacity') { if (value == 1) { value = (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else if(value == '') { if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else { if(value < 0.00001) value = 0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + 'alpha(opacity='+value*100+')'; } } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; element.style[name.camelize()] = value; } return element; }, getDimensions: function(element) { element = $(element); var display = $(element).getStyle('display'); if (display != 'none' && display != null) // Safari bug return {width: element.offsetWidth, height: element.offsetHeight}; // All *Width and *Height properties give 0 on elements with display none, // so enable the element temporarily var els = element.style; var originalVisibility = els.visibility; var originalPosition = els.position; var originalDisplay = els.display; els.visibility = 'hidden'; els.position = 'absolute'; els.display = 'block'; var originalWidth = element.clientWidth; var originalHeight = element.clientHeight; els.display = originalDisplay; els.position = originalPosition; els.visibility = originalVisibility; return {width: originalWidth, height: originalHeight}; }, makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; // Opera returns the offset relative to the positioning context, when an // element is position relative but top and left have not been defined if (window.opera) { element.style.top = 0; element.style.left = 0; } } return element; }, undoPositioned: function(element) { element = $(element); if (element._madePositioned) { element._madePositioned = undefined; element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; } return element; }, makeClipping: function(element) { element = $(element); if (element._overflow) return element; element._overflow = element.style.overflow || 'auto'; if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') element.style.overflow = 'hidden'; return element; }, undoClipping: function(element) { element = $(element); if (!element._overflow) return element; element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; element._overflow = null; return element; } }; Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); Element._attributeTranslations = {}; Element._attributeTranslations.names = { colspan: "colSpan", rowspan: "rowSpan", valign: "vAlign", datetime: "dateTime", accesskey: "accessKey", tabindex: "tabIndex", enctype: "encType", maxlength: "maxLength", readonly: "readOnly", longdesc: "longDesc" }; Element._attributeTranslations.values = { _getAttr: function(element, attribute) { return element.getAttribute(attribute, 2); }, _flag: function(element, attribute) { return $(element).hasAttribute(attribute) ? attribute : null; }, style: function(element) { return element.style.cssText.toLowerCase(); }, title: function(element) { var node = element.getAttributeNode('title'); return node.specified ? node.nodeValue : null; } }; Object.extend(Element._attributeTranslations.values, { href: Element._attributeTranslations.values._getAttr, src: Element._attributeTranslations.values._getAttr, disabled: Element._attributeTranslations.values._flag, checked: Element._attributeTranslations.values._flag, readonly: Element._attributeTranslations.values._flag, multiple: Element._attributeTranslations.values._flag }); Element.Methods.Simulated = { hasAttribute: function(element, attribute) { var t = Element._attributeTranslations; attribute = t.names[attribute] || attribute; return $(element).getAttributeNode(attribute).specified; } }; // IE is missing .innerHTML support for TABLE-related elements if (document.all && !window.opera){ Element.Methods.update = function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); var tagName = element.tagName.toUpperCase(); if (['THEAD','TBODY','TR','TD'].include(tagName)) { var div = document.createElement('div'); switch (tagName) { case 'THEAD': case 'TBODY': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 2; break; case 'TR': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 3; break; case 'TD': div.innerHTML = '
    ' + html.stripScripts() + '
    '; depth = 4; } $A(element.childNodes).each(function(node){ element.removeChild(node) }); depth.times(function(){ div = div.firstChild }); $A(div.childNodes).each( function(node){ element.appendChild(node) }); } else { element.innerHTML = html.stripScripts(); } setTimeout(function() {html.evalScripts()}, 10); return element; } }; Object.extend(Element, Element.Methods); var _nativeExtensions = false; if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { var className = 'HTML' + tag + 'Element'; if(window[className]) return; var klass = window[className] = {}; klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; }); Element.addMethods = function(methods) { Object.extend(Element.Methods, methods || {}); function copy(methods, destination, onlyIfAbsent) { onlyIfAbsent = onlyIfAbsent || false; var cache = Element.extend.cache; for (var property in methods) { var value = methods[property]; if (!onlyIfAbsent || !(property in destination)) destination[property] = cache.findOrStore(value); } } if (typeof HTMLElement != 'undefined') { copy(Element.Methods, HTMLElement.prototype); copy(Element.Methods.Simulated, HTMLElement.prototype, true); copy(Form.Methods, HTMLFormElement.prototype); [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { copy(Form.Element.Methods, klass.prototype); }); _nativeExtensions = true; } } var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content.stripScripts(); if (this.adjacency && this.element.insertAdjacentHTML) { try { this.element.insertAdjacentHTML(this.adjacency, this.content); } catch (e) { var tagName = this.element.tagName.toUpperCase(); if (['TBODY', 'TR'].include(tagName)) { this.insertContent(this.contentFromAnonymousTable()); } else { throw e; } } } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.insertContent([this.range.createContextualFragment(this.content)]); } setTimeout(function() {content.evalScripts()}, 10); }, contentFromAnonymousTable: function() { var div = document.createElement('div'); div.innerHTML = '' + this.content + '
    '; return $A(div.childNodes[0].childNodes[0].childNodes); } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element); }).bind(this)); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function(fragments) { fragments.reverse(false).each((function(fragment) { this.element.insertBefore(fragment, this.element.firstChild); }).bind(this)); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.appendChild(fragment); }).bind(this)); } }); Insertion.After = Class.create(); Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element.nextSibling); }).bind(this)); } }); /*--------------------------------------------------------------------------*/ Element.ClassNames = Class.create(); Element.ClassNames.prototype = { initialize: function(element) { this.element = $(element); }, _each: function(iterator) { this.element.className.split(/\s+/).select(function(name) { return name.length > 0; })._each(iterator); }, set: function(className) { this.element.className = className; }, add: function(classNameToAdd) { if (this.include(classNameToAdd)) return; this.set($A(this).concat(classNameToAdd).join(' ')); }, remove: function(classNameToRemove) { if (!this.include(classNameToRemove)) return; this.set($A(this).without(classNameToRemove).join(' ')); }, toString: function() { return $A(this).join(' '); } }; Object.extend(Element.ClassNames.prototype, Enumerable); var Selector = Class.create(); Selector.prototype = { initialize: function(expression) { this.params = {classNames: []}; this.expression = expression.toString().strip(); this.parseExpression(); this.compileMatcher(); }, parseExpression: function() { function abort(message) { throw 'Parse error in selector: ' + message; } if (this.expression == '') abort('empty expression'); var params = this.params, expr = this.expression, match, modifier, clause, rest; while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { params.attributes = params.attributes || []; params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); expr = match[1]; } if (expr == '*') return this.params.wildcard = true; while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { modifier = match[1], clause = match[2], rest = match[3]; switch (modifier) { case '#': params.id = clause; break; case '.': params.classNames.push(clause); break; case '': case undefined: params.tagName = clause.toUpperCase(); break; default: abort(expr.inspect()); } expr = rest; } if (expr.length > 0) abort(expr.inspect()); }, buildMatchExpression: function() { var params = this.params, conditions = [], clause; if (params.wildcard) conditions.push('true'); if (clause = params.id) conditions.push('element.readAttribute("id") == ' + clause.inspect()); if (clause = params.tagName) conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); if ((clause = params.classNames).length > 0) for (var i = 0, length = clause.length; i < length; i++) conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); if (clause = params.attributes) { clause.each(function(attribute) { var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; var splitValueBy = function(delimiter) { return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; } switch (attribute.operator) { case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; case '|=': conditions.push( splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() ); break; case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; case '': case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; default: throw 'Unknown operator ' + attribute.operator + ' in selector'; } }); } return conditions.join(' && '); }, compileMatcher: function() { this.match = new Function('element', 'if (!element.tagName) return false; \ element = $(element); \ return ' + this.buildMatchExpression()); }, findElements: function(scope) { var element; if (element = $(this.params.id)) if (this.match(element)) if (!scope || Element.childOf(element, scope)) return [element]; scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); var results = []; for (var i = 0, length = scope.length; i < length; i++) if (this.match(element = scope[i])) results.push(Element.extend(element)); return results; }, toString: function() { return this.expression; } } Object.extend(Selector, { matchElements: function(elements, expression) { var selector = new Selector(expression); return elements.select(selector.match.bind(selector)).map(Element.extend); }, findElement: function(elements, expression, index) { if (typeof expression == 'number') index = expression, expression = false; return Selector.matchElements(elements, expression || '*')[index || 0]; }, findChildElements: function(element, expressions) { return expressions.map(function(expression) { return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { var selector = new Selector(expr); return results.inject([], function(elements, result) { return elements.concat(selector.findElements(result || element)); }); }); }).flatten(); } }); function $$() { return Selector.findChildElements(document, $A(arguments)); } var Form = { reset: function(form) { $(form).reset(); return form; }, serializeElements: function(elements, getHash) { var data = elements.inject({}, function(result, element) { if (!element.disabled && element.name) { var key = element.name, value = $(element).getValue(); if (value != undefined) { if (result[key]) { if (result[key].constructor != Array) result[key] = [result[key]]; result[key].push(value); } else result[key] = value; } } return result; }); return getHash ? data : Hash.toQueryString(data); } }; Form.Methods = { serialize: function(form, getHash) { return Form.serializeElements(Form.getElements(form), getHash); }, getElements: function(form) { return $A($(form).getElementsByTagName('*')).inject([], function(elements, child) { if (Form.Element.Serializers[child.tagName.toLowerCase()]) elements.push(Element.extend(child)); return elements; } ); }, getInputs: function(form, typeName, name) { form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return $A(inputs).map(Element.extend); for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(Element.extend(input)); } return matchingInputs; }, disable: function(form) { form = $(form); form.getElements().each(function(element) { element.blur(); element.disabled = 'true'; }); return form; }, enable: function(form) { form = $(form); form.getElements().each(function(element) { element.disabled = ''; }); return form; }, findFirstElement: function(form) { return $(form).getElements().find(function(element) { return element.type != 'hidden' && !element.disabled && ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); }); }, focusFirstElement: function(form) { form = $(form); form.findFirstElement().activate(); return form; } } Object.extend(Form, Form.Methods); /*--------------------------------------------------------------------------*/ Form.Element = { focus: function(element) { $(element).focus(); return element; }, select: function(element) { $(element).select(); return element; } } Form.Element.Methods = { serialize: function(element) { element = $(element); if (!element.disabled && element.name) { var value = element.getValue(); if (value != undefined) { var pair = {}; pair[element.name] = value; return Hash.toQueryString(pair); } } return ''; }, getValue: function(element) { element = $(element); var method = element.tagName.toLowerCase(); return Form.Element.Serializers[method](element); }, clear: function(element) { $(element).value = ''; return element; }, present: function(element) { return $(element).value != ''; }, activate: function(element) { element = $(element); element.focus(); if (element.select && ( element.tagName.toLowerCase() != 'input' || !['button', 'reset', 'submit'].include(element.type) ) ) element.select(); return element; }, disable: function(element) { element = $(element); element.disabled = true; return element; }, enable: function(element) { element = $(element); element.blur(); element.disabled = false; return element; } } Object.extend(Form.Element, Form.Element.Methods); var Field = Form.Element; var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); default: return Form.Element.Serializers.textarea(element); } }, inputSelector: function(element) { return element.checked ? element.value : null; }, textarea: function(element) { return element.value; }, select: function(element) { return this[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, selectOne: function(element) { var index = element.selectedIndex; return index >= 0 ? this.optionValue(element.options[index]) : null; }, selectMany: function(element) { var values, length = element.length; if (!length) return null; for (var i = 0, values = []; i < length; i++) { var opt = element.options[i]; if (opt.selected) values.push(this.optionValue(opt)); } return values; }, optionValue: function(opt) { // extend element because hasAttribute may not be native return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; } } /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); var changed = ('string' == typeof this.lastValue && 'string' == typeof value ? this.lastValue != value : String(this.lastValue) != String(value)); if (changed) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { Form.getElements(this.element).each(this.registerCallback.bind(this)); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': Event.observe(element, 'click', this.onElementEvent.bind(this)); break; default: Event.observe(element, 'change', this.onElementEvent.bind(this)); break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, KEY_HOME: 36, KEY_END: 35, KEY_PAGEUP: 33, KEY_PAGEDOWN: 34, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0, length = Event.observers.length; i < length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) name = 'keydown'; Event._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { try { element.detachEvent('on' + name, observer); } catch (e) {} } } }); /* prevent memory leaks in IE */ if (navigator.appVersion.match(/\bMSIE\b/)) Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, positionedOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; if (element) { if(element.tagName=='BODY') break; var p = Element.getStyle(element, 'position'); if (p == 'relative' || p == 'absolute') break; } } while (element); return [valueL, valueT]; }, offsetParent: function(element) { if (element.offsetParent) return element.offsetParent; if (element == document.body) return element; while ((element = element.parentNode) && element != document.body) if (Element.getStyle(element, 'position') != 'static') return element; return document.body; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, page: function(forElement) { var valueT = 0, valueL = 0; var element = forElement; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; // Safari fix if (element.offsetParent==document.body) if (Element.getStyle(element,'position')=='absolute') break; } while (element = element.offsetParent); element = forElement; do { if (!window.opera || element.tagName=='BODY') { valueT -= element.scrollTop || 0; valueL -= element.scrollLeft || 0; } } while (element = element.parentNode); return [valueL, valueT]; }, clone: function(source, target) { var options = Object.extend({ setLeft: true, setTop: true, setWidth: true, setHeight: true, offsetTop: 0, offsetLeft: 0 }, arguments[2] || {}) // find page position of source source = $(source); var p = Position.page(source); // find coordinate system to use target = $(target); var delta = [0, 0]; var parent = null; // delta [0,0] will do fine with position: fixed elements, // position:absolute needs offsetParent deltas if (Element.getStyle(target,'position') == 'absolute') { parent = Position.offsetParent(target); delta = Position.page(parent); } // correct by body offsets (fixes Safari) if (parent == document.body) { delta[0] -= document.body.offsetLeft; delta[1] -= document.body.offsetTop; } // set position if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; if(options.setWidth) target.style.width = source.offsetWidth + 'px'; if(options.setHeight) target.style.height = source.offsetHeight + 'px'; }, absolutize: function(element) { element = $(element); if (element.style.position == 'absolute') return; Position.prepare(); var offsets = Position.positionedOffset(element); var top = offsets[1]; var left = offsets[0]; var width = element.clientWidth; var height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); element._originalWidth = element.style.width; element._originalHeight = element.style.height; element.style.position = 'absolute'; element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.width = width + 'px'; element.style.height = height + 'px'; }, relativize: function(element) { element = $(element); if (element.style.position == 'relative') return; Position.prepare(); element.style.position = 'relative'; var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.height = element._originalHeight; element.style.width = element._originalWidth; } } // Safari returns margins on body which is incorrect if the child is absolutely // positioned. For performance reasons, redefine Position.cumulativeOffset for // KHTML/WebKit only. if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { Position.cumulativeOffset = function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; if (element.offsetParent == document.body) if (Element.getStyle(element, 'position') == 'absolute') break; element = element.offsetParent; } while (element); return [valueL, valueT]; } } Element.addMethods();%wordpress/wp-includes/js/quicktags.js%// new edit toolbar used with permission // by Alex King // http://www.alexking.org/ var edButtons = new Array(); var edLinks = new Array(); var edOpenTags = new Array(); function edButton(id, display, tagStart, tagEnd, access, open) { this.id = id; // used to name the toolbar button this.display = display; // label on button this.tagStart = tagStart; // open tag this.tagEnd = tagEnd; // close tag this.access = access; // access key this.open = open; // set to -1 if tag does not need to be closed } function zeroise(number, threshold) { // FIXME: or we could use an implementation of printf in js here var str = number.toString(); if (number < 0) { str = str.substr(1, str.length) } while (str.length < threshold) { str = "0" + str } if (number < 0) { str = '-' + str } return str; } var now = new Date(); var datetime = now.getUTCFullYear() + '-' + zeroise(now.getUTCMonth() + 1, 2) + '-' + zeroise(now.getUTCDate(), 2) + 'T' + zeroise(now.getUTCHours(), 2) + ':' + zeroise(now.getUTCMinutes(), 2) + ':' + zeroise(now.getUTCSeconds() ,2) + '+00:00'; edButtons[edButtons.length] = new edButton('ed_strong' ,'b' ,'' ,'' ,'b' ); edButtons[edButtons.length] = new edButton('ed_em' ,'i' ,'' ,'' ,'i' ); edButtons[edButtons.length] = new edButton('ed_link' ,'link' ,'' ,'' ,'a' ); // special case edButtons[edButtons.length] = new edButton('ed_block' ,'b-quote' ,'\n\n
    ' ,'
    \n\n' ,'q' ); edButtons[edButtons.length] = new edButton('ed_del' ,'del' ,'' ,'' ,'d' ); edButtons[edButtons.length] = new edButton('ed_ins' ,'ins' ,'' ,'' ,'s' ); edButtons[edButtons.length] = new edButton('ed_img' ,'img' ,'' ,'' ,'m' ,-1 ); // special case edButtons[edButtons.length] = new edButton('ed_ul' ,'ul' ,'
      \n' ,'
    \n\n' ,'u' ); edButtons[edButtons.length] = new edButton('ed_ol' ,'ol' ,'
      \n' ,'
    \n\n' ,'o' ); edButtons[edButtons.length] = new edButton('ed_li' ,'li' ,'\t
  • ' ,'
  • \n' ,'l' ); edButtons[edButtons.length] = new edButton('ed_code' ,'code' ,'' ,'' ,'c' ); edButtons[edButtons.length] = new edButton('ed_more' ,'more' ,'' ,'' ,'t' ,-1 ); /* edButtons[edButtons.length] = new edButton('ed_next' ,'page' ,'' ,'' ,'p' ,-1 ); */ function edLink() { this.display = ''; this.URL = ''; this.newWin = 0; } edLinks[edLinks.length] = new edLink('WordPress' ,'http://wordpress.org/' ); edLinks[edLinks.length] = new edLink('alexking.org' ,'http://www.alexking.org/' ); function edShowButton(button, i) { if (button.id == 'ed_img') { document.write(''); } else if (button.id == 'ed_link') { document.write(''); } else { document.write(''); } } function edShowLinks() { var tempStr = ''; document.write(tempStr); } function edAddTag(button) { if (edButtons[button].tagEnd != '') { edOpenTags[edOpenTags.length] = button; document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value; } } function edRemoveTag(button) { for (i = 0; i < edOpenTags.length; i++) { if (edOpenTags[i] == button) { edOpenTags.splice(i, 1); document.getElementById(edButtons[button].id).value = document.getElementById(edButtons[button].id).value.replace('/', ''); } } } function edCheckOpenTags(button) { var tag = 0; for (i = 0; i < edOpenTags.length; i++) { if (edOpenTags[i] == button) { tag++; } } if (tag > 0) { return true; // tag found } else { return false; // tag not found } } function edCloseAllTags() { var count = edOpenTags.length; for (o = 0; o < count; o++) { edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]); } } function edQuickLink(i, thisSelect) { if (i > -1) { var newWin = ''; if (edLinks[i].newWin == 1) { newWin = ' target="_blank"'; } var tempStr = '' + edLinks[i].display + ''; thisSelect.selectedIndex = 0; edInsertContent(edCanvas, tempStr); } else { thisSelect.selectedIndex = 0; } } function edSpell(myField) { var word = ''; if (document.selection) { myField.focus(); var sel = document.selection.createRange(); if (sel.text.length > 0) { word = sel.text; } } else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; if (startPos != endPos) { word = myField.value.substring(startPos, endPos); } } if (word == '') { word = prompt(quicktagsL10n.wordLookup, ''); } if (word !== null && /^\w[\w ]*$/.test(word)) { window.open('http://www.answers.com/' + escape(word)); } } function edToolbar() { document.write('
    '); for (i = 0; i < edButtons.length; i++) { edShowButton(edButtons[i], i); } document.write(''); document.write(''); // edShowLinks(); // disabled by default document.write('
    '); } // insertion code function edInsertTag(myField, i) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); if (sel.text.length > 0) { sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd; } else { if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') { sel.text = edButtons[i].tagStart; edAddTag(i); } else { sel.text = edButtons[i].tagEnd; edRemoveTag(i); } } myField.focus(); } //MOZILLA/NETSCAPE support else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; var cursorPos = endPos; var scrollTop = myField.scrollTop; if (startPos != endPos) { myField.value = myField.value.substring(0, startPos) + edButtons[i].tagStart + myField.value.substring(startPos, endPos) + edButtons[i].tagEnd + myField.value.substring(endPos, myField.value.length); cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length; } else { if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') { myField.value = myField.value.substring(0, startPos) + edButtons[i].tagStart + myField.value.substring(endPos, myField.value.length); edAddTag(i); cursorPos = startPos + edButtons[i].tagStart.length; } else { myField.value = myField.value.substring(0, startPos) + edButtons[i].tagEnd + myField.value.substring(endPos, myField.value.length); edRemoveTag(i); cursorPos = startPos + edButtons[i].tagEnd.length; } } myField.focus(); myField.selectionStart = cursorPos; myField.selectionEnd = cursorPos; myField.scrollTop = scrollTop; } else { if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') { myField.value += edButtons[i].tagStart; edAddTag(i); } else { myField.value += edButtons[i].tagEnd; edRemoveTag(i); } myField.focus(); } } function edInsertContent(myField, myValue) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; myField.focus(); } //MOZILLA/NETSCAPE support else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); myField.focus(); myField.selectionStart = startPos + myValue.length; myField.selectionEnd = startPos + myValue.length; } else { myField.value += myValue; myField.focus(); } } function edInsertLink(myField, i, defaultValue) { if (!defaultValue) { defaultValue = 'http://'; } if (!edCheckOpenTags(i)) { var URL = prompt(quicktagsL10n.enterURL, defaultValue); if (URL) { edButtons[i].tagStart = ''; edInsertTag(myField, i); } } else { edInsertTag(myField, i); } } function edInsertImage(myField) { var myValue = prompt(quicktagsL10n.enterImageURL, 'http://'); if (myValue) { myValue = '' + prompt(quicktagsL10n.enterImageDescription, '') 
				+ ''; edInsertContent(myField, myValue); } } 1wordpress/wp-includes/js/scriptaculous/builder.js// script.aculo.us builder.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ var Builder = { NODEMAP: { AREA: 'map', CAPTION: 'table', COL: 'table', COLGROUP: 'table', LEGEND: 'fieldset', OPTGROUP: 'select', OPTION: 'select', PARAM: 'object', TBODY: 'table', TD: 'table', TFOOT: 'table', TH: 'table', THEAD: 'table', TR: 'table' }, // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken, // due to a Firefox bug node: function(elementName) { elementName = elementName.toUpperCase(); // try innerHTML approach var parentTag = this.NODEMAP[elementName] || 'div'; var parentElement = document.createElement(parentTag); try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 parentElement.innerHTML = "<" + elementName + ">"; } catch(e) {} var element = parentElement.firstChild || null; // see if browser added wrapping tags if(element && (element.tagName.toUpperCase() != elementName)) element = element.getElementsByTagName(elementName)[0]; // fallback to createElement approach if(!element) element = document.createElement(elementName); // abort if nothing could be created if(!element) return; // attributes (or text) if(arguments[1]) if(this._isStringOrNumber(arguments[1]) || (arguments[1] instanceof Array)) { this._children(element, arguments[1]); } else { var attrs = this._attributes(arguments[1]); if(attrs.length) { try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 parentElement.innerHTML = "<" +elementName + " " + attrs + ">"; } catch(e) {} element = parentElement.firstChild || null; // workaround firefox 1.0.X bug if(!element) { element = document.createElement(elementName); for(attr in arguments[1]) element[attr == 'class' ? 'className' : attr] = arguments[1][attr]; } if(element.tagName.toUpperCase() != elementName) element = parentElement.getElementsByTagName(elementName)[0]; } } // text, or array of children if(arguments[2]) this._children(element, arguments[2]); return element; }, _text: function(text) { return document.createTextNode(text); }, ATTR_MAP: { 'className': 'class', 'htmlFor': 'for' }, _attributes: function(attributes) { var attrs = []; for(attribute in attributes) attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) + '="' + attributes[attribute].toString().escapeHTML() + '"'); return attrs.join(" "); }, _children: function(element, children) { if(typeof children=='object') { // array can hold nodes and text children.flatten().each( function(e) { if(typeof e=='object') element.appendChild(e) else if(Builder._isStringOrNumber(e)) element.appendChild(Builder._text(e)); }); } else if(Builder._isStringOrNumber(children)) element.appendChild(Builder._text(children)); }, _isStringOrNumber: function(param) { return(typeof param=='string' || typeof param=='number'); }, build: function(html) { var element = this.node('div'); $(element).update(html.strip()); return element.down(); }, dump: function(scope) { if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " + "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " + "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/); tags.each( function(tag){ scope[tag] = function() { return Builder.node.apply(Builder, [tag].concat($A(arguments))); } }); } } 2wordpress/wp-includes/js/scriptaculous/controls.jsq4// script.aculo.us controls.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan) // (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com) // Contributors: // Richard Livsey // Rahul Bhargava // Rob Wills // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ // Autocompleter.Base handles all the autocompletion functionality // that's independent of the data source for autocompletion. This // includes drawing the autocompletion menu, observing keyboard // and mouse events, and similar. // // Specific autocompleters need to provide, at the very least, // a getUpdatedChoices function that will be invoked every time // the text inside the monitored textbox changes. This method // should get the text for which to provide autocompletion by // invoking this.getToken(), NOT by directly accessing // this.element.value. This is to allow incremental tokenized // autocompletion. Specific auto-completion logic (AJAX, etc) // belongs in getUpdatedChoices. // // Tokenized incremental autocompletion is enabled automatically // when an autocompleter is instantiated with the 'tokens' option // in the options parameter, e.g.: // new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' }); // will incrementally autocomplete with a comma as the token. // Additionally, ',' in the above example can be replaced with // a token array, e.g. { tokens: [',', '\n'] } which // enables autocompletion on multiple tokens. This is most // useful when one of the tokens is \n (a newline), as it // allows smart autocompletion after linebreaks. if(typeof Effect == 'undefined') throw("controls.js requires including script.aculo.us' effects.js library"); var Autocompleter = {} Autocompleter.Base = function() {}; Autocompleter.Base.prototype = { baseInitialize: function(element, update, options) { this.element = $(element); this.update = $(update); this.hasFocus = false; this.changed = false; this.active = false; this.index = 0; this.entryCount = 0; if(this.setOptions) this.setOptions(options); else this.options = options || {}; this.options.paramName = this.options.paramName || this.element.name; this.options.tokens = this.options.tokens || []; this.options.frequency = this.options.frequency || 0.4; this.options.minChars = this.options.minChars || 1; this.options.onShow = this.options.onShow || function(element, update){ if(!update.style.position || update.style.position=='absolute') { update.style.position = 'absolute'; Position.clone(element, update, { setHeight: false, offsetTop: element.offsetHeight }); } Effect.Appear(update,{duration:0.15}); }; this.options.onHide = this.options.onHide || function(element, update){ new Effect.Fade(update,{duration:0.15}) }; if(typeof(this.options.tokens) == 'string') this.options.tokens = new Array(this.options.tokens); this.observer = null; this.element.setAttribute('autocomplete','off'); Element.hide(this.update); Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this)); Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this)); }, show: function() { if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update); if(!this.iefix && (navigator.appVersion.indexOf('MSIE')>0) && (navigator.userAgent.indexOf('Opera')<0) && (Element.getStyle(this.update, 'position')=='absolute')) { new Insertion.After(this.update, ''); this.iefix = $(this.update.id+'_iefix'); } if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); }, fixIEOverlapping: function() { Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)}); this.iefix.style.zIndex = 1; this.update.style.zIndex = 2; Element.show(this.iefix); }, hide: function() { this.stopIndicator(); if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); if(this.iefix) Element.hide(this.iefix); }, startIndicator: function() { if(this.options.indicator) Element.show(this.options.indicator); }, stopIndicator: function() { if(this.options.indicator) Element.hide(this.options.indicator); }, onKeyPress: function(event) { if(this.active) switch(event.keyCode) { case Event.KEY_TAB: case Event.KEY_RETURN: this.selectEntry(); Event.stop(event); case Event.KEY_ESC: this.hide(); this.active = false; Event.stop(event); return; case Event.KEY_LEFT: case Event.KEY_RIGHT: return; case Event.KEY_UP: this.markPrevious(); this.render(); if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); return; case Event.KEY_DOWN: this.markNext(); this.render(); if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); return; } else if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return; this.changed = true; this.hasFocus = true; if(this.observer) clearTimeout(this.observer); this.observer = setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); }, activate: function() { this.changed = false; this.hasFocus = true; this.getUpdatedChoices(); }, onHover: function(event) { var element = Event.findElement(event, 'LI'); if(this.index != element.autocompleteIndex) { this.index = element.autocompleteIndex; this.render(); } Event.stop(event); }, onClick: function(event) { var element = Event.findElement(event, 'LI'); this.index = element.autocompleteIndex; this.selectEntry(); this.hide(); }, onBlur: function(event) { // needed to make click events working setTimeout(this.hide.bind(this), 250); this.hasFocus = false; this.active = false; }, render: function() { if(this.entryCount > 0) { for (var i = 0; i < this.entryCount; i++) this.index==i ? Element.addClassName(this.getEntry(i),"selected") : Element.removeClassName(this.getEntry(i),"selected"); if(this.hasFocus) { this.show(); this.active = true; } } else { this.active = false; this.hide(); } }, markPrevious: function() { if(this.index > 0) this.index-- else this.index = this.entryCount-1; this.getEntry(this.index).scrollIntoView(true); }, markNext: function() { if(this.index < this.entryCount-1) this.index++ else this.index = 0; this.getEntry(this.index).scrollIntoView(false); }, getEntry: function(index) { return this.update.firstChild.childNodes[index]; }, getCurrentEntry: function() { return this.getEntry(this.index); }, selectEntry: function() { this.active = false; this.updateElement(this.getCurrentEntry()); }, updateElement: function(selectedElement) { if (this.options.updateElement) { this.options.updateElement(selectedElement); return; } var value = ''; if (this.options.select) { var nodes = document.getElementsByClassName(this.options.select, selectedElement) || []; if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); } else value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); var lastTokenPos = this.findLastToken(); if (lastTokenPos != -1) { var newValue = this.element.value.substr(0, lastTokenPos + 1); var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/); if (whitespace) newValue += whitespace[0]; this.element.value = newValue + value; } else { this.element.value = value; } this.element.focus(); if (this.options.afterUpdateElement) this.options.afterUpdateElement(this.element, selectedElement); }, updateChoices: function(choices) { if(!this.changed && this.hasFocus) { this.update.innerHTML = choices; Element.cleanWhitespace(this.update); Element.cleanWhitespace(this.update.down()); if(this.update.firstChild && this.update.down().childNodes) { this.entryCount = this.update.down().childNodes.length; for (var i = 0; i < this.entryCount; i++) { var entry = this.getEntry(i); entry.autocompleteIndex = i; this.addObservers(entry); } } else { this.entryCount = 0; } this.stopIndicator(); this.index = 0; if(this.entryCount==1 && this.options.autoSelect) { this.selectEntry(); this.hide(); } else { this.render(); } } }, addObservers: function(element) { Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); Event.observe(element, "click", this.onClick.bindAsEventListener(this)); }, onObserverEvent: function() { this.changed = false; if(this.getToken().length>=this.options.minChars) { this.startIndicator(); this.getUpdatedChoices(); } else { this.active = false; this.hide(); } }, getToken: function() { var tokenPos = this.findLastToken(); if (tokenPos != -1) var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,''); else var ret = this.element.value; return /\n/.test(ret) ? '' : ret; }, findLastToken: function() { var lastTokenPos = -1; for (var i=0; i lastTokenPos) lastTokenPos = thisTokenPos; } return lastTokenPos; } } Ajax.Autocompleter = Class.create(); Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), { initialize: function(element, update, url, options) { this.baseInitialize(element, update, options); this.options.asynchronous = true; this.options.onComplete = this.onComplete.bind(this); this.options.defaultParams = this.options.parameters || null; this.url = url; }, getUpdatedChoices: function() { entry = encodeURIComponent(this.options.paramName) + '=' + encodeURIComponent(this.getToken()); this.options.parameters = this.options.callback ? this.options.callback(this.element, entry) : entry; if(this.options.defaultParams) this.options.parameters += '&' + this.options.defaultParams; new Ajax.Request(this.url, this.options); }, onComplete: function(request) { this.updateChoices(request.responseText); } }); // The local array autocompleter. Used when you'd prefer to // inject an array of autocompletion options into the page, rather // than sending out Ajax queries, which can be quite slow sometimes. // // The constructor takes four parameters. The first two are, as usual, // the id of the monitored textbox, and id of the autocompletion menu. // The third is the array you want to autocomplete from, and the fourth // is the options block. // // Extra local autocompletion options: // - choices - How many autocompletion choices to offer // // - partialSearch - If false, the autocompleter will match entered // text only at the beginning of strings in the // autocomplete array. Defaults to true, which will // match text at the beginning of any *word* in the // strings in the autocomplete array. If you want to // search anywhere in the string, additionally set // the option fullSearch to true (default: off). // // - fullSsearch - Search anywhere in autocomplete array strings. // // - partialChars - How many characters to enter before triggering // a partial match (unlike minChars, which defines // how many characters are required to do any match // at all). Defaults to 2. // // - ignoreCase - Whether to ignore case when autocompleting. // Defaults to true. // // It's possible to pass in a custom function as the 'selector' // option, if you prefer to write your own autocompletion logic. // In that case, the other options above will not apply unless // you support them. Autocompleter.Local = Class.create(); Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), { initialize: function(element, update, array, options) { this.baseInitialize(element, update, options); this.options.array = array; }, getUpdatedChoices: function() { this.updateChoices(this.options.selector(this)); }, setOptions: function(options) { this.options = Object.extend({ choices: 10, partialSearch: true, partialChars: 2, ignoreCase: true, fullSearch: false, selector: function(instance) { var ret = []; // Beginning matches var partial = []; // Inside matches var entry = instance.getToken(); var count = 0; for (var i = 0; i < instance.options.array.length && ret.length < instance.options.choices ; i++) { var elem = instance.options.array[i]; var foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase()) : elem.indexOf(entry); while (foundPos != -1) { if (foundPos == 0 && elem.length != entry.length) { ret.push("
  • " + elem.substr(0, entry.length) + "" + elem.substr(entry.length) + "
  • "); break; } else if (entry.length >= instance.options.partialChars && instance.options.partialSearch && foundPos != -1) { if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { partial.push("
  • " + elem.substr(0, foundPos) + "" + elem.substr(foundPos, entry.length) + "" + elem.substr( foundPos + entry.length) + "
  • "); break; } } foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : elem.indexOf(entry, foundPos + 1); } } if (partial.length) ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)) return "
      " + ret.join('') + "
    "; } }, options || {}); } }); // AJAX in-place editor // // see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor // Use this if you notice weird scrolling problems on some browsers, // the DOM might be a bit confused when this gets called so do this // waits 1 ms (with setTimeout) until it does the activation Field.scrollFreeActivate = function(field) { setTimeout(function() { Field.activate(field); }, 1); } Ajax.InPlaceEditor = Class.create(); Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99"; Ajax.InPlaceEditor.prototype = { initialize: function(element, url, options) { this.url = url; this.element = $(element); this.options = Object.extend({ paramName: "value", okButton: true, okText: "ok", cancelLink: true, cancelText: "cancel", savingText: "Saving...", clickToEditText: "Click to edit", okText: "ok", rows: 1, onComplete: function(transport, element) { new Effect.Highlight(element, {startcolor: this.options.highlightcolor}); }, onFailure: function(transport) { alert("Error communicating with the server: " + transport.responseText.stripTags()); }, callback: function(form) { return Form.serialize(form); }, handleLineBreaks: true, loadingText: 'Loading...', savingClassName: 'inplaceeditor-saving', loadingClassName: 'inplaceeditor-loading', formClassName: 'inplaceeditor-form', highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor, highlightendcolor: "#FFFFFF", externalControl: null, submitOnBlur: false, ajaxOptions: {}, evalScripts: false }, options || {}); if(!this.options.formId && this.element.id) { this.options.formId = this.element.id + "-inplaceeditor"; if ($(this.options.formId)) { // there's already a form with that name, don't specify an id this.options.formId = null; } } if (this.options.externalControl) { this.options.externalControl = $(this.options.externalControl); } this.originalBackground = Element.getStyle(this.element, 'background-color'); if (!this.originalBackground) { this.originalBackground = "transparent"; } this.element.title = this.options.clickToEditText; this.onclickListener = this.enterEditMode.bindAsEventListener(this); this.mouseoverListener = this.enterHover.bindAsEventListener(this); this.mouseoutListener = this.leaveHover.bindAsEventListener(this); Event.observe(this.element, 'click', this.onclickListener); Event.observe(this.element, 'mouseover', this.mouseoverListener); Event.observe(this.element, 'mouseout', this.mouseoutListener); if (this.options.externalControl) { Event.observe(this.options.externalControl, 'click', this.onclickListener); Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener); Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener); } }, enterEditMode: function(evt) { if (this.saving) return; if (this.editing) return; this.editing = true; this.onEnterEditMode(); if (this.options.externalControl) { Element.hide(this.options.externalControl); } Element.hide(this.element); this.createForm(); this.element.parentNode.insertBefore(this.form, this.element); if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField); // stop the event to avoid a page refresh in Safari if (evt) { Event.stop(evt); } return false; }, createForm: function() { this.form = document.createElement("form"); this.form.id = this.options.formId; Element.addClassName(this.form, this.options.formClassName) this.form.onsubmit = this.onSubmit.bind(this); this.createEditField(); if (this.options.textarea) { var br = document.createElement("br"); this.form.appendChild(br); } if (this.options.okButton) { okButton = document.createElement("input"); okButton.type = "submit"; okButton.value = this.options.okText; okButton.className = 'editor_ok_button'; this.form.appendChild(okButton); } if (this.options.cancelLink) { cancelLink = document.createElement("a"); cancelLink.href = "#"; cancelLink.appendChild(document.createTextNode(this.options.cancelText)); cancelLink.onclick = this.onclickCancel.bind(this); cancelLink.className = 'editor_cancel'; this.form.appendChild(cancelLink); } }, hasHTMLLineBreaks: function(string) { if (!this.options.handleLineBreaks) return false; return string.match(/
    /i); }, convertHTMLLineBreaks: function(string) { return string.replace(/
    /gi, "\n").replace(//gi, "\n").replace(/<\/p>/gi, "\n").replace(/

    /gi, ""); }, createEditField: function() { var text; if(this.options.loadTextURL) { text = this.options.loadingText; } else { text = this.getText(); } var obj = this; if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) { this.options.textarea = false; var textField = document.createElement("input"); textField.obj = this; textField.type = "text"; textField.name = this.options.paramName; textField.value = text; textField.style.backgroundColor = this.options.highlightcolor; textField.className = 'editor_field'; var size = this.options.size || this.options.cols || 0; if (size != 0) textField.size = size; if (this.options.submitOnBlur) textField.onblur = this.onSubmit.bind(this); this.editField = textField; } else { this.options.textarea = true; var textArea = document.createElement("textarea"); textArea.obj = this; textArea.name = this.options.paramName; textArea.value = this.convertHTMLLineBreaks(text); textArea.rows = this.options.rows; textArea.cols = this.options.cols || 40; textArea.className = 'editor_field'; if (this.options.submitOnBlur) textArea.onblur = this.onSubmit.bind(this); this.editField = textArea; } if(this.options.loadTextURL) { this.loadExternalText(); } this.form.appendChild(this.editField); }, getText: function() { return this.element.innerHTML; }, loadExternalText: function() { Element.addClassName(this.form, this.options.loadingClassName); this.editField.disabled = true; new Ajax.Request( this.options.loadTextURL, Object.extend({ asynchronous: true, onComplete: this.onLoadedExternalText.bind(this) }, this.options.ajaxOptions) ); }, onLoadedExternalText: function(transport) { Element.removeClassName(this.form, this.options.loadingClassName); this.editField.disabled = false; this.editField.value = transport.responseText.stripTags(); Field.scrollFreeActivate(this.editField); }, onclickCancel: function() { this.onComplete(); this.leaveEditMode(); return false; }, onFailure: function(transport) { this.options.onFailure(transport); if (this.oldInnerHTML) { this.element.innerHTML = this.oldInnerHTML; this.oldInnerHTML = null; } return false; }, onSubmit: function() { // onLoading resets these so we need to save them away for the Ajax call var form = this.form; var value = this.editField.value; // do this first, sometimes the ajax call returns before we get a chance to switch on Saving... // which means this will actually switch on Saving... *after* we've left edit mode causing Saving... // to be displayed indefinitely this.onLoading(); if (this.options.evalScripts) { new Ajax.Request( this.url, Object.extend({ parameters: this.options.callback(form, value), onComplete: this.onComplete.bind(this), onFailure: this.onFailure.bind(this), asynchronous:true, evalScripts:true }, this.options.ajaxOptions)); } else { new Ajax.Updater( { success: this.element, // don't update on failure (this could be an option) failure: null }, this.url, Object.extend({ parameters: this.options.callback(form, value), onComplete: this.onComplete.bind(this), onFailure: this.onFailure.bind(this) }, this.options.ajaxOptions)); } // stop the event to avoid a page refresh in Safari if (arguments.length > 1) { Event.stop(arguments[0]); } return false; }, onLoading: function() { this.saving = true; this.removeForm(); this.leaveHover(); this.showSaving(); }, showSaving: function() { this.oldInnerHTML = this.element.innerHTML; this.element.innerHTML = this.options.savingText; Element.addClassName(this.element, this.options.savingClassName); this.element.style.backgroundColor = this.originalBackground; Element.show(this.element); }, removeForm: function() { if(this.form) { if (this.form.parentNode) Element.remove(this.form); this.form = null; } }, enterHover: function() { if (this.saving) return; this.element.style.backgroundColor = this.options.highlightcolor; if (this.effect) { this.effect.cancel(); } Element.addClassName(this.element, this.options.hoverClassName) }, leaveHover: function() { if (this.options.backgroundColor) { this.element.style.backgroundColor = this.oldBackground; } Element.removeClassName(this.element, this.options.hoverClassName) if (this.saving) return; this.effect = new Effect.Highlight(this.element, { startcolor: this.options.highlightcolor, endcolor: this.options.highlightendcolor, restorecolor: this.originalBackground }); }, leaveEditMode: function() { Element.removeClassName(this.element, this.options.savingClassName); this.removeForm(); this.leaveHover(); this.element.style.backgroundColor = this.originalBackground; Element.show(this.element); if (this.options.externalControl) { Element.show(this.options.externalControl); } this.editing = false; this.saving = false; this.oldInnerHTML = null; this.onLeaveEditMode(); }, onComplete: function(transport) { this.leaveEditMode(); this.options.onComplete.bind(this)(transport, this.element); }, onEnterEditMode: function() {}, onLeaveEditMode: function() {}, dispose: function() { if (this.oldInnerHTML) { this.element.innerHTML = this.oldInnerHTML; } this.leaveEditMode(); Event.stopObserving(this.element, 'click', this.onclickListener); Event.stopObserving(this.element, 'mouseover', this.mouseoverListener); Event.stopObserving(this.element, 'mouseout', this.mouseoutListener); if (this.options.externalControl) { Event.stopObserving(this.options.externalControl, 'click', this.onclickListener); Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener); Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener); } } }; Ajax.InPlaceCollectionEditor = Class.create(); Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype); Object.extend(Ajax.InPlaceCollectionEditor.prototype, { createEditField: function() { if (!this.cached_selectTag) { var selectTag = document.createElement("select"); var collection = this.options.collection || []; var optionTag; collection.each(function(e,i) { optionTag = document.createElement("option"); optionTag.value = (e instanceof Array) ? e[0] : e; if((typeof this.options.value == 'undefined') && ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true; if(this.options.value==optionTag.value) optionTag.selected = true; optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); selectTag.appendChild(optionTag); }.bind(this)); this.cached_selectTag = selectTag; } this.editField = this.cached_selectTag; if(this.options.loadTextURL) this.loadExternalText(); this.form.appendChild(this.editField); this.options.callback = function(form, value) { return "value=" + encodeURIComponent(value); } } }); // Delayed observer, like Form.Element.Observer, // but waits for delay after last key input // Ideal for live-search fields Form.Element.DelayedObserver = Class.create(); Form.Element.DelayedObserver.prototype = { initialize: function(element, delay, callback) { this.delay = delay || 0.5; this.element = $(element); this.callback = callback; this.timer = null; this.lastValue = $F(this.element); Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); }, delayedListener: function(event) { if(this.lastValue == $F(this.element)) return; if(this.timer) clearTimeout(this.timer); this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); this.lastValue = $F(this.element); }, onTimerEvent: function() { this.timer = null; this.callback(this.element, $F(this.element)); } }; 2wordpress/wp-includes/js/scriptaculous/dragdrop.jsw// script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ if(typeof Effect == 'undefined') throw("dragdrop.js requires including script.aculo.us' effects.js library"); var Droppables = { drops: [], remove: function(element) { this.drops = this.drops.reject(function(d) { return d.element==$(element) }); }, add: function(element) { element = $(element); var options = Object.extend({ greedy: true, hoverclass: null, tree: false }, arguments[1] || {}); // cache containers if(options.containment) { options._containers = []; var containment = options.containment; if((typeof containment == 'object') && (containment.constructor == Array)) { containment.each( function(c) { options._containers.push($(c)) }); } else { options._containers.push($(containment)); } } if(options.accept) options.accept = [options.accept].flatten(); Element.makePositioned(element); // fix IE options.element = element; this.drops.push(options); }, findDeepestChild: function(drops) { deepest = drops[0]; for (i = 1; i < drops.length; ++i) if (Element.isParent(drops[i].element, deepest.element)) deepest = drops[i]; return deepest; }, isContained: function(element, drop) { var containmentNode; if(drop.tree) { containmentNode = element.treeNode; } else { containmentNode = element.parentNode; } return drop._containers.detect(function(c) { return containmentNode == c }); }, isAffected: function(point, element, drop) { return ( (drop.element!=element) && ((!drop._containers) || this.isContained(element, drop)) && ((!drop.accept) || (Element.classNames(element).detect( function(v) { return drop.accept.include(v) } ) )) && Position.within(drop.element, point[0], point[1]) ); }, deactivate: function(drop) { if(drop.hoverclass) Element.removeClassName(drop.element, drop.hoverclass); this.last_active = null; }, activate: function(drop) { if(drop.hoverclass) Element.addClassName(drop.element, drop.hoverclass); this.last_active = drop; }, show: function(point, element) { if(!this.drops.length) return; var affected = []; if(this.last_active) this.deactivate(this.last_active); this.drops.each( function(drop) { if(Droppables.isAffected(point, element, drop)) affected.push(drop); }); if(affected.length>0) { drop = Droppables.findDeepestChild(affected); Position.within(drop.element, point[0], point[1]); if(drop.onHover) drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); Droppables.activate(drop); } }, fire: function(event, element) { if(!this.last_active) return; Position.prepare(); if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) if (this.last_active.onDrop) this.last_active.onDrop(element, this.last_active.element, event); }, reset: function() { if(this.last_active) this.deactivate(this.last_active); } } var Draggables = { drags: [], observers: [], register: function(draggable) { if(this.drags.length == 0) { this.eventMouseUp = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.updateDrag.bindAsEventListener(this); this.eventKeypress = this.keyPress.bindAsEventListener(this); Event.observe(document, "mouseup", this.eventMouseUp); Event.observe(document, "mousemove", this.eventMouseMove); Event.observe(document, "keypress", this.eventKeypress); } this.drags.push(draggable); }, unregister: function(draggable) { this.drags = this.drags.reject(function(d) { return d==draggable }); if(this.drags.length == 0) { Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); Event.stopObserving(document, "keypress", this.eventKeypress); } }, activate: function(draggable) { if(draggable.options.delay) { this._timeout = setTimeout(function() { Draggables._timeout = null; window.focus(); Draggables.activeDraggable = draggable; }.bind(this), draggable.options.delay); } else { window.focus(); // allows keypress events if window isn't currently focused, fails for Safari this.activeDraggable = draggable; } }, deactivate: function() { this.activeDraggable = null; }, updateDrag: function(event) { if(!this.activeDraggable) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; // Mozilla-based browsers fire successive mousemove events with // the same coordinates, prevent needless redrawing (moz bug?) if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; this._lastPointer = pointer; this.activeDraggable.updateDrag(event, pointer); }, endDrag: function(event) { if(this._timeout) { clearTimeout(this._timeout); this._timeout = null; } if(!this.activeDraggable) return; this._lastPointer = null; this.activeDraggable.endDrag(event); this.activeDraggable = null; }, keyPress: function(event) { if(this.activeDraggable) this.activeDraggable.keyPress(event); }, addObserver: function(observer) { this.observers.push(observer); this._cacheObserverCallbacks(); }, removeObserver: function(element) { // element instead of observer fixes mem leaks this.observers = this.observers.reject( function(o) { return o.element==element }); this._cacheObserverCallbacks(); }, notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' if(this[eventName+'Count'] > 0) this.observers.each( function(o) { if(o[eventName]) o[eventName](eventName, draggable, event); }); if(draggable.options[eventName]) draggable.options[eventName](draggable, event); }, _cacheObserverCallbacks: function() { ['onStart','onEnd','onDrag'].each( function(eventName) { Draggables[eventName+'Count'] = Draggables.observers.select( function(o) { return o[eventName]; } ).length; }); } } /*--------------------------------------------------------------------------*/ var Draggable = Class.create(); Draggable._dragging = {}; Draggable.prototype = { initialize: function(element) { var defaults = { handle: false, reverteffect: function(element, top_offset, left_offset) { var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, queue: {scope:'_draggable', position:'end'} }); }, endeffect: function(element) { var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0; new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, queue: {scope:'_draggable', position:'end'}, afterFinish: function(){ Draggable._dragging[element] = false } }); }, zindex: 1000, revert: false, scroll: false, scrollSensitivity: 20, scrollSpeed: 15, snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } delay: 0 }; if(!arguments[1] || typeof arguments[1].endeffect == 'undefined') Object.extend(defaults, { starteffect: function(element) { element._opacity = Element.getOpacity(element); Draggable._dragging[element] = true; new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); } }); var options = Object.extend(defaults, arguments[1] || {}); this.element = $(element); if(options.handle && (typeof options.handle == 'string')) this.handle = this.element.down('.'+options.handle, 0); if(!this.handle) this.handle = $(options.handle); if(!this.handle) this.handle = this.element; if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { options.scroll = $(options.scroll); this._isScrollChild = Element.childOf(this.element, options.scroll); } Element.makePositioned(this.element); // fix IE this.delta = this.currentDelta(); this.options = options; this.dragging = false; this.eventMouseDown = this.initDrag.bindAsEventListener(this); Event.observe(this.handle, "mousedown", this.eventMouseDown); Draggables.register(this); }, destroy: function() { Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); Draggables.unregister(this); }, currentDelta: function() { return([ parseInt(Element.getStyle(this.element,'left') || '0'), parseInt(Element.getStyle(this.element,'top') || '0')]); }, initDrag: function(event) { if(typeof Draggable._dragging[this.element] != 'undefined' && Draggable._dragging[this.element]) return; if(Event.isLeftClick(event)) { // abort on form elements, fixes a Firefox issue var src = Event.element(event); if((tag_name = src.tagName.toUpperCase()) && ( tag_name=='INPUT' || tag_name=='SELECT' || tag_name=='OPTION' || tag_name=='BUTTON' || tag_name=='TEXTAREA')) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; var pos = Position.cumulativeOffset(this.element); this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); Draggables.activate(this); Event.stop(event); } }, startDrag: function(event) { this.dragging = true; if(this.options.zindex) { this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); this.element.style.zIndex = this.options.zindex; } if(this.options.ghosting) { this._clone = this.element.cloneNode(true); Position.absolutize(this.element); this.element.parentNode.insertBefore(this._clone, this.element); } if(this.options.scroll) { if (this.options.scroll == window) { var where = this._getWindowScroll(this.options.scroll); this.originalScrollLeft = where.left; this.originalScrollTop = where.top; } else { this.originalScrollLeft = this.options.scroll.scrollLeft; this.originalScrollTop = this.options.scroll.scrollTop; } } Draggables.notify('onStart', this, event); if(this.options.starteffect) this.options.starteffect(this.element); }, updateDrag: function(event, pointer) { if(!this.dragging) this.startDrag(event); Position.prepare(); Droppables.show(pointer, this.element); Draggables.notify('onDrag', this, event); this.draw(pointer); if(this.options.change) this.options.change(this); if(this.options.scroll) { this.stopScrolling(); var p; if (this.options.scroll == window) { with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } } else { p = Position.page(this.options.scroll); p[0] += this.options.scroll.scrollLeft + Position.deltaX; p[1] += this.options.scroll.scrollTop + Position.deltaY; p.push(p[0]+this.options.scroll.offsetWidth); p.push(p[1]+this.options.scroll.offsetHeight); } var speed = [0,0]; if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); this.startScrolling(speed); } // fix AppleWebKit rendering if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); Event.stop(event); }, finishDrag: function(event, success) { this.dragging = false; if(this.options.ghosting) { Position.relativize(this.element); Element.remove(this._clone); this._clone = null; } if(success) Droppables.fire(event, this.element); Draggables.notify('onEnd', this, event); var revert = this.options.revert; if(revert && typeof revert == 'function') revert = revert(this.element); var d = this.currentDelta(); if(revert && this.options.reverteffect) { this.options.reverteffect(this.element, d[1]-this.delta[1], d[0]-this.delta[0]); } else { this.delta = d; } if(this.options.zindex) this.element.style.zIndex = this.originalZ; if(this.options.endeffect) this.options.endeffect(this.element); Draggables.deactivate(this); Droppables.reset(); }, keyPress: function(event) { if(event.keyCode!=Event.KEY_ESC) return; this.finishDrag(event, false); Event.stop(event); }, endDrag: function(event) { if(!this.dragging) return; this.stopScrolling(); this.finishDrag(event, true); Event.stop(event); }, draw: function(point) { var pos = Position.cumulativeOffset(this.element); if(this.options.ghosting) { var r = Position.realOffset(this.element); pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; } var d = this.currentDelta(); pos[0] -= d[0]; pos[1] -= d[1]; if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; } var p = [0,1].map(function(i){ return (point[i]-pos[i]-this.offset[i]) }.bind(this)); if(this.options.snap) { if(typeof this.options.snap == 'function') { p = this.options.snap(p[0],p[1],this); } else { if(this.options.snap instanceof Array) { p = p.map( function(v, i) { return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this)) } else { p = p.map( function(v) { return Math.round(v/this.options.snap)*this.options.snap }.bind(this)) } }} var style = this.element.style; if((!this.options.constraint) || (this.options.constraint=='horizontal')) style.left = p[0] + "px"; if((!this.options.constraint) || (this.options.constraint=='vertical')) style.top = p[1] + "px"; if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering }, stopScrolling: function() { if(this.scrollInterval) { clearInterval(this.scrollInterval); this.scrollInterval = null; Draggables._lastScrollPointer = null; } }, startScrolling: function(speed) { if(!(speed[0] || speed[1])) return; this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; this.lastScrolled = new Date(); this.scrollInterval = setInterval(this.scroll.bind(this), 10); }, scroll: function() { var current = new Date(); var delta = current - this.lastScrolled; this.lastScrolled = current; if(this.options.scroll == window) { with (this._getWindowScroll(this.options.scroll)) { if (this.scrollSpeed[0] || this.scrollSpeed[1]) { var d = delta / 1000; this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); } } } else { this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; } Position.prepare(); Droppables.show(Draggables._lastPointer, this.element); Draggables.notify('onDrag', this); if (this._isScrollChild) { Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; if (Draggables._lastScrollPointer[0] < 0) Draggables._lastScrollPointer[0] = 0; if (Draggables._lastScrollPointer[1] < 0) Draggables._lastScrollPointer[1] = 0; this.draw(Draggables._lastScrollPointer); } if(this.options.change) this.options.change(this); }, _getWindowScroll: function(w) { var T, L, W, H; with (w.document) { if (w.document.documentElement && documentElement.scrollTop) { T = documentElement.scrollTop; L = documentElement.scrollLeft; } else if (w.document.body) { T = body.scrollTop; L = body.scrollLeft; } if (w.innerWidth) { W = w.innerWidth; H = w.innerHeight; } else if (w.document.documentElement && documentElement.clientWidth) { W = documentElement.clientWidth; H = documentElement.clientHeight; } else { W = body.offsetWidth; H = body.offsetHeight } } return { top: T, left: L, width: W, height: H }; } } /*--------------------------------------------------------------------------*/ var SortableObserver = Class.create(); SortableObserver.prototype = { initialize: function(element, observer) { this.element = $(element); this.observer = observer; this.lastValue = Sortable.serialize(this.element); }, onStart: function() { this.lastValue = Sortable.serialize(this.element); }, onEnd: function() { Sortable.unmark(); if(this.lastValue != Sortable.serialize(this.element)) this.observer(this.element) } } var Sortable = { SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, sortables: {}, _findRootElement: function(element) { while (element.tagName.toUpperCase() != "BODY") { if(element.id && Sortable.sortables[element.id]) return element; element = element.parentNode; } }, options: function(element) { element = Sortable._findRootElement($(element)); if(!element) return; return Sortable.sortables[element.id]; }, destroy: function(element){ var s = Sortable.options(element); if(s) { Draggables.removeObserver(s.element); s.droppables.each(function(d){ Droppables.remove(d) }); s.draggables.invoke('destroy'); delete Sortable.sortables[s.element.id]; } }, create: function(element) { element = $(element); var options = Object.extend({ element: element, tag: 'li', // assumes li children, override with tag: 'tagname' dropOnEmpty: false, tree: false, treeTag: 'ul', overlap: 'vertical', // one of 'vertical', 'horizontal' constraint: 'vertical', // one of 'vertical', 'horizontal', false containment: element, // also takes array of elements (or id's); or false handle: false, // or a CSS class only: false, delay: 0, hoverclass: null, ghosting: false, scroll: false, scrollSensitivity: 20, scrollSpeed: 15, format: this.SERIALIZE_RULE, onChange: Prototype.emptyFunction, onUpdate: Prototype.emptyFunction }, arguments[1] || {}); // clear any old sortable with same element this.destroy(element); // build options for the draggables var options_for_draggable = { revert: true, scroll: options.scroll, scrollSpeed: options.scrollSpeed, scrollSensitivity: options.scrollSensitivity, delay: options.delay, ghosting: options.ghosting, constraint: options.constraint, handle: options.handle }; if(options.starteffect) options_for_draggable.starteffect = options.starteffect; if(options.reverteffect) options_for_draggable.reverteffect = options.reverteffect; else if(options.ghosting) options_for_draggable.reverteffect = function(element) { element.style.top = 0; element.style.left = 0; }; if(options.endeffect) options_for_draggable.endeffect = options.endeffect; if(options.zindex) options_for_draggable.zindex = options.zindex; // build options for the droppables var options_for_droppable = { overlap: options.overlap, containment: options.containment, tree: options.tree, hoverclass: options.hoverclass, onHover: Sortable.onHover } var options_for_tree = { onHover: Sortable.onEmptyHover, overlap: options.overlap, containment: options.containment, hoverclass: options.hoverclass } // fix for gecko engine Element.cleanWhitespace(element); options.draggables = []; options.droppables = []; // drop on empty handling if(options.dropOnEmpty || options.tree) { Droppables.add(element, options_for_tree); options.droppables.push(element); } (this.findElements(element, options) || []).each( function(e) { // handles are per-draggable var handle = options.handle ? $(e).down('.'+options.handle,0) : e; options.draggables.push( new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); Droppables.add(e, options_for_droppable); if(options.tree) e.treeNode = element; options.droppables.push(e); }); if(options.tree) { (Sortable.findTreeElements(element, options) || []).each( function(e) { Droppables.add(e, options_for_tree); e.treeNode = element; options.droppables.push(e); }); } // keep reference this.sortables[element.id] = options; // for onupdate Draggables.addObserver(new SortableObserver(element, options.onUpdate)); }, // return all suitable-for-sortable elements in a guaranteed order findElements: function(element, options) { return Element.findChildren( element, options.only, options.tree ? true : false, options.tag); }, findTreeElements: function(element, options) { return Element.findChildren( element, options.only, options.tree ? true : false, options.treeTag); }, onHover: function(element, dropon, overlap) { if(Element.isParent(dropon, element)) return; if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { return; } else if(overlap>0.5) { Sortable.mark(dropon, 'before'); if(dropon.previousSibling != element) { var oldParentNode = element.parentNode; element.style.visibility = "hidden"; // fix gecko rendering dropon.parentNode.insertBefore(element, dropon); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } else { Sortable.mark(dropon, 'after'); var nextElement = dropon.nextSibling || null; if(nextElement != element) { var oldParentNode = element.parentNode; element.style.visibility = "hidden"; // fix gecko rendering dropon.parentNode.insertBefore(element, nextElement); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } }, onEmptyHover: function(element, dropon, overlap) { var oldParentNode = element.parentNode; var droponOptions = Sortable.options(dropon); if(!Element.isParent(dropon, element)) { var index; var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only}); var child = null; if(children) { var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); for (index = 0; index < children.length; index += 1) { if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { offset -= Element.offsetSize (children[index], droponOptions.overlap); } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { child = index + 1 < children.length ? children[index + 1] : null; break; } else { child = children[index]; break; } } } dropon.insertBefore(element, child); Sortable.options(oldParentNode).onChange(element); droponOptions.onChange(element); } }, unmark: function() { if(Sortable._marker) Sortable._marker.hide(); }, mark: function(dropon, position) { // mark on ghosting only var sortable = Sortable.options(dropon.parentNode); if(sortable && !sortable.ghosting) return; if(!Sortable._marker) { Sortable._marker = ($('dropmarker') || Element.extend(document.createElement('DIV'))). hide().addClassName('dropmarker').setStyle({position:'absolute'}); document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); } var offsets = Position.cumulativeOffset(dropon); Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); if(position=='after') if(sortable.overlap == 'horizontal') Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'}); else Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'}); Sortable._marker.show(); }, _tree: function(element, options, parent) { var children = Sortable.findElements(element, options) || []; for (var i = 0; i < children.length; ++i) { var match = children[i].id.match(options.format); if (!match) continue; var child = { id: encodeURIComponent(match ? match[1] : null), element: element, parent: parent, children: [], position: parent.children.length, container: $(children[i]).down(options.treeTag) } /* Get the element containing the children and recurse over it */ if (child.container) this._tree(child.container, options, child) parent.children.push (child); } return parent; }, tree: function(element) { element = $(element); var sortableOptions = this.options(element); var options = Object.extend({ tag: sortableOptions.tag, treeTag: sortableOptions.treeTag, only: sortableOptions.only, name: element.id, format: sortableOptions.format }, arguments[1] || {}); var root = { id: null, parent: null, children: [], container: element, position: 0 } return Sortable._tree(element, options, root); }, /* Construct a [i] index for a particular node */ _constructIndex: function(node) { var index = ''; do { if (node.id) index = '[' + node.position + ']' + index; } while ((node = node.parent) != null); return index; }, sequence: function(element) { element = $(element); var options = Object.extend(this.options(element), arguments[1] || {}); return $(this.findElements(element, options) || []).map( function(item) { return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; }); }, setSequence: function(element, new_sequence) { element = $(element); var options = Object.extend(this.options(element), arguments[2] || {}); var nodeMap = {}; this.findElements(element, options).each( function(n) { if (n.id.match(options.format)) nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; n.parentNode.removeChild(n); }); new_sequence.each(function(ident) { var n = nodeMap[ident]; if (n) { n[1].appendChild(n[0]); delete nodeMap[ident]; } }); }, serialize: function(element) { element = $(element); var options = Object.extend(Sortable.options(element), arguments[1] || {}); var name = encodeURIComponent( (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); if (options.tree) { return Sortable.tree(element, arguments[1]).children.map( function (item) { return [name + Sortable._constructIndex(item) + "[id]=" + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); }).flatten().join('&'); } else { return Sortable.sequence(element, arguments[1]).map( function(item) { return name + "[]=" + encodeURIComponent(item); }).join('&'); } } } // Returns true if child is contained within element Element.isParent = function(child, element) { if (!child.parentNode || child == element) return false; if (child.parentNode == element) return true; return Element.isParent(child.parentNode, element); } Element.findChildren = function(element, only, recursive, tagName) { if(!element.hasChildNodes()) return null; tagName = tagName.toUpperCase(); if(only) only = [only].flatten(); var elements = []; $A(element.childNodes).each( function(e) { if(e.tagName && e.tagName.toUpperCase()==tagName && (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) elements.push(e); if(recursive) { var grandchildren = Element.findChildren(e, only, recursive, tagName); if(grandchildren) elements.push(grandchildren); } }); return (elements.length>0 ? elements.flatten() : []); } Element.offsetSize = function (element, type) { return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')]; } 1wordpress/wp-includes/js/scriptaculous/effects.js// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // Contributors: // Justin Palmer (http://encytemedia.com/) // Mark Pilgrim (http://diveintomark.org/) // Martin Bialasinki // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ // converts rgb() and #xxx to #xxxxxx format, // returns self (or first argument) if not convertable String.prototype.parseColor = function() { var color = '#'; if(this.slice(0,4) == 'rgb(') { var cols = this.slice(4,this.length-1).split(','); var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); } else { if(this.slice(0,1) == '#') { if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); if(this.length==7) color = this.toLowerCase(); } } return(color.length==7 ? color : (arguments[0] || this)); } /*--------------------------------------------------------------------------*/ Element.collectTextNodes = function(element) { return $A($(element).childNodes).collect( function(node) { return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); }).flatten().join(''); } Element.collectTextNodesIgnoreClass = function(element, className) { return $A($(element).childNodes).collect( function(node) { return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodesIgnoreClass(node, className) : '')); }).flatten().join(''); } Element.setContentZoom = function(element, percent) { element = $(element); element.setStyle({fontSize: (percent/100) + 'em'}); if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); return element; } Element.getOpacity = function(element){ return $(element).getStyle('opacity'); } Element.setOpacity = function(element, value){ return $(element).setStyle({opacity:value}); } Element.getInlineOpacity = function(element){ return $(element).style.opacity || ''; } Element.forceRerendering = function(element) { try { element = $(element); var n = document.createTextNode(' '); element.appendChild(n); element.removeChild(n); } catch(e) { } }; /*--------------------------------------------------------------------------*/ Array.prototype.call = function() { var args = arguments; this.each(function(f){ f.apply(this, args) }); } /*--------------------------------------------------------------------------*/ var Effect = { _elementDoesNotExistError: { name: 'ElementDoesNotExistError', message: 'The specified DOM element does not exist, but is required for this effect to operate' }, tagifyText: function(element) { if(typeof Builder == 'undefined') throw("Effect.tagifyText requires including script.aculo.us' builder.js library"); var tagifyStyle = 'position:relative'; if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1'; element = $(element); $A(element.childNodes).each( function(child) { if(child.nodeType==3) { child.nodeValue.toArray().each( function(character) { element.insertBefore( Builder.node('span',{style: tagifyStyle}, character == ' ' ? String.fromCharCode(160) : character), child); }); Element.remove(child); } }); }, multiple: function(element, effect) { var elements; if(((typeof element == 'object') || (typeof element == 'function')) && (element.length)) elements = element; else elements = $(element).childNodes; var options = Object.extend({ speed: 0.1, delay: 0.0 }, arguments[2] || {}); var masterDelay = options.delay; $A(elements).each( function(element, index) { new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); }); }, PAIRS: { 'slide': ['SlideDown','SlideUp'], 'blind': ['BlindDown','BlindUp'], 'appear': ['Appear','Fade'] }, toggle: function(element, effect) { element = $(element); effect = (effect || 'appear').toLowerCase(); var options = Object.extend({ queue: { position:'end', scope:(element.id || 'global'), limit: 1 } }, arguments[2] || {}); Effect[element.visible() ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); } }; var Effect2 = Effect; // deprecated /* ------------- transitions ------------- */ Effect.Transitions = { linear: Prototype.K, sinoidal: function(pos) { return (-Math.cos(pos*Math.PI)/2) + 0.5; }, reverse: function(pos) { return 1-pos; }, flicker: function(pos) { return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; }, wobble: function(pos) { return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; }, pulse: function(pos, pulses) { pulses = pulses || 5; return ( Math.round((pos % (1/pulses)) * pulses) == 0 ? ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) ); }, none: function(pos) { return 0; }, full: function(pos) { return 1; } }; /* ------------- core effects ------------- */ Effect.ScopedQueue = Class.create(); Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), { initialize: function() { this.effects = []; this.interval = null; }, _each: function(iterator) { this.effects._each(iterator); }, add: function(effect) { var timestamp = new Date().getTime(); var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position; switch(position) { case 'front': // move unstarted effects after this effect this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { e.startOn += effect.finishOn; e.finishOn += effect.finishOn; }); break; case 'with-last': timestamp = this.effects.pluck('startOn').max() || timestamp; break; case 'end': // start effect after last queued effect has finished timestamp = this.effects.pluck('finishOn').max() || timestamp; break; } effect.startOn += timestamp; effect.finishOn += timestamp; if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) this.effects.push(effect); if(!this.interval) this.interval = setInterval(this.loop.bind(this), 15); }, remove: function(effect) { this.effects = this.effects.reject(function(e) { return e==effect }); if(this.effects.length == 0) { clearInterval(this.interval); this.interval = null; } }, loop: function() { var timePos = new Date().getTime(); for(var i=0, len=this.effects.length;i= this.startOn) { if(timePos >= this.finishOn) { this.render(1.0); this.cancel(); this.event('beforeFinish'); if(this.finish) this.finish(); this.event('afterFinish'); return; } var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); var frame = Math.round(pos * this.options.fps * this.options.duration); if(frame > this.currentFrame) { this.render(pos); this.currentFrame = frame; } } }, render: function(pos) { if(this.state == 'idle') { this.state = 'running'; this.event('beforeSetup'); if(this.setup) this.setup(); this.event('afterSetup'); } if(this.state == 'running') { if(this.options.transition) pos = this.options.transition(pos); pos *= (this.options.to-this.options.from); pos += this.options.from; this.position = pos; this.event('beforeUpdate'); if(this.update) this.update(pos); this.event('afterUpdate'); } }, cancel: function() { if(!this.options.sync) Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this); this.state = 'finished'; }, event: function(eventName) { if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); if(this.options[eventName]) this.options[eventName](this); }, inspect: function() { var data = $H(); for(property in this) if(typeof this[property] != 'function') data[property] = this[property]; return '#'; } } Effect.Parallel = Class.create(); Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), { initialize: function(effects) { this.effects = effects || []; this.start(arguments[1]); }, update: function(position) { this.effects.invoke('render', position); }, finish: function(position) { this.effects.each( function(effect) { effect.render(1.0); effect.cancel(); effect.event('beforeFinish'); if(effect.finish) effect.finish(position); effect.event('afterFinish'); }); } }); Effect.Event = Class.create(); Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), { initialize: function() { var options = Object.extend({ duration: 0 }, arguments[0] || {}); this.start(options); }, update: Prototype.emptyFunction }); Effect.Opacity = Class.create(); Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); // make this work on IE on elements without 'layout' if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom: 1}); var options = Object.extend({ from: this.element.getOpacity() || 0.0, to: 1.0 }, arguments[1] || {}); this.start(options); }, update: function(position) { this.element.setOpacity(position); } }); Effect.Move = Class.create(); Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ x: 0, y: 0, mode: 'relative' }, arguments[1] || {}); this.start(options); }, setup: function() { // Bug in Opera: Opera returns the "real" position of a static element or // relative element that does not have top/left explicitly set. // ==> Always set top and left for position relative elements in your stylesheets // (to 0 if you do not need them) this.element.makePositioned(); this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); this.originalTop = parseFloat(this.element.getStyle('top') || '0'); if(this.options.mode == 'absolute') { // absolute movement, so we need to calc deltaX and deltaY this.options.x = this.options.x - this.originalLeft; this.options.y = this.options.y - this.originalTop; } }, update: function(position) { this.element.setStyle({ left: Math.round(this.options.x * position + this.originalLeft) + 'px', top: Math.round(this.options.y * position + this.originalTop) + 'px' }); } }); // for backwards compatibility Effect.MoveBy = function(element, toTop, toLeft) { return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {})); }; Effect.Scale = Class.create(); Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { initialize: function(element, percent) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ scaleX: true, scaleY: true, scaleContent: true, scaleFromCenter: false, scaleMode: 'box', // 'box' or 'contents' or {} with provided values scaleFrom: 100.0, scaleTo: percent }, arguments[2] || {}); this.start(options); }, setup: function() { this.restoreAfterFinish = this.options.restoreAfterFinish || false; this.elementPositioning = this.element.getStyle('position'); this.originalStyle = {}; ['top','left','width','height','fontSize'].each( function(k) { this.originalStyle[k] = this.element.style[k]; }.bind(this)); this.originalTop = this.element.offsetTop; this.originalLeft = this.element.offsetLeft; var fontSize = this.element.getStyle('font-size') || '100%'; ['em','px','%','pt'].each( function(fontSizeType) { if(fontSize.indexOf(fontSizeType)>0) { this.fontSize = parseFloat(fontSize); this.fontSizeType = fontSizeType; } }.bind(this)); this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; this.dims = null; if(this.options.scaleMode=='box') this.dims = [this.element.offsetHeight, this.element.offsetWidth]; if(/^content/.test(this.options.scaleMode)) this.dims = [this.element.scrollHeight, this.element.scrollWidth]; if(!this.dims) this.dims = [this.options.scaleMode.originalHeight, this.options.scaleMode.originalWidth]; }, update: function(position) { var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); if(this.options.scaleContent && this.fontSize) this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); }, finish: function(position) { if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle); }, setDimensions: function(height, width) { var d = {}; if(this.options.scaleX) d.width = Math.round(width) + 'px'; if(this.options.scaleY) d.height = Math.round(height) + 'px'; if(this.options.scaleFromCenter) { var topd = (height - this.dims[0])/2; var leftd = (width - this.dims[1])/2; if(this.elementPositioning == 'absolute') { if(this.options.scaleY) d.top = this.originalTop-topd + 'px'; if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; } else { if(this.options.scaleY) d.top = -topd + 'px'; if(this.options.scaleX) d.left = -leftd + 'px'; } } this.element.setStyle(d); } }); Effect.Highlight = Class.create(); Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); this.start(options); }, setup: function() { // Prevent executing on elements not in the layout flow if(this.element.getStyle('display')=='none') { this.cancel(); return; } // Disable background image during the effect this.oldStyle = {}; if (!this.options.keepBackgroundImage) { this.oldStyle.backgroundImage = this.element.getStyle('background-image'); this.element.setStyle({backgroundImage: 'none'}); } if(!this.options.endcolor) this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); if(!this.options.restorecolor) this.options.restorecolor = this.element.getStyle('background-color'); // init color calculations this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); }, update: function(position) { this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) }); }, finish: function() { this.element.setStyle(Object.extend(this.oldStyle, { backgroundColor: this.options.restorecolor })); } }); Effect.ScrollTo = Class.create(); Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); this.start(arguments[1] || {}); }, setup: function() { Position.prepare(); var offsets = Position.cumulativeOffset(this.element); if(this.options.offset) offsets[1] += this.options.offset; var max = window.innerHeight ? window.height - window.innerHeight : document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight); this.scrollStart = Position.deltaY; this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart; }, update: function(position) { Position.prepare(); window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta)); } }); /* ------------- combination effects ------------- */ Effect.Fade = function(element) { element = $(element); var oldOpacity = element.getInlineOpacity(); var options = Object.extend({ from: element.getOpacity() || 1.0, to: 0.0, afterFinishInternal: function(effect) { if(effect.options.to!=0) return; effect.element.hide().setStyle({opacity: oldOpacity}); }}, arguments[1] || {}); return new Effect.Opacity(element,options); } Effect.Appear = function(element) { element = $(element); var options = Object.extend({ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), to: 1.0, // force Safari to render floated elements properly afterFinishInternal: function(effect) { effect.element.forceRerendering(); }, beforeSetup: function(effect) { effect.element.setOpacity(effect.options.from).show(); }}, arguments[1] || {}); return new Effect.Opacity(element,options); } Effect.Puff = function(element) { element = $(element); var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position'), top: element.style.top, left: element.style.left, width: element.style.width, height: element.style.height }; return new Effect.Parallel( [ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { Position.absolutize(effect.effects[0].element) }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().setStyle(oldStyle); } }, arguments[1] || {}) ); } Effect.BlindUp = function(element) { element = $(element); element.makeClipping(); return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true, afterFinishInternal: function(effect) { effect.element.hide().undoClipping(); } }, arguments[1] || {}) ); } Effect.BlindDown = function(element) { element = $(element); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makeClipping().setStyle({height: '0px'}).show(); }, afterFinishInternal: function(effect) { effect.element.undoClipping(); } }, arguments[1] || {})); } Effect.SwitchOff = function(element) { element = $(element); var oldOpacity = element.getInlineOpacity(); return new Effect.Appear(element, Object.extend({ duration: 0.4, from: 0, transition: Effect.Transitions.flicker, afterFinishInternal: function(effect) { new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true, scaleX: false, scaleContent: false, restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); } }) } }, arguments[1] || {})); } Effect.DropOut = function(element) { element = $(element); var oldStyle = { top: element.getStyle('top'), left: element.getStyle('left'), opacity: element.getInlineOpacity() }; return new Effect.Parallel( [ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ], Object.extend( { duration: 0.5, beforeSetup: function(effect) { effect.effects[0].element.makePositioned(); }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); } }, arguments[1] || {})); } Effect.Shake = function(element) { element = $(element); var oldStyle = { top: element.getStyle('top'), left: element.getStyle('left') }; return new Effect.Move(element, { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { effect.element.undoPositioned().setStyle(oldStyle); }}) }}) }}) }}) }}) }}); } Effect.SlideDown = function(element) { element = $(element).cleanWhitespace(); // SlideDown need to have the content of the element wrapped in a container element with fixed height! var oldInnerBottom = element.down().getStyle('bottom'); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: window.opera ? 0 : 1, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); if(window.opera) effect.element.setStyle({top: ''}); effect.element.makeClipping().setStyle({height: '0px'}).show(); }, afterUpdateInternal: function(effect) { effect.element.down().setStyle({bottom: (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, afterFinishInternal: function(effect) { effect.element.undoClipping().undoPositioned(); effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } }, arguments[1] || {}) ); } Effect.SlideUp = function(element) { element = $(element).cleanWhitespace(); var oldInnerBottom = element.down().getStyle('bottom'); return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box', scaleFrom: 100, restoreAfterFinish: true, beforeStartInternal: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); if(window.opera) effect.element.setStyle({top: ''}); effect.element.makeClipping().show(); }, afterUpdateInternal: function(effect) { effect.element.down().setStyle({bottom: (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom}); effect.element.down().undoPositioned(); } }, arguments[1] || {}) ); } // Bug in opera makes the TD containing this element expand for a instance after finish Effect.Squish = function(element) { return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.makeClipping(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping(); } }); } Effect.Grow = function(element) { element = $(element); var options = Object.extend({ direction: 'center', moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.full }, arguments[1] || {}); var oldStyle = { top: element.style.top, left: element.style.left, height: element.style.height, width: element.style.width, opacity: element.getInlineOpacity() }; var dims = element.getDimensions(); var initialMoveX, initialMoveY; var moveX, moveY; switch (options.direction) { case 'top-left': initialMoveX = initialMoveY = moveX = moveY = 0; break; case 'top-right': initialMoveX = dims.width; initialMoveY = moveY = 0; moveX = -dims.width; break; case 'bottom-left': initialMoveX = moveX = 0; initialMoveY = dims.height; moveY = -dims.height; break; case 'bottom-right': initialMoveX = dims.width; initialMoveY = dims.height; moveX = -dims.width; moveY = -dims.height; break; case 'center': initialMoveX = dims.width / 2; initialMoveY = dims.height / 2; moveX = -dims.width / 2; moveY = -dims.height / 2; break; } return new Effect.Move(element, { x: initialMoveX, y: initialMoveY, duration: 0.01, beforeSetup: function(effect) { effect.element.hide().makeClipping().makePositioned(); }, afterFinishInternal: function(effect) { new Effect.Parallel( [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), new Effect.Scale(effect.element, 100, { scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) ], Object.extend({ beforeSetup: function(effect) { effect.effects[0].element.setStyle({height: '0px'}).show(); }, afterFinishInternal: function(effect) { effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); } }, options) ) } }); } Effect.Shrink = function(element) { element = $(element); var options = Object.extend({ direction: 'center', moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.none }, arguments[1] || {}); var oldStyle = { top: element.style.top, left: element.style.left, height: element.style.height, width: element.style.width, opacity: element.getInlineOpacity() }; var dims = element.getDimensions(); var moveX, moveY; switch (options.direction) { case 'top-left': moveX = moveY = 0; break; case 'top-right': moveX = dims.width; moveY = 0; break; case 'bottom-left': moveX = 0; moveY = dims.height; break; case 'bottom-right': moveX = dims.width; moveY = dims.height; break; case 'center': moveX = dims.width / 2; moveY = dims.height / 2; break; } return new Effect.Parallel( [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) ], Object.extend({ beforeStartInternal: function(effect) { effect.effects[0].element.makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } }, options) ); } Effect.Pulsate = function(element) { element = $(element); var options = arguments[1] || {}; var oldOpacity = element.getInlineOpacity(); var transition = options.transition || Effect.Transitions.sinoidal; var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) }; reverser.bind(transition); return new Effect.Opacity(element, Object.extend(Object.extend({ duration: 2.0, from: 0, afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } }, options), {transition: reverser})); } Effect.Fold = function(element) { element = $(element); var oldStyle = { top: element.style.top, left: element.style.left, width: element.style.width, height: element.style.height }; element.makeClipping(); return new Effect.Scale(element, 5, Object.extend({ scaleContent: false, scaleX: false, afterFinishInternal: function(effect) { new Effect.Scale(element, 1, { scaleContent: false, scaleY: false, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().setStyle(oldStyle); } }); }}, arguments[1] || {})); }; Effect.Morph = Class.create(); Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ style: {} }, arguments[1] || {}); if (typeof options.style == 'string') { if(options.style.indexOf(':') == -1) { var cssText = '', selector = '.' + options.style; $A(document.styleSheets).reverse().each(function(styleSheet) { if (styleSheet.cssRules) cssRules = styleSheet.cssRules; else if (styleSheet.rules) cssRules = styleSheet.rules; $A(cssRules).reverse().each(function(rule) { if (selector == rule.selectorText) { cssText = rule.style.cssText; throw $break; } }); if (cssText) throw $break; }); this.style = cssText.parseStyle(); options.afterFinishInternal = function(effect){ effect.element.addClassName(effect.options.style); effect.transforms.each(function(transform) { if(transform.style != 'opacity') effect.element.style[transform.style.camelize()] = ''; }); } } else this.style = options.style.parseStyle(); } else this.style = $H(options.style) this.start(options); }, setup: function(){ function parseColor(color){ if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; color = color.parseColor(); return $R(0,2).map(function(i){ return parseInt( color.slice(i*2+1,i*2+3), 16 ) }); } this.transforms = this.style.map(function(pair){ var property = pair[0].underscore().dasherize(), value = pair[1], unit = null; if(value.parseColor('#zzzzzz') != '#zzzzzz') { value = value.parseColor(); unit = 'color'; } else if(property == 'opacity') { value = parseFloat(value); if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom: 1}); } else if(Element.CSS_LENGTH.test(value)) var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/), value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null; var originalValue = this.element.getStyle(property); return $H({ style: property, originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), targetValue: unit=='color' ? parseColor(value) : value, unit: unit }); }.bind(this)).reject(function(transform){ return ( (transform.originalValue == transform.targetValue) || ( transform.unit != 'color' && (isNaN(transform.originalValue) || isNaN(transform.targetValue)) ) ) }); }, update: function(position) { var style = $H(), value = null; this.transforms.each(function(transform){ value = transform.unit=='color' ? $R(0,2).inject('#',function(m,v,i){ return m+(Math.round(transform.originalValue[i]+ (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : transform.originalValue + Math.round( ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit; style[transform.style] = value; }); this.element.setStyle(style); } }); Effect.Transform = Class.create(); Object.extend(Effect.Transform.prototype, { initialize: function(tracks){ this.tracks = []; this.options = arguments[1] || {}; this.addTracks(tracks); }, addTracks: function(tracks){ tracks.each(function(track){ var data = $H(track).values().first(); this.tracks.push($H({ ids: $H(track).keys().first(), effect: Effect.Morph, options: { style: data } })); }.bind(this)); return this; }, play: function(){ return new Effect.Parallel( this.tracks.map(function(track){ var elements = [$(track.ids) || $$(track.ids)].flatten(); return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) }); }).flatten(), this.options ); } }); Element.CSS_PROPERTIES = $w( 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + 'fontSize fontWeight height left letterSpacing lineHeight ' + 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + 'right textIndent top width wordSpacing zIndex'); Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; String.prototype.parseStyle = function(){ var element = Element.extend(document.createElement('div')); element.innerHTML = '

    '; var style = element.down().style, styleRules = $H(); Element.CSS_PROPERTIES.each(function(property){ if(style[property]) styleRules[property] = style[property]; }); if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) { styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]; } return styleRules; }; Element.morph = function(element, style) { new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {})); return element; }; ['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom', 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( function(f) { Element.Methods[f] = Element[f]; } ); Element.Methods.visualEffect = function(element, effect, options) { s = effect.gsub(/_/, '-').camelize(); effect_class = s.charAt(0).toUpperCase() + s.substring(1); new Effect[effect_class](element, options); return $(element); }; Element.addMethods();2wordpress/wp-includes/js/scriptaculous/MIT-LICENSESCopyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.3wordpress/wp-includes/js/scriptaculous/prototype.js\/* Prototype JavaScript framework, version 1.5.0 * (c) 2005-2007 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.5.0', BrowserFeatures: { XPath: !!document.evaluate }, ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', emptyFunction: function() {}, K: function(x) { return x } } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } Object.extend(Object, { inspect: function(object) { try { if (object === undefined) return 'undefined'; if (object === null) return 'null'; return object.inspect ? object.inspect() : object.toString(); } catch (e) { if (e instanceof RangeError) return '...'; throw e; } }, keys: function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }, values: function(object) { var values = []; for (var property in object) values.push(object[property]); return values; }, clone: function(object) { return Object.extend({}, object); } }); Function.prototype.bind = function() { var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); } } Function.prototype.bindAsEventListener = function(object) { var __method = this, args = $A(arguments), object = args.shift(); return function(event) { return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); } } Object.extend(Number.prototype, { toColorPart: function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; }, succ: function() { return this + 1; }, times: function(iterator) { $R(0, this, true).each(iterator); return this; } }); var Try = { these: function() { var returnValue; for (var i = 0, length = arguments.length; i < length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, stop: function() { if (!this.timer) return; clearInterval(this.timer); this.timer = null; }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(this); } finally { this.currentlyExecuting = false; } } } } String.interpret = function(value){ return value == null ? '' : String(value); } Object.extend(String.prototype, { gsub: function(pattern, replacement) { var result = '', source = this, match; replacement = arguments.callee.prepareReplacement(replacement); while (source.length > 0) { if (match = source.match(pattern)) { result += source.slice(0, match.index); result += String.interpret(replacement(match)); source = source.slice(match.index + match[0].length); } else { result += source, source = ''; } } return result; }, sub: function(pattern, replacement, count) { replacement = this.gsub.prepareReplacement(replacement); count = count === undefined ? 1 : count; return this.gsub(pattern, function(match) { if (--count < 0) return match[0]; return replacement(match); }); }, scan: function(pattern, iterator) { this.gsub(pattern, iterator); return this; }, truncate: function(length, truncation) { length = length || 30; truncation = truncation === undefined ? '...' : truncation; return this.length > length ? this.slice(0, length - truncation.length) + truncation : this; }, strip: function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }, stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, stripScripts: function() { return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); }, extractScripts: function() { var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); return (this.match(matchAll) || []).map(function(scriptTag) { return (scriptTag.match(matchOne) || ['', ''])[1]; }); }, evalScripts: function() { return this.extractScripts().map(function(script) { return eval(script) }); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0] ? (div.childNodes.length > 1 ? $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : div.childNodes[0].nodeValue) : ''; }, toQueryParams: function(separator) { var match = this.strip().match(/([^?#]*)(#.*)?$/); if (!match) return {}; return match[1].split(separator || '&').inject({}, function(hash, pair) { if ((pair = pair.split('='))[0]) { var name = decodeURIComponent(pair[0]); var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; if (hash[name] !== undefined) { if (hash[name].constructor != Array) hash[name] = [hash[name]]; if (value) hash[name].push(value); } else hash[name] = value; } return hash; }); }, toArray: function() { return this.split(''); }, succ: function() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); }, camelize: function() { var parts = this.split('-'), len = parts.length; if (len == 1) return parts[0]; var camelized = this.charAt(0) == '-' ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) : parts[0]; for (var i = 1; i < len; i++) camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); return camelized; }, capitalize: function(){ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); }, underscore: function() { return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); }, dasherize: function() { return this.gsub(/_/,'-'); }, inspect: function(useDoubleQuotes) { var escapedString = this.replace(/\\/g, '\\\\'); if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; else return "'" + escapedString.replace(/'/g, '\\\'') + "'"; } }); String.prototype.gsub.prepareReplacement = function(replacement) { if (typeof replacement == 'function') return replacement; var template = new Template(replacement); return function(match) { return template.evaluate(match) }; } String.prototype.parseQuery = String.prototype.toQueryParams; var Template = Class.create(); Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; Template.prototype = { initialize: function(template, pattern) { this.template = template.toString(); this.pattern = pattern || Template.Pattern; }, evaluate: function(object) { return this.template.gsub(this.pattern, function(match) { var before = match[1]; if (before == '\\') return match[2]; return before + String.interpret(object[match[3]]); }); } } var $break = new Object(); var $continue = new Object(); var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch (e) { if (e != $break) throw e; } return this; }, eachSlice: function(number, iterator) { var index = -number, slices = [], array = this.toArray(); while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.map(iterator); }, all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; }, any: function(iterator) { var result = false; this.each(function(value, index) { if (result = !!(iterator || Prototype.K)(value, index)) throw $break; }); return result; }, collect: function(iterator) { var results = []; this.each(function(value, index) { results.push((iterator || Prototype.K)(value, index)); }); return results; }, detect: function(iterator) { var result; this.each(function(value, index) { if (iterator(value, index)) { result = value; throw $break; } }); return result; }, findAll: function(iterator) { var results = []; this.each(function(value, index) { if (iterator(value, index)) results.push(value); }); return results; }, grep: function(pattern, iterator) { var results = []; this.each(function(value, index) { var stringValue = value.toString(); if (stringValue.match(pattern)) results.push((iterator || Prototype.K)(value, index)); }) return results; }, include: function(object) { var found = false; this.each(function(value) { if (value == object) { found = true; throw $break; } }); return found; }, inGroupsOf: function(number, fillWith) { fillWith = fillWith === undefined ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); }, inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; }, invoke: function(method) { var args = $A(arguments).slice(1); return this.map(function(value) { return value[method].apply(value, args); }); }, max: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value >= result) result = value; }); return result; }, min: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value < result) result = value; }); return result; }, partition: function(iterator) { var trues = [], falses = []; this.each(function(value, index) { ((iterator || Prototype.K)(value, index) ? trues : falses).push(value); }); return [trues, falses]; }, pluck: function(property) { var results = []; this.each(function(value, index) { results.push(value[property]); }); return results; }, reject: function(iterator) { var results = []; this.each(function(value, index) { if (!iterator(value, index)) results.push(value); }); return results; }, sortBy: function(iterator) { return this.map(function(value, index) { return {value: value, criteria: iterator(value, index)}; }).sort(function(left, right) { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; }).pluck('value'); }, toArray: function() { return this.map(); }, zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { return iterator(collections.pluck(index)); }); }, size: function() { return this.toArray().length; }, inspect: function() { return '#'; } } Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.detect, select: Enumerable.findAll, member: Enumerable.include, entries: Enumerable.toArray }); var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0, length = iterable.length; i < length; i++) results.push(iterable[i]); return results; } } Object.extend(Array.prototype, Enumerable); if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0, length = this.length; i < length; i++) iterator(this[i]); }, clear: function() { this.length = 0; return this; }, first: function() { return this[0]; }, last: function() { return this[this.length - 1]; }, compact: function() { return this.select(function(value) { return value != null; }); }, flatten: function() { return this.inject([], function(array, value) { return array.concat(value && value.constructor == Array ? value.flatten() : [value]); }); }, without: function() { var values = $A(arguments); return this.select(function(value) { return !values.include(value); }); }, indexOf: function(object) { for (var i = 0, length = this.length; i < length; i++) if (this[i] == object) return i; return -1; }, reverse: function(inline) { return (inline !== false ? this : this.toArray())._reverse(); }, reduce: function() { return this.length > 1 ? this : this[0]; }, uniq: function() { return this.inject([], function(array, value) { return array.include(value) ? array : array.concat([value]); }); }, clone: function() { return [].concat(this); }, size: function() { return this.length; }, inspect: function() { return '[' + this.map(Object.inspect).join(', ') + ']'; } }); Array.prototype.toArray = Array.prototype.clone; function $w(string){ string = string.strip(); return string ? string.split(/\s+/) : []; } if(window.opera){ Array.prototype.concat = function(){ var array = []; for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); for(var i = 0, length = arguments.length; i < length; i++) { if(arguments[i].constructor == Array) { for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) array.push(arguments[i][j]); } else { array.push(arguments[i]); } } return array; } } var Hash = function(obj) { Object.extend(this, obj || {}); }; Object.extend(Hash, { toQueryString: function(obj) { var parts = []; this.prototype._each.call(obj, function(pair) { if (!pair.key) return; if (pair.value && pair.value.constructor == Array) { var values = pair.value.compact(); if (values.length < 2) pair.value = values.reduce(); else { key = encodeURIComponent(pair.key); values.each(function(value) { value = value != undefined ? encodeURIComponent(value) : ''; parts.push(key + '=' + encodeURIComponent(value)); }); return; } } if (pair.value == undefined) pair[1] = ''; parts.push(pair.map(encodeURIComponent).join('=')); }); return parts.join('&'); } }); Object.extend(Hash.prototype, Enumerable); Object.extend(Hash.prototype, { _each: function(iterator) { for (var key in this) { var value = this[key]; if (value && value == Hash.prototype[key]) continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, keys: function() { return this.pluck('key'); }, values: function() { return this.pluck('value'); }, merge: function(hash) { return $H(hash).inject(this, function(mergedHash, pair) { mergedHash[pair.key] = pair.value; return mergedHash; }); }, remove: function() { var result; for(var i = 0, length = arguments.length; i < length; i++) { var value = this[arguments[i]]; if (value !== undefined){ if (result === undefined) result = value; else { if (result.constructor != Array) result = [result]; result.push(value) } } delete this[arguments[i]]; } return result; }, toQueryString: function() { return Hash.toQueryString(this); }, inspect: function() { return '#'; } }); function $H(object) { if (object && object.constructor == Hash) return object; return new Hash(object); }; ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }, _each: function(iterator) { var value = this.start; while (this.include(value)) { iterator(value); value = value.succ(); } }, include: function(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } }); var $R = function(start, end, exclusive) { return new ObjectRange(start, end, exclusive); } var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, activeRequestCount: 0 } Ajax.Responders = { responders: [], _each: function(iterator) { this.responders._each(iterator); }, register: function(responder) { if (!this.include(responder)) this.responders.push(responder); }, unregister: function(responder) { this.responders = this.responders.without(responder); }, dispatch: function(callback, request, transport, json) { this.each(function(responder) { if (typeof responder[callback] == 'function') { try { responder[callback].apply(responder, [request, transport, json]); } catch (e) {} } }); } }; Object.extend(Ajax.Responders, Enumerable); Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++; }, onComplete: function() { Ajax.activeRequestCount--; } }); Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, contentType: 'application/x-www-form-urlencoded', encoding: 'UTF-8', parameters: '' } Object.extend(this.options, options || {}); this.options.method = this.options.method.toLowerCase(); if (typeof this.options.parameters == 'string') this.options.parameters = this.options.parameters.toQueryParams(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { _complete: false, initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { this.url = url; this.method = this.options.method; var params = this.options.parameters; if (!['get', 'post'].include(this.method)) { // simulate other verbs over post params['_method'] = this.method; this.method = 'post'; } params = Hash.toQueryString(params); if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' // when GET, append parameters to URL if (this.method == 'get' && params) this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; try { Ajax.Responders.dispatch('onCreate', this, this.transport); this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous); if (this.options.asynchronous) setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); this.transport.onreadystatechange = this.onStateChange.bind(this); this.setRequestHeaders(); var body = this.method == 'post' ? (this.options.postBody || params) : null; this.transport.send(body); /* Force Firefox to handle ready state 4 for synchronous requests */ if (!this.options.asynchronous && this.transport.overrideMimeType) this.onStateChange(); } catch (e) { this.dispatchException(e); } }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState > 1 && !((readyState == 4) && this._complete)) this.respondToReadyState(this.transport.readyState); }, setRequestHeaders: function() { var headers = { 'X-Requested-With': 'XMLHttpRequest', 'X-Prototype-Version': Prototype.Version, 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' }; if (this.method == 'post') { headers['Content-type'] = this.options.contentType + (this.options.encoding ? '; charset=' + this.options.encoding : ''); /* Force "Connection: close" for older Mozilla browsers to work * around a bug where XMLHttpRequest sends an incorrect * Content-length header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) headers['Connection'] = 'close'; } // user-defined headers if (typeof this.options.requestHeaders == 'object') { var extras = this.options.requestHeaders; if (typeof extras.push == 'function') for (var i = 0, length = extras.length; i < length; i += 2) headers[extras[i]] = extras[i+1]; else $H(extras).each(function(pair) { headers[pair.key] = pair.value }); } for (var name in headers) this.transport.setRequestHeader(name, headers[name]); }, success: function() { return !this.transport.status || (this.transport.status >= 200 && this.transport.status < 300); }, respondToReadyState: function(readyState) { var state = Ajax.Request.Events[readyState]; var transport = this.transport, json = this.evalJSON(); if (state == 'Complete') { try { this._complete = true; (this.options['on' + this.transport.status] || this.options['on' + (this.success() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(transport, json); } catch (e) { this.dispatchException(e); } if ((this.getHeader('Content-type') || 'text/javascript').strip(). match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) this.evalResponse(); } try { (this.options['on' + state] || Prototype.emptyFunction)(transport, json); Ajax.Responders.dispatch('on' + state, this, transport, json); } catch (e) { this.dispatchException(e); } if (state == 'Complete') { // avoid memory leak in MSIE: clean up this.transport.onreadystatechange = Prototype.emptyFunction; } }, getHeader: function(name) { try { return this.transport.getResponseHeader(name); } catch (e) { return null } }, evalJSON: function() { try { var json = this.getHeader('X-JSON'); return json ? eval('(' + json + ')') : null; } catch (e) { return null } }, evalResponse: function() { try { return eval(this.transport.responseText); } catch (e) { this.dispatchException(e); } }, dispatchException: function(exception) { (this.options.onException || Prototype.emptyFunction)(this, exception); Ajax.Responders.dispatch('onException', this, exception); } }); Ajax.Updater = Class.create(); Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { this.container = { success: (container.success || container), failure: (container.failure || (container.success ? null : container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function(transport, param) { this.updateContent(); onComplete(transport, param); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.container[this.success() ? 'success' : 'failure']; var response = this.transport.responseText; if (!this.options.evalScripts) response = response.stripScripts(); if (receiver = $(receiver)) { if (this.options.insertion) new this.options.insertion(receiver, response); else receiver.update(response); } if (this.success()) { if (this.onComplete) setTimeout(this.onComplete.bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = (this.options.decay || 1); this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.options.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); function $(element) { if (arguments.length > 1) { for (var i = 0, elements = [], length = arguments.length; i < length; i++) elements.push($(arguments[i])); return elements; } if (typeof element == 'string') element = document.getElementById(element); return Element.extend(element); } if (Prototype.BrowserFeatures.XPath) { document._getElementsByXPath = function(expression, parentElement) { var results = []; var query = document.evaluate(expression, $(parentElement) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i)); return results; }; } document.getElementsByClassName = function(className, parentElement) { if (Prototype.BrowserFeatures.XPath) { var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; return document._getElementsByXPath(q, parentElement); } else { var children = ($(parentElement) || document.body).getElementsByTagName('*'); var elements = [], child; for (var i = 0, length = children.length; i < length; i++) { child = children[i]; if (Element.hasClassName(child, className)) elements.push(Element.extend(child)); } return elements; } }; /*--------------------------------------------------------------------------*/ if (!window.Element) var Element = new Object(); Element.extend = function(element) { if (!element || _nativeExtensions || element.nodeType == 3) return element; if (!element._extended && element.tagName && element != window) { var methods = Object.clone(Element.Methods), cache = Element.extend.cache; if (element.tagName == 'FORM') Object.extend(methods, Form.Methods); if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) Object.extend(methods, Form.Element.Methods); Object.extend(methods, Element.Methods.Simulated); for (var property in methods) { var value = methods[property]; if (typeof value == 'function' && !(property in element)) element[property] = cache.findOrStore(value); } } element._extended = true; return element; }; Element.extend.cache = { findOrStore: function(value) { return this[value] = this[value] || function() { return value.apply(null, [this].concat($A(arguments))); } } }; Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; }, toggle: function(element) { element = $(element); Element[Element.visible(element) ? 'hide' : 'show'](element); return element; }, hide: function(element) { $(element).style.display = 'none'; return element; }, show: function(element) { $(element).style.display = ''; return element; }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); return element; }, update: function(element, html) { html = typeof html == 'undefined' ? '' : html.toString(); $(element).innerHTML = html.stripScripts(); setTimeout(function() {html.evalScripts()}, 10); return element; }, replace: function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); if (element.outerHTML) { element.outerHTML = html.stripScripts(); } else { var range = element.ownerDocument.createRange(); range.selectNodeContents(element); element.parentNode.replaceChild( range.createContextualFragment(html.stripScripts()), element); } setTimeout(function() {html.evalScripts()}, 10); return element; }, inspect: function(element) { element = $(element); var result = '<' + element.tagName.toLowerCase(); $H({'id': 'id', 'className': 'class'}).each(function(pair) { var property = pair.first(), attribute = pair.last(); var value = (element[property] || '').toString(); if (value) result += ' ' + attribute + '=' + value.inspect(true); }); return result + '>'; }, recursivelyCollect: function(element, property) { element = $(element); var elements = []; while (element = element[property]) if (element.nodeType == 1) elements.push(Element.extend(element)); return elements; }, ancestors: function(element) { return $(element).recursivelyCollect('parentNode'); }, descendants: function(element) { return $A($(element).getElementsByTagName('*')); }, immediateDescendants: function(element) { if (!(element = $(element).firstChild)) return []; while (element && element.nodeType != 1) element = element.nextSibling; if (element) return [element].concat($(element).nextSiblings()); return []; }, previousSiblings: function(element) { return $(element).recursivelyCollect('previousSibling'); }, nextSiblings: function(element) { return $(element).recursivelyCollect('nextSibling'); }, siblings: function(element) { element = $(element); return element.previousSiblings().reverse().concat(element.nextSiblings()); }, match: function(element, selector) { if (typeof selector == 'string') selector = new Selector(selector); return selector.match($(element)); }, up: function(element, expression, index) { return Selector.findElement($(element).ancestors(), expression, index); }, down: function(element, expression, index) { return Selector.findElement($(element).descendants(), expression, index); }, previous: function(element, expression, index) { return Selector.findElement($(element).previousSiblings(), expression, index); }, next: function(element, expression, index) { return Selector.findElement($(element).nextSiblings(), expression, index); }, getElementsBySelector: function() { var args = $A(arguments), element = $(args.shift()); return Selector.findChildElements(element, args); }, getElementsByClassName: function(element, className) { return document.getElementsByClassName(className, element); }, readAttribute: function(element, name) { element = $(element); if (document.all && !window.opera) { var t = Element._attributeTranslations; if (t.values[name]) return t.values[name](element, name); if (t.names[name]) name = t.names[name]; var attribute = element.attributes[name]; if(attribute) return attribute.nodeValue; } return element.getAttribute(name); }, getHeight: function(element) { return $(element).getDimensions().height; }, getWidth: function(element) { return $(element).getDimensions().width; }, classNames: function(element) { return new Element.ClassNames(element); }, hasClassName: function(element, className) { if (!(element = $(element))) return; var elementClassName = element.className; if (elementClassName.length == 0) return false; if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) return true; return false; }, addClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).add(className); return element; }, removeClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).remove(className); return element; }, toggleClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); return element; }, observe: function() { Event.observe.apply(Event, arguments); return $A(arguments).first(); }, stopObserving: function() { Event.stopObserving.apply(Event, arguments); return $A(arguments).first(); }, // removes whitespace-only text node children cleanWhitespace: function(element) { element = $(element); var node = element.firstChild; while (node) { var nextNode = node.nextSibling; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) element.removeChild(node); node = nextNode; } return element; }, empty: function(element) { return $(element).innerHTML.match(/^\s*$/); }, descendantOf: function(element, ancestor) { element = $(element), ancestor = $(ancestor); while (element = element.parentNode) if (element == ancestor) return true; return false; }, scrollTo: function(element) { element = $(element); var pos = Position.cumulativeOffset(element); window.scrollTo(pos[0], pos[1]); return element; }, getStyle: function(element, style) { element = $(element); if (['float','cssFloat'].include(style)) style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); style = style.camelize(); var value = element.style[style]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css[style] : null; } else if (element.currentStyle) { value = element.currentStyle[style]; } } if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) value = element['offset'+style.capitalize()] + 'px'; if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) if (Element.getStyle(element, 'position') == 'static') value = 'auto'; if(style == 'opacity') { if(value) return parseFloat(value); if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) if(value[1]) return parseFloat(value[1]) / 100; return 1.0; } return value == 'auto' ? null : value; }, setStyle: function(element, style) { element = $(element); for (var name in style) { var value = style[name]; if(name == 'opacity') { if (value == 1) { value = (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else if(value == '') { if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else { if(value < 0.00001) value = 0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + 'alpha(opacity='+value*100+')'; } } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; element.style[name.camelize()] = value; } return element; }, getDimensions: function(element) { element = $(element); var display = $(element).getStyle('display'); if (display != 'none' && display != null) // Safari bug return {width: element.offsetWidth, height: element.offsetHeight}; // All *Width and *Height properties give 0 on elements with display none, // so enable the element temporarily var els = element.style; var originalVisibility = els.visibility; var originalPosition = els.position; var originalDisplay = els.display; els.visibility = 'hidden'; els.position = 'absolute'; els.display = 'block'; var originalWidth = element.clientWidth; var originalHeight = element.clientHeight; els.display = originalDisplay; els.position = originalPosition; els.visibility = originalVisibility; return {width: originalWidth, height: originalHeight}; }, makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; // Opera returns the offset relative to the positioning context, when an // element is position relative but top and left have not been defined if (window.opera) { element.style.top = 0; element.style.left = 0; } } return element; }, undoPositioned: function(element) { element = $(element); if (element._madePositioned) { element._madePositioned = undefined; element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; } return element; }, makeClipping: function(element) { element = $(element); if (element._overflow) return element; element._overflow = element.style.overflow || 'auto'; if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') element.style.overflow = 'hidden'; return element; }, undoClipping: function(element) { element = $(element); if (!element._overflow) return element; element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; element._overflow = null; return element; } }; Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); Element._attributeTranslations = {}; Element._attributeTranslations.names = { colspan: "colSpan", rowspan: "rowSpan", valign: "vAlign", datetime: "dateTime", accesskey: "accessKey", tabindex: "tabIndex", enctype: "encType", maxlength: "maxLength", readonly: "readOnly", longdesc: "longDesc" }; Element._attributeTranslations.values = { _getAttr: function(element, attribute) { return element.getAttribute(attribute, 2); }, _flag: function(element, attribute) { return $(element).hasAttribute(attribute) ? attribute : null; }, style: function(element) { return element.style.cssText.toLowerCase(); }, title: function(element) { var node = element.getAttributeNode('title'); return node.specified ? node.nodeValue : null; } }; Object.extend(Element._attributeTranslations.values, { href: Element._attributeTranslations.values._getAttr, src: Element._attributeTranslations.values._getAttr, disabled: Element._attributeTranslations.values._flag, checked: Element._attributeTranslations.values._flag, readonly: Element._attributeTranslations.values._flag, multiple: Element._attributeTranslations.values._flag }); Element.Methods.Simulated = { hasAttribute: function(element, attribute) { var t = Element._attributeTranslations; attribute = t.names[attribute] || attribute; return $(element).getAttributeNode(attribute).specified; } }; // IE is missing .innerHTML support for TABLE-related elements if (document.all && !window.opera){ Element.Methods.update = function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); var tagName = element.tagName.toUpperCase(); if (['THEAD','TBODY','TR','TD'].include(tagName)) { var div = document.createElement('div'); switch (tagName) { case 'THEAD': case 'TBODY': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 2; break; case 'TR': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 3; break; case 'TD': div.innerHTML = '
    ' + html.stripScripts() + '
    '; depth = 4; } $A(element.childNodes).each(function(node){ element.removeChild(node) }); depth.times(function(){ div = div.firstChild }); $A(div.childNodes).each( function(node){ element.appendChild(node) }); } else { element.innerHTML = html.stripScripts(); } setTimeout(function() {html.evalScripts()}, 10); return element; } }; Object.extend(Element, Element.Methods); var _nativeExtensions = false; if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { var className = 'HTML' + tag + 'Element'; if(window[className]) return; var klass = window[className] = {}; klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; }); Element.addMethods = function(methods) { Object.extend(Element.Methods, methods || {}); function copy(methods, destination, onlyIfAbsent) { onlyIfAbsent = onlyIfAbsent || false; var cache = Element.extend.cache; for (var property in methods) { var value = methods[property]; if (!onlyIfAbsent || !(property in destination)) destination[property] = cache.findOrStore(value); } } if (typeof HTMLElement != 'undefined') { copy(Element.Methods, HTMLElement.prototype); copy(Element.Methods.Simulated, HTMLElement.prototype, true); copy(Form.Methods, HTMLFormElement.prototype); [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { copy(Form.Element.Methods, klass.prototype); }); _nativeExtensions = true; } } var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content.stripScripts(); if (this.adjacency && this.element.insertAdjacentHTML) { try { this.element.insertAdjacentHTML(this.adjacency, this.content); } catch (e) { var tagName = this.element.tagName.toUpperCase(); if (['TBODY', 'TR'].include(tagName)) { this.insertContent(this.contentFromAnonymousTable()); } else { throw e; } } } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.insertContent([this.range.createContextualFragment(this.content)]); } setTimeout(function() {content.evalScripts()}, 10); }, contentFromAnonymousTable: function() { var div = document.createElement('div'); div.innerHTML = '' + this.content + '
    '; return $A(div.childNodes[0].childNodes[0].childNodes); } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element); }).bind(this)); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function(fragments) { fragments.reverse(false).each((function(fragment) { this.element.insertBefore(fragment, this.element.firstChild); }).bind(this)); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.appendChild(fragment); }).bind(this)); } }); Insertion.After = Class.create(); Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element.nextSibling); }).bind(this)); } }); /*--------------------------------------------------------------------------*/ Element.ClassNames = Class.create(); Element.ClassNames.prototype = { initialize: function(element) { this.element = $(element); }, _each: function(iterator) { this.element.className.split(/\s+/).select(function(name) { return name.length > 0; })._each(iterator); }, set: function(className) { this.element.className = className; }, add: function(classNameToAdd) { if (this.include(classNameToAdd)) return; this.set($A(this).concat(classNameToAdd).join(' ')); }, remove: function(classNameToRemove) { if (!this.include(classNameToRemove)) return; this.set($A(this).without(classNameToRemove).join(' ')); }, toString: function() { return $A(this).join(' '); } }; Object.extend(Element.ClassNames.prototype, Enumerable); var Selector = Class.create(); Selector.prototype = { initialize: function(expression) { this.params = {classNames: []}; this.expression = expression.toString().strip(); this.parseExpression(); this.compileMatcher(); }, parseExpression: function() { function abort(message) { throw 'Parse error in selector: ' + message; } if (this.expression == '') abort('empty expression'); var params = this.params, expr = this.expression, match, modifier, clause, rest; while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { params.attributes = params.attributes || []; params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); expr = match[1]; } if (expr == '*') return this.params.wildcard = true; while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { modifier = match[1], clause = match[2], rest = match[3]; switch (modifier) { case '#': params.id = clause; break; case '.': params.classNames.push(clause); break; case '': case undefined: params.tagName = clause.toUpperCase(); break; default: abort(expr.inspect()); } expr = rest; } if (expr.length > 0) abort(expr.inspect()); }, buildMatchExpression: function() { var params = this.params, conditions = [], clause; if (params.wildcard) conditions.push('true'); if (clause = params.id) conditions.push('element.readAttribute("id") == ' + clause.inspect()); if (clause = params.tagName) conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); if ((clause = params.classNames).length > 0) for (var i = 0, length = clause.length; i < length; i++) conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); if (clause = params.attributes) { clause.each(function(attribute) { var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; var splitValueBy = function(delimiter) { return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; } switch (attribute.operator) { case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; case '|=': conditions.push( splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() ); break; case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; case '': case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; default: throw 'Unknown operator ' + attribute.operator + ' in selector'; } }); } return conditions.join(' && '); }, compileMatcher: function() { this.match = new Function('element', 'if (!element.tagName) return false; \ element = $(element); \ return ' + this.buildMatchExpression()); }, findElements: function(scope) { var element; if (element = $(this.params.id)) if (this.match(element)) if (!scope || Element.childOf(element, scope)) return [element]; scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); var results = []; for (var i = 0, length = scope.length; i < length; i++) if (this.match(element = scope[i])) results.push(Element.extend(element)); return results; }, toString: function() { return this.expression; } } Object.extend(Selector, { matchElements: function(elements, expression) { var selector = new Selector(expression); return elements.select(selector.match.bind(selector)).map(Element.extend); }, findElement: function(elements, expression, index) { if (typeof expression == 'number') index = expression, expression = false; return Selector.matchElements(elements, expression || '*')[index || 0]; }, findChildElements: function(element, expressions) { return expressions.map(function(expression) { return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { var selector = new Selector(expr); return results.inject([], function(elements, result) { return elements.concat(selector.findElements(result || element)); }); }); }).flatten(); } }); function $$() { return Selector.findChildElements(document, $A(arguments)); } var Form = { reset: function(form) { $(form).reset(); return form; }, serializeElements: function(elements, getHash) { var data = elements.inject({}, function(result, element) { if (!element.disabled && element.name) { var key = element.name, value = $(element).getValue(); if (value != undefined) { if (result[key]) { if (result[key].constructor != Array) result[key] = [result[key]]; result[key].push(value); } else result[key] = value; } } return result; }); return getHash ? data : Hash.toQueryString(data); } }; Form.Methods = { serialize: function(form, getHash) { return Form.serializeElements(Form.getElements(form), getHash); }, getElements: function(form) { return $A($(form).getElementsByTagName('*')).inject([], function(elements, child) { if (Form.Element.Serializers[child.tagName.toLowerCase()]) elements.push(Element.extend(child)); return elements; } ); }, getInputs: function(form, typeName, name) { form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return $A(inputs).map(Element.extend); for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(Element.extend(input)); } return matchingInputs; }, disable: function(form) { form = $(form); form.getElements().each(function(element) { element.blur(); element.disabled = 'true'; }); return form; }, enable: function(form) { form = $(form); form.getElements().each(function(element) { element.disabled = ''; }); return form; }, findFirstElement: function(form) { return $(form).getElements().find(function(element) { return element.type != 'hidden' && !element.disabled && ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); }); }, focusFirstElement: function(form) { form = $(form); form.findFirstElement().activate(); return form; } } Object.extend(Form, Form.Methods); /*--------------------------------------------------------------------------*/ Form.Element = { focus: function(element) { $(element).focus(); return element; }, select: function(element) { $(element).select(); return element; } } Form.Element.Methods = { serialize: function(element) { element = $(element); if (!element.disabled && element.name) { var value = element.getValue(); if (value != undefined) { var pair = {}; pair[element.name] = value; return Hash.toQueryString(pair); } } return ''; }, getValue: function(element) { element = $(element); var method = element.tagName.toLowerCase(); return Form.Element.Serializers[method](element); }, clear: function(element) { $(element).value = ''; return element; }, present: function(element) { return $(element).value != ''; }, activate: function(element) { element = $(element); element.focus(); if (element.select && ( element.tagName.toLowerCase() != 'input' || !['button', 'reset', 'submit'].include(element.type) ) ) element.select(); return element; }, disable: function(element) { element = $(element); element.disabled = true; return element; }, enable: function(element) { element = $(element); element.blur(); element.disabled = false; return element; } } Object.extend(Form.Element, Form.Element.Methods); var Field = Form.Element; var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); default: return Form.Element.Serializers.textarea(element); } }, inputSelector: function(element) { return element.checked ? element.value : null; }, textarea: function(element) { return element.value; }, select: function(element) { return this[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, selectOne: function(element) { var index = element.selectedIndex; return index >= 0 ? this.optionValue(element.options[index]) : null; }, selectMany: function(element) { var values, length = element.length; if (!length) return null; for (var i = 0, values = []; i < length; i++) { var opt = element.options[i]; if (opt.selected) values.push(this.optionValue(opt)); } return values; }, optionValue: function(opt) { // extend element because hasAttribute may not be native return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; } } /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); var changed = ('string' == typeof this.lastValue && 'string' == typeof value ? this.lastValue != value : String(this.lastValue) != String(value)); if (changed) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { Form.getElements(this.element).each(this.registerCallback.bind(this)); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': Event.observe(element, 'click', this.onElementEvent.bind(this)); break; default: Event.observe(element, 'change', this.onElementEvent.bind(this)); break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, KEY_HOME: 36, KEY_END: 35, KEY_PAGEUP: 33, KEY_PAGEDOWN: 34, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0, length = Event.observers.length; i < length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) name = 'keydown'; Event._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { try { element.detachEvent('on' + name, observer); } catch (e) {} } } }); /* prevent memory leaks in IE */ if (navigator.appVersion.match(/\bMSIE\b/)) Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, positionedOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; if (element) { if(element.tagName=='BODY') break; var p = Element.getStyle(element, 'position'); if (p == 'relative' || p == 'absolute') break; } } while (element); return [valueL, valueT]; }, offsetParent: function(element) { if (element.offsetParent) return element.offsetParent; if (element == document.body) return element; while ((element = element.parentNode) && element != document.body) if (Element.getStyle(element, 'position') != 'static') return element; return document.body; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, page: function(forElement) { var valueT = 0, valueL = 0; var element = forElement; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; // Safari fix if (element.offsetParent==document.body) if (Element.getStyle(element,'position')=='absolute') break; } while (element = element.offsetParent); element = forElement; do { if (!window.opera || element.tagName=='BODY') { valueT -= element.scrollTop || 0; valueL -= element.scrollLeft || 0; } } while (element = element.parentNode); return [valueL, valueT]; }, clone: function(source, target) { var options = Object.extend({ setLeft: true, setTop: true, setWidth: true, setHeight: true, offsetTop: 0, offsetLeft: 0 }, arguments[2] || {}) // find page position of source source = $(source); var p = Position.page(source); // find coordinate system to use target = $(target); var delta = [0, 0]; var parent = null; // delta [0,0] will do fine with position: fixed elements, // position:absolute needs offsetParent deltas if (Element.getStyle(target,'position') == 'absolute') { parent = Position.offsetParent(target); delta = Position.page(parent); } // correct by body offsets (fixes Safari) if (parent == document.body) { delta[0] -= document.body.offsetLeft; delta[1] -= document.body.offsetTop; } // set position if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; if(options.setWidth) target.style.width = source.offsetWidth + 'px'; if(options.setHeight) target.style.height = source.offsetHeight + 'px'; }, absolutize: function(element) { element = $(element); if (element.style.position == 'absolute') return; Position.prepare(); var offsets = Position.positionedOffset(element); var top = offsets[1]; var left = offsets[0]; var width = element.clientWidth; var height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); element._originalWidth = element.style.width; element._originalHeight = element.style.height; element.style.position = 'absolute'; element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.width = width + 'px'; element.style.height = height + 'px'; }, relativize: function(element) { element = $(element); if (element.style.position == 'relative') return; Position.prepare(); element.style.position = 'relative'; var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.height = element._originalHeight; element.style.width = element._originalWidth; } } // Safari returns margins on body which is incorrect if the child is absolutely // positioned. For performance reasons, redefine Position.cumulativeOffset for // KHTML/WebKit only. if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { Position.cumulativeOffset = function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; if (element.offsetParent == document.body) if (Element.getStyle(element, 'position') == 'absolute') break; element = element.offsetParent; } while (element); return [valueL, valueT]; } } Element.addMethods();7wordpress/wp-includes/js/scriptaculous/scriptaculous.js d// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // For details, see the script.aculo.us web site: http://script.aculo.us/ var Scriptaculous = { Version: '1.7.0', require: function(libraryName) { // inserting via DOM fails in Safari 2.0, so brute force approach document.write(''); }, load: function() { if((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined') || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5) throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); var includes = s.src.match(/\?.*load=([a-z,]*)/); (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each( function(include) { Scriptaculous.require(path+include+'.js') }); }); } } Scriptaculous.load();0wordpress/wp-includes/js/scriptaculous/slider.js(// script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ if(!Control) var Control = {}; Control.Slider = Class.create(); // options: // axis: 'vertical', or 'horizontal' (default) // // callbacks: // onChange(value) // onSlide(value) Control.Slider.prototype = { initialize: function(handle, track, options) { var slider = this; if(handle instanceof Array) { this.handles = handle.collect( function(e) { return $(e) }); } else { this.handles = [$(handle)]; } this.track = $(track); this.options = options || {}; this.axis = this.options.axis || 'horizontal'; this.increment = this.options.increment || 1; this.step = parseInt(this.options.step || '1'); this.range = this.options.range || $R(0,1); this.value = 0; // assure backwards compat this.values = this.handles.map( function() { return 0 }); this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false; this.options.startSpan = $(this.options.startSpan || null); this.options.endSpan = $(this.options.endSpan || null); this.restricted = this.options.restricted || false; this.maximum = this.options.maximum || this.range.end; this.minimum = this.options.minimum || this.range.start; // Will be used to align the handle onto the track, if necessary this.alignX = parseInt(this.options.alignX || '0'); this.alignY = parseInt(this.options.alignY || '0'); this.trackLength = this.maximumOffset() - this.minimumOffset(); this.handleLength = this.isVertical() ? (this.handles[0].offsetHeight != 0 ? this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : this.handles[0].style.width.replace(/px$/,"")); this.active = false; this.dragging = false; this.disabled = false; if(this.options.disabled) this.setDisabled(); // Allowed values array this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; if(this.allowedValues) { this.minimum = this.allowedValues.min(); this.maximum = this.allowedValues.max(); } this.eventMouseDown = this.startDrag.bindAsEventListener(this); this.eventMouseUp = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.update.bindAsEventListener(this); // Initialize handles in reverse (make sure first handle is active) this.handles.each( function(h,i) { i = slider.handles.length-1-i; slider.setValue(parseFloat( (slider.options.sliderValue instanceof Array ? slider.options.sliderValue[i] : slider.options.sliderValue) || slider.range.start), i); Element.makePositioned(h); // fix IE Event.observe(h, "mousedown", slider.eventMouseDown); }); Event.observe(this.track, "mousedown", this.eventMouseDown); Event.observe(document, "mouseup", this.eventMouseUp); Event.observe(document, "mousemove", this.eventMouseMove); this.initialized = true; }, dispose: function() { var slider = this; Event.stopObserving(this.track, "mousedown", this.eventMouseDown); Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); this.handles.each( function(h) { Event.stopObserving(h, "mousedown", slider.eventMouseDown); }); }, setDisabled: function(){ this.disabled = true; }, setEnabled: function(){ this.disabled = false; }, getNearestValue: function(value){ if(this.allowedValues){ if(value >= this.allowedValues.max()) return(this.allowedValues.max()); if(value <= this.allowedValues.min()) return(this.allowedValues.min()); var offset = Math.abs(this.allowedValues[0] - value); var newValue = this.allowedValues[0]; this.allowedValues.each( function(v) { var currentOffset = Math.abs(v - value); if(currentOffset <= offset){ newValue = v; offset = currentOffset; } }); return newValue; } if(value > this.range.end) return this.range.end; if(value < this.range.start) return this.range.start; return value; }, setValue: function(sliderValue, handleIdx){ if(!this.active) { this.activeHandleIdx = handleIdx || 0; this.activeHandle = this.handles[this.activeHandleIdx]; this.updateStyles(); } handleIdx = handleIdx || this.activeHandleIdx || 0; if(this.initialized && this.restricted) { if((handleIdx>0) && (sliderValuethis.values[handleIdx+1])) sliderValue = this.values[handleIdx+1]; } sliderValue = this.getNearestValue(sliderValue); this.values[handleIdx] = sliderValue; this.value = this.values[0]; // assure backwards compat this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = this.translateToPx(sliderValue); this.drawSpans(); if(!this.dragging || !this.event) this.updateFinished(); }, setValueBy: function(delta, handleIdx) { this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, handleIdx || this.activeHandleIdx || 0); }, translateToPx: function(value) { return Math.round( ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * (value - this.range.start)) + "px"; }, translateToValue: function(offset) { return ((offset/(this.trackLength-this.handleLength) * (this.range.end-this.range.start)) + this.range.start); }, getRange: function(range) { var v = this.values.sortBy(Prototype.K); range = range || 0; return $R(v[range],v[range+1]); }, minimumOffset: function(){ return(this.isVertical() ? this.alignY : this.alignX); }, maximumOffset: function(){ return(this.isVertical() ? (this.track.offsetHeight != 0 ? this.track.offsetHeight : this.track.style.height.replace(/px$/,"")) - this.alignY : (this.track.offsetWidth != 0 ? this.track.offsetWidth : this.track.style.width.replace(/px$/,"")) - this.alignY); }, isVertical: function(){ return (this.axis == 'vertical'); }, drawSpans: function() { var slider = this; if(this.spans) $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) }); if(this.options.startSpan) this.setSpan(this.options.startSpan, $R(0, this.values.length>1 ? this.getRange(0).min() : this.value )); if(this.options.endSpan) this.setSpan(this.options.endSpan, $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum)); }, setSpan: function(span, range) { if(this.isVertical()) { span.style.top = this.translateToPx(range.start); span.style.height = this.translateToPx(range.end - range.start + this.range.start); } else { span.style.left = this.translateToPx(range.start); span.style.width = this.translateToPx(range.end - range.start + this.range.start); } }, updateStyles: function() { this.handles.each( function(h){ Element.removeClassName(h, 'selected') }); Element.addClassName(this.activeHandle, 'selected'); }, startDrag: function(event) { if(Event.isLeftClick(event)) { if(!this.disabled){ this.active = true; var handle = Event.element(event); var pointer = [Event.pointerX(event), Event.pointerY(event)]; var track = handle; if(track==this.track) { var offsets = Position.cumulativeOffset(this.track); this.event = event; this.setValue(this.translateToValue( (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2) )); var offsets = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); } else { // find the handle (prevents issues with Safari) while((this.handles.indexOf(handle) == -1) && handle.parentNode) handle = handle.parentNode; if(this.handles.indexOf(handle)!=-1) { this.activeHandle = handle; this.activeHandleIdx = this.handles.indexOf(this.activeHandle); this.updateStyles(); var offsets = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); } } } Event.stop(event); } }, update: function(event) { if(this.active) { if(!this.dragging) this.dragging = true; this.draw(event); // fix AppleWebKit rendering if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); Event.stop(event); } }, draw: function(event) { var pointer = [Event.pointerX(event), Event.pointerY(event)]; var offsets = Position.cumulativeOffset(this.track); pointer[0] -= this.offsetX + offsets[0]; pointer[1] -= this.offsetY + offsets[1]; this.event = event; this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] )); if(this.initialized && this.options.onSlide) this.options.onSlide(this.values.length>1 ? this.values : this.value, this); }, endDrag: function(event) { if(this.active && this.dragging) { this.finishDrag(event, true); Event.stop(event); } this.active = false; this.dragging = false; }, finishDrag: function(event, success) { this.active = false; this.dragging = false; this.updateFinished(); }, updateFinished: function() { if(this.initialized && this.options.onChange) this.options.onChange(this.values.length>1 ? this.values : this.value, this); this.event = null; } }3wordpress/wp-includes/js/scriptaculous/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/scriptaculous svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 wp-scriptaculous.js file 2008-11-20T16:30:26.000000Z c0deff8348d644fe7727daa4415de64d 2008-10-28T18:17:06.112729Z 97 paul prototype.js file 2008-11-20T16:30:26.000000Z ed2d6608b0832c5e990e10729157b485 2008-10-28T18:17:06.112729Z 97 paul builder.js file 2008-11-20T16:30:26.000000Z 5cf5f6ccca0fa4c4c8a0428e9240b81a 2008-10-28T18:17:06.112729Z 97 paul MIT-LICENSE file 2008-11-20T16:30:26.000000Z 644476df73032b063a33b199a3003fd8 2008-10-28T18:17:06.112729Z 97 paul effects.js file 2008-11-20T16:30:26.000000Z be6dba6cd4a57fc1dade9b547fc614d9 2008-10-28T18:17:06.112729Z 97 paul unittest.js file 2008-11-20T16:30:26.000000Z 9ffcc3a22dbfeb9e5665247f376deb76 2008-10-28T18:17:06.112729Z 97 paul scriptaculous.js file 2008-11-20T16:30:26.000000Z 211d955609da0b228a65487384b95722 2008-10-28T18:17:06.112729Z 97 paul dragdrop.js file 2008-11-20T16:30:26.000000Z f41cfdb65270e6f50eb1cce7cee52902 2008-10-28T18:17:06.112729Z 97 paul slider.js file 2008-11-20T16:30:26.000000Z a35f869479bb76b2d0de3aaa808ead5e 2008-10-28T18:17:06.112729Z 97 paul controls.js file 2008-11-20T16:30:26.000000Z 3caf5091b68f3a6afaf881744509d4c6 2008-10-28T18:17:06.112729Z 97 paul 2wordpress/wp-includes/js/scriptaculous/.svn/format8 Iwordpress/wp-includes/js/scriptaculous/.svn/text-base/builder.js.svn-base// script.aculo.us builder.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ var Builder = { NODEMAP: { AREA: 'map', CAPTION: 'table', COL: 'table', COLGROUP: 'table', LEGEND: 'fieldset', OPTGROUP: 'select', OPTION: 'select', PARAM: 'object', TBODY: 'table', TD: 'table', TFOOT: 'table', TH: 'table', THEAD: 'table', TR: 'table' }, // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken, // due to a Firefox bug node: function(elementName) { elementName = elementName.toUpperCase(); // try innerHTML approach var parentTag = this.NODEMAP[elementName] || 'div'; var parentElement = document.createElement(parentTag); try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 parentElement.innerHTML = "<" + elementName + ">"; } catch(e) {} var element = parentElement.firstChild || null; // see if browser added wrapping tags if(element && (element.tagName.toUpperCase() != elementName)) element = element.getElementsByTagName(elementName)[0]; // fallback to createElement approach if(!element) element = document.createElement(elementName); // abort if nothing could be created if(!element) return; // attributes (or text) if(arguments[1]) if(this._isStringOrNumber(arguments[1]) || (arguments[1] instanceof Array)) { this._children(element, arguments[1]); } else { var attrs = this._attributes(arguments[1]); if(attrs.length) { try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707 parentElement.innerHTML = "<" +elementName + " " + attrs + ">"; } catch(e) {} element = parentElement.firstChild || null; // workaround firefox 1.0.X bug if(!element) { element = document.createElement(elementName); for(attr in arguments[1]) element[attr == 'class' ? 'className' : attr] = arguments[1][attr]; } if(element.tagName.toUpperCase() != elementName) element = parentElement.getElementsByTagName(elementName)[0]; } } // text, or array of children if(arguments[2]) this._children(element, arguments[2]); return element; }, _text: function(text) { return document.createTextNode(text); }, ATTR_MAP: { 'className': 'class', 'htmlFor': 'for' }, _attributes: function(attributes) { var attrs = []; for(attribute in attributes) attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) + '="' + attributes[attribute].toString().escapeHTML() + '"'); return attrs.join(" "); }, _children: function(element, children) { if(typeof children=='object') { // array can hold nodes and text children.flatten().each( function(e) { if(typeof e=='object') element.appendChild(e) else if(Builder._isStringOrNumber(e)) element.appendChild(Builder._text(e)); }); } else if(Builder._isStringOrNumber(children)) element.appendChild(Builder._text(children)); }, _isStringOrNumber: function(param) { return(typeof param=='string' || typeof param=='number'); }, build: function(html) { var element = this.node('div'); $(element).update(html.strip()); return element.down(); }, dump: function(scope) { if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " + "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " + "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/); tags.each( function(tag){ scope[tag] = function() { return Builder.node.apply(Builder, [tag].concat($A(arguments))); } }); } } Jwordpress/wp-includes/js/scriptaculous/.svn/text-base/controls.js.svn-baseq4// script.aculo.us controls.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan) // (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com) // Contributors: // Richard Livsey // Rahul Bhargava // Rob Wills // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ // Autocompleter.Base handles all the autocompletion functionality // that's independent of the data source for autocompletion. This // includes drawing the autocompletion menu, observing keyboard // and mouse events, and similar. // // Specific autocompleters need to provide, at the very least, // a getUpdatedChoices function that will be invoked every time // the text inside the monitored textbox changes. This method // should get the text for which to provide autocompletion by // invoking this.getToken(), NOT by directly accessing // this.element.value. This is to allow incremental tokenized // autocompletion. Specific auto-completion logic (AJAX, etc) // belongs in getUpdatedChoices. // // Tokenized incremental autocompletion is enabled automatically // when an autocompleter is instantiated with the 'tokens' option // in the options parameter, e.g.: // new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' }); // will incrementally autocomplete with a comma as the token. // Additionally, ',' in the above example can be replaced with // a token array, e.g. { tokens: [',', '\n'] } which // enables autocompletion on multiple tokens. This is most // useful when one of the tokens is \n (a newline), as it // allows smart autocompletion after linebreaks. if(typeof Effect == 'undefined') throw("controls.js requires including script.aculo.us' effects.js library"); var Autocompleter = {} Autocompleter.Base = function() {}; Autocompleter.Base.prototype = { baseInitialize: function(element, update, options) { this.element = $(element); this.update = $(update); this.hasFocus = false; this.changed = false; this.active = false; this.index = 0; this.entryCount = 0; if(this.setOptions) this.setOptions(options); else this.options = options || {}; this.options.paramName = this.options.paramName || this.element.name; this.options.tokens = this.options.tokens || []; this.options.frequency = this.options.frequency || 0.4; this.options.minChars = this.options.minChars || 1; this.options.onShow = this.options.onShow || function(element, update){ if(!update.style.position || update.style.position=='absolute') { update.style.position = 'absolute'; Position.clone(element, update, { setHeight: false, offsetTop: element.offsetHeight }); } Effect.Appear(update,{duration:0.15}); }; this.options.onHide = this.options.onHide || function(element, update){ new Effect.Fade(update,{duration:0.15}) }; if(typeof(this.options.tokens) == 'string') this.options.tokens = new Array(this.options.tokens); this.observer = null; this.element.setAttribute('autocomplete','off'); Element.hide(this.update); Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this)); Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this)); }, show: function() { if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update); if(!this.iefix && (navigator.appVersion.indexOf('MSIE')>0) && (navigator.userAgent.indexOf('Opera')<0) && (Element.getStyle(this.update, 'position')=='absolute')) { new Insertion.After(this.update, ''); this.iefix = $(this.update.id+'_iefix'); } if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50); }, fixIEOverlapping: function() { Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)}); this.iefix.style.zIndex = 1; this.update.style.zIndex = 2; Element.show(this.iefix); }, hide: function() { this.stopIndicator(); if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update); if(this.iefix) Element.hide(this.iefix); }, startIndicator: function() { if(this.options.indicator) Element.show(this.options.indicator); }, stopIndicator: function() { if(this.options.indicator) Element.hide(this.options.indicator); }, onKeyPress: function(event) { if(this.active) switch(event.keyCode) { case Event.KEY_TAB: case Event.KEY_RETURN: this.selectEntry(); Event.stop(event); case Event.KEY_ESC: this.hide(); this.active = false; Event.stop(event); return; case Event.KEY_LEFT: case Event.KEY_RIGHT: return; case Event.KEY_UP: this.markPrevious(); this.render(); if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); return; case Event.KEY_DOWN: this.markNext(); this.render(); if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event); return; } else if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return; this.changed = true; this.hasFocus = true; if(this.observer) clearTimeout(this.observer); this.observer = setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000); }, activate: function() { this.changed = false; this.hasFocus = true; this.getUpdatedChoices(); }, onHover: function(event) { var element = Event.findElement(event, 'LI'); if(this.index != element.autocompleteIndex) { this.index = element.autocompleteIndex; this.render(); } Event.stop(event); }, onClick: function(event) { var element = Event.findElement(event, 'LI'); this.index = element.autocompleteIndex; this.selectEntry(); this.hide(); }, onBlur: function(event) { // needed to make click events working setTimeout(this.hide.bind(this), 250); this.hasFocus = false; this.active = false; }, render: function() { if(this.entryCount > 0) { for (var i = 0; i < this.entryCount; i++) this.index==i ? Element.addClassName(this.getEntry(i),"selected") : Element.removeClassName(this.getEntry(i),"selected"); if(this.hasFocus) { this.show(); this.active = true; } } else { this.active = false; this.hide(); } }, markPrevious: function() { if(this.index > 0) this.index-- else this.index = this.entryCount-1; this.getEntry(this.index).scrollIntoView(true); }, markNext: function() { if(this.index < this.entryCount-1) this.index++ else this.index = 0; this.getEntry(this.index).scrollIntoView(false); }, getEntry: function(index) { return this.update.firstChild.childNodes[index]; }, getCurrentEntry: function() { return this.getEntry(this.index); }, selectEntry: function() { this.active = false; this.updateElement(this.getCurrentEntry()); }, updateElement: function(selectedElement) { if (this.options.updateElement) { this.options.updateElement(selectedElement); return; } var value = ''; if (this.options.select) { var nodes = document.getElementsByClassName(this.options.select, selectedElement) || []; if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select); } else value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal'); var lastTokenPos = this.findLastToken(); if (lastTokenPos != -1) { var newValue = this.element.value.substr(0, lastTokenPos + 1); var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/); if (whitespace) newValue += whitespace[0]; this.element.value = newValue + value; } else { this.element.value = value; } this.element.focus(); if (this.options.afterUpdateElement) this.options.afterUpdateElement(this.element, selectedElement); }, updateChoices: function(choices) { if(!this.changed && this.hasFocus) { this.update.innerHTML = choices; Element.cleanWhitespace(this.update); Element.cleanWhitespace(this.update.down()); if(this.update.firstChild && this.update.down().childNodes) { this.entryCount = this.update.down().childNodes.length; for (var i = 0; i < this.entryCount; i++) { var entry = this.getEntry(i); entry.autocompleteIndex = i; this.addObservers(entry); } } else { this.entryCount = 0; } this.stopIndicator(); this.index = 0; if(this.entryCount==1 && this.options.autoSelect) { this.selectEntry(); this.hide(); } else { this.render(); } } }, addObservers: function(element) { Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this)); Event.observe(element, "click", this.onClick.bindAsEventListener(this)); }, onObserverEvent: function() { this.changed = false; if(this.getToken().length>=this.options.minChars) { this.startIndicator(); this.getUpdatedChoices(); } else { this.active = false; this.hide(); } }, getToken: function() { var tokenPos = this.findLastToken(); if (tokenPos != -1) var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,''); else var ret = this.element.value; return /\n/.test(ret) ? '' : ret; }, findLastToken: function() { var lastTokenPos = -1; for (var i=0; i lastTokenPos) lastTokenPos = thisTokenPos; } return lastTokenPos; } } Ajax.Autocompleter = Class.create(); Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), { initialize: function(element, update, url, options) { this.baseInitialize(element, update, options); this.options.asynchronous = true; this.options.onComplete = this.onComplete.bind(this); this.options.defaultParams = this.options.parameters || null; this.url = url; }, getUpdatedChoices: function() { entry = encodeURIComponent(this.options.paramName) + '=' + encodeURIComponent(this.getToken()); this.options.parameters = this.options.callback ? this.options.callback(this.element, entry) : entry; if(this.options.defaultParams) this.options.parameters += '&' + this.options.defaultParams; new Ajax.Request(this.url, this.options); }, onComplete: function(request) { this.updateChoices(request.responseText); } }); // The local array autocompleter. Used when you'd prefer to // inject an array of autocompletion options into the page, rather // than sending out Ajax queries, which can be quite slow sometimes. // // The constructor takes four parameters. The first two are, as usual, // the id of the monitored textbox, and id of the autocompletion menu. // The third is the array you want to autocomplete from, and the fourth // is the options block. // // Extra local autocompletion options: // - choices - How many autocompletion choices to offer // // - partialSearch - If false, the autocompleter will match entered // text only at the beginning of strings in the // autocomplete array. Defaults to true, which will // match text at the beginning of any *word* in the // strings in the autocomplete array. If you want to // search anywhere in the string, additionally set // the option fullSearch to true (default: off). // // - fullSsearch - Search anywhere in autocomplete array strings. // // - partialChars - How many characters to enter before triggering // a partial match (unlike minChars, which defines // how many characters are required to do any match // at all). Defaults to 2. // // - ignoreCase - Whether to ignore case when autocompleting. // Defaults to true. // // It's possible to pass in a custom function as the 'selector' // option, if you prefer to write your own autocompletion logic. // In that case, the other options above will not apply unless // you support them. Autocompleter.Local = Class.create(); Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), { initialize: function(element, update, array, options) { this.baseInitialize(element, update, options); this.options.array = array; }, getUpdatedChoices: function() { this.updateChoices(this.options.selector(this)); }, setOptions: function(options) { this.options = Object.extend({ choices: 10, partialSearch: true, partialChars: 2, ignoreCase: true, fullSearch: false, selector: function(instance) { var ret = []; // Beginning matches var partial = []; // Inside matches var entry = instance.getToken(); var count = 0; for (var i = 0; i < instance.options.array.length && ret.length < instance.options.choices ; i++) { var elem = instance.options.array[i]; var foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase()) : elem.indexOf(entry); while (foundPos != -1) { if (foundPos == 0 && elem.length != entry.length) { ret.push("
  • " + elem.substr(0, entry.length) + "" + elem.substr(entry.length) + "
  • "); break; } else if (entry.length >= instance.options.partialChars && instance.options.partialSearch && foundPos != -1) { if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) { partial.push("
  • " + elem.substr(0, foundPos) + "" + elem.substr(foundPos, entry.length) + "" + elem.substr( foundPos + entry.length) + "
  • "); break; } } foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : elem.indexOf(entry, foundPos + 1); } } if (partial.length) ret = ret.concat(partial.slice(0, instance.options.choices - ret.length)) return "
      " + ret.join('') + "
    "; } }, options || {}); } }); // AJAX in-place editor // // see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor // Use this if you notice weird scrolling problems on some browsers, // the DOM might be a bit confused when this gets called so do this // waits 1 ms (with setTimeout) until it does the activation Field.scrollFreeActivate = function(field) { setTimeout(function() { Field.activate(field); }, 1); } Ajax.InPlaceEditor = Class.create(); Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99"; Ajax.InPlaceEditor.prototype = { initialize: function(element, url, options) { this.url = url; this.element = $(element); this.options = Object.extend({ paramName: "value", okButton: true, okText: "ok", cancelLink: true, cancelText: "cancel", savingText: "Saving...", clickToEditText: "Click to edit", okText: "ok", rows: 1, onComplete: function(transport, element) { new Effect.Highlight(element, {startcolor: this.options.highlightcolor}); }, onFailure: function(transport) { alert("Error communicating with the server: " + transport.responseText.stripTags()); }, callback: function(form) { return Form.serialize(form); }, handleLineBreaks: true, loadingText: 'Loading...', savingClassName: 'inplaceeditor-saving', loadingClassName: 'inplaceeditor-loading', formClassName: 'inplaceeditor-form', highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor, highlightendcolor: "#FFFFFF", externalControl: null, submitOnBlur: false, ajaxOptions: {}, evalScripts: false }, options || {}); if(!this.options.formId && this.element.id) { this.options.formId = this.element.id + "-inplaceeditor"; if ($(this.options.formId)) { // there's already a form with that name, don't specify an id this.options.formId = null; } } if (this.options.externalControl) { this.options.externalControl = $(this.options.externalControl); } this.originalBackground = Element.getStyle(this.element, 'background-color'); if (!this.originalBackground) { this.originalBackground = "transparent"; } this.element.title = this.options.clickToEditText; this.onclickListener = this.enterEditMode.bindAsEventListener(this); this.mouseoverListener = this.enterHover.bindAsEventListener(this); this.mouseoutListener = this.leaveHover.bindAsEventListener(this); Event.observe(this.element, 'click', this.onclickListener); Event.observe(this.element, 'mouseover', this.mouseoverListener); Event.observe(this.element, 'mouseout', this.mouseoutListener); if (this.options.externalControl) { Event.observe(this.options.externalControl, 'click', this.onclickListener); Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener); Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener); } }, enterEditMode: function(evt) { if (this.saving) return; if (this.editing) return; this.editing = true; this.onEnterEditMode(); if (this.options.externalControl) { Element.hide(this.options.externalControl); } Element.hide(this.element); this.createForm(); this.element.parentNode.insertBefore(this.form, this.element); if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField); // stop the event to avoid a page refresh in Safari if (evt) { Event.stop(evt); } return false; }, createForm: function() { this.form = document.createElement("form"); this.form.id = this.options.formId; Element.addClassName(this.form, this.options.formClassName) this.form.onsubmit = this.onSubmit.bind(this); this.createEditField(); if (this.options.textarea) { var br = document.createElement("br"); this.form.appendChild(br); } if (this.options.okButton) { okButton = document.createElement("input"); okButton.type = "submit"; okButton.value = this.options.okText; okButton.className = 'editor_ok_button'; this.form.appendChild(okButton); } if (this.options.cancelLink) { cancelLink = document.createElement("a"); cancelLink.href = "#"; cancelLink.appendChild(document.createTextNode(this.options.cancelText)); cancelLink.onclick = this.onclickCancel.bind(this); cancelLink.className = 'editor_cancel'; this.form.appendChild(cancelLink); } }, hasHTMLLineBreaks: function(string) { if (!this.options.handleLineBreaks) return false; return string.match(/
    /i); }, convertHTMLLineBreaks: function(string) { return string.replace(/
    /gi, "\n").replace(//gi, "\n").replace(/<\/p>/gi, "\n").replace(/

    /gi, ""); }, createEditField: function() { var text; if(this.options.loadTextURL) { text = this.options.loadingText; } else { text = this.getText(); } var obj = this; if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) { this.options.textarea = false; var textField = document.createElement("input"); textField.obj = this; textField.type = "text"; textField.name = this.options.paramName; textField.value = text; textField.style.backgroundColor = this.options.highlightcolor; textField.className = 'editor_field'; var size = this.options.size || this.options.cols || 0; if (size != 0) textField.size = size; if (this.options.submitOnBlur) textField.onblur = this.onSubmit.bind(this); this.editField = textField; } else { this.options.textarea = true; var textArea = document.createElement("textarea"); textArea.obj = this; textArea.name = this.options.paramName; textArea.value = this.convertHTMLLineBreaks(text); textArea.rows = this.options.rows; textArea.cols = this.options.cols || 40; textArea.className = 'editor_field'; if (this.options.submitOnBlur) textArea.onblur = this.onSubmit.bind(this); this.editField = textArea; } if(this.options.loadTextURL) { this.loadExternalText(); } this.form.appendChild(this.editField); }, getText: function() { return this.element.innerHTML; }, loadExternalText: function() { Element.addClassName(this.form, this.options.loadingClassName); this.editField.disabled = true; new Ajax.Request( this.options.loadTextURL, Object.extend({ asynchronous: true, onComplete: this.onLoadedExternalText.bind(this) }, this.options.ajaxOptions) ); }, onLoadedExternalText: function(transport) { Element.removeClassName(this.form, this.options.loadingClassName); this.editField.disabled = false; this.editField.value = transport.responseText.stripTags(); Field.scrollFreeActivate(this.editField); }, onclickCancel: function() { this.onComplete(); this.leaveEditMode(); return false; }, onFailure: function(transport) { this.options.onFailure(transport); if (this.oldInnerHTML) { this.element.innerHTML = this.oldInnerHTML; this.oldInnerHTML = null; } return false; }, onSubmit: function() { // onLoading resets these so we need to save them away for the Ajax call var form = this.form; var value = this.editField.value; // do this first, sometimes the ajax call returns before we get a chance to switch on Saving... // which means this will actually switch on Saving... *after* we've left edit mode causing Saving... // to be displayed indefinitely this.onLoading(); if (this.options.evalScripts) { new Ajax.Request( this.url, Object.extend({ parameters: this.options.callback(form, value), onComplete: this.onComplete.bind(this), onFailure: this.onFailure.bind(this), asynchronous:true, evalScripts:true }, this.options.ajaxOptions)); } else { new Ajax.Updater( { success: this.element, // don't update on failure (this could be an option) failure: null }, this.url, Object.extend({ parameters: this.options.callback(form, value), onComplete: this.onComplete.bind(this), onFailure: this.onFailure.bind(this) }, this.options.ajaxOptions)); } // stop the event to avoid a page refresh in Safari if (arguments.length > 1) { Event.stop(arguments[0]); } return false; }, onLoading: function() { this.saving = true; this.removeForm(); this.leaveHover(); this.showSaving(); }, showSaving: function() { this.oldInnerHTML = this.element.innerHTML; this.element.innerHTML = this.options.savingText; Element.addClassName(this.element, this.options.savingClassName); this.element.style.backgroundColor = this.originalBackground; Element.show(this.element); }, removeForm: function() { if(this.form) { if (this.form.parentNode) Element.remove(this.form); this.form = null; } }, enterHover: function() { if (this.saving) return; this.element.style.backgroundColor = this.options.highlightcolor; if (this.effect) { this.effect.cancel(); } Element.addClassName(this.element, this.options.hoverClassName) }, leaveHover: function() { if (this.options.backgroundColor) { this.element.style.backgroundColor = this.oldBackground; } Element.removeClassName(this.element, this.options.hoverClassName) if (this.saving) return; this.effect = new Effect.Highlight(this.element, { startcolor: this.options.highlightcolor, endcolor: this.options.highlightendcolor, restorecolor: this.originalBackground }); }, leaveEditMode: function() { Element.removeClassName(this.element, this.options.savingClassName); this.removeForm(); this.leaveHover(); this.element.style.backgroundColor = this.originalBackground; Element.show(this.element); if (this.options.externalControl) { Element.show(this.options.externalControl); } this.editing = false; this.saving = false; this.oldInnerHTML = null; this.onLeaveEditMode(); }, onComplete: function(transport) { this.leaveEditMode(); this.options.onComplete.bind(this)(transport, this.element); }, onEnterEditMode: function() {}, onLeaveEditMode: function() {}, dispose: function() { if (this.oldInnerHTML) { this.element.innerHTML = this.oldInnerHTML; } this.leaveEditMode(); Event.stopObserving(this.element, 'click', this.onclickListener); Event.stopObserving(this.element, 'mouseover', this.mouseoverListener); Event.stopObserving(this.element, 'mouseout', this.mouseoutListener); if (this.options.externalControl) { Event.stopObserving(this.options.externalControl, 'click', this.onclickListener); Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener); Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener); } } }; Ajax.InPlaceCollectionEditor = Class.create(); Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype); Object.extend(Ajax.InPlaceCollectionEditor.prototype, { createEditField: function() { if (!this.cached_selectTag) { var selectTag = document.createElement("select"); var collection = this.options.collection || []; var optionTag; collection.each(function(e,i) { optionTag = document.createElement("option"); optionTag.value = (e instanceof Array) ? e[0] : e; if((typeof this.options.value == 'undefined') && ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true; if(this.options.value==optionTag.value) optionTag.selected = true; optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e)); selectTag.appendChild(optionTag); }.bind(this)); this.cached_selectTag = selectTag; } this.editField = this.cached_selectTag; if(this.options.loadTextURL) this.loadExternalText(); this.form.appendChild(this.editField); this.options.callback = function(form, value) { return "value=" + encodeURIComponent(value); } } }); // Delayed observer, like Form.Element.Observer, // but waits for delay after last key input // Ideal for live-search fields Form.Element.DelayedObserver = Class.create(); Form.Element.DelayedObserver.prototype = { initialize: function(element, delay, callback) { this.delay = delay || 0.5; this.element = $(element); this.callback = callback; this.timer = null; this.lastValue = $F(this.element); Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this)); }, delayedListener: function(event) { if(this.lastValue == $F(this.element)) return; if(this.timer) clearTimeout(this.timer); this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000); this.lastValue = $F(this.element); }, onTimerEvent: function() { this.timer = null; this.callback(this.element, $F(this.element)); } }; Jwordpress/wp-includes/js/scriptaculous/.svn/text-base/dragdrop.js.svn-basew// script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ if(typeof Effect == 'undefined') throw("dragdrop.js requires including script.aculo.us' effects.js library"); var Droppables = { drops: [], remove: function(element) { this.drops = this.drops.reject(function(d) { return d.element==$(element) }); }, add: function(element) { element = $(element); var options = Object.extend({ greedy: true, hoverclass: null, tree: false }, arguments[1] || {}); // cache containers if(options.containment) { options._containers = []; var containment = options.containment; if((typeof containment == 'object') && (containment.constructor == Array)) { containment.each( function(c) { options._containers.push($(c)) }); } else { options._containers.push($(containment)); } } if(options.accept) options.accept = [options.accept].flatten(); Element.makePositioned(element); // fix IE options.element = element; this.drops.push(options); }, findDeepestChild: function(drops) { deepest = drops[0]; for (i = 1; i < drops.length; ++i) if (Element.isParent(drops[i].element, deepest.element)) deepest = drops[i]; return deepest; }, isContained: function(element, drop) { var containmentNode; if(drop.tree) { containmentNode = element.treeNode; } else { containmentNode = element.parentNode; } return drop._containers.detect(function(c) { return containmentNode == c }); }, isAffected: function(point, element, drop) { return ( (drop.element!=element) && ((!drop._containers) || this.isContained(element, drop)) && ((!drop.accept) || (Element.classNames(element).detect( function(v) { return drop.accept.include(v) } ) )) && Position.within(drop.element, point[0], point[1]) ); }, deactivate: function(drop) { if(drop.hoverclass) Element.removeClassName(drop.element, drop.hoverclass); this.last_active = null; }, activate: function(drop) { if(drop.hoverclass) Element.addClassName(drop.element, drop.hoverclass); this.last_active = drop; }, show: function(point, element) { if(!this.drops.length) return; var affected = []; if(this.last_active) this.deactivate(this.last_active); this.drops.each( function(drop) { if(Droppables.isAffected(point, element, drop)) affected.push(drop); }); if(affected.length>0) { drop = Droppables.findDeepestChild(affected); Position.within(drop.element, point[0], point[1]); if(drop.onHover) drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); Droppables.activate(drop); } }, fire: function(event, element) { if(!this.last_active) return; Position.prepare(); if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) if (this.last_active.onDrop) this.last_active.onDrop(element, this.last_active.element, event); }, reset: function() { if(this.last_active) this.deactivate(this.last_active); } } var Draggables = { drags: [], observers: [], register: function(draggable) { if(this.drags.length == 0) { this.eventMouseUp = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.updateDrag.bindAsEventListener(this); this.eventKeypress = this.keyPress.bindAsEventListener(this); Event.observe(document, "mouseup", this.eventMouseUp); Event.observe(document, "mousemove", this.eventMouseMove); Event.observe(document, "keypress", this.eventKeypress); } this.drags.push(draggable); }, unregister: function(draggable) { this.drags = this.drags.reject(function(d) { return d==draggable }); if(this.drags.length == 0) { Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); Event.stopObserving(document, "keypress", this.eventKeypress); } }, activate: function(draggable) { if(draggable.options.delay) { this._timeout = setTimeout(function() { Draggables._timeout = null; window.focus(); Draggables.activeDraggable = draggable; }.bind(this), draggable.options.delay); } else { window.focus(); // allows keypress events if window isn't currently focused, fails for Safari this.activeDraggable = draggable; } }, deactivate: function() { this.activeDraggable = null; }, updateDrag: function(event) { if(!this.activeDraggable) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; // Mozilla-based browsers fire successive mousemove events with // the same coordinates, prevent needless redrawing (moz bug?) if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; this._lastPointer = pointer; this.activeDraggable.updateDrag(event, pointer); }, endDrag: function(event) { if(this._timeout) { clearTimeout(this._timeout); this._timeout = null; } if(!this.activeDraggable) return; this._lastPointer = null; this.activeDraggable.endDrag(event); this.activeDraggable = null; }, keyPress: function(event) { if(this.activeDraggable) this.activeDraggable.keyPress(event); }, addObserver: function(observer) { this.observers.push(observer); this._cacheObserverCallbacks(); }, removeObserver: function(element) { // element instead of observer fixes mem leaks this.observers = this.observers.reject( function(o) { return o.element==element }); this._cacheObserverCallbacks(); }, notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag' if(this[eventName+'Count'] > 0) this.observers.each( function(o) { if(o[eventName]) o[eventName](eventName, draggable, event); }); if(draggable.options[eventName]) draggable.options[eventName](draggable, event); }, _cacheObserverCallbacks: function() { ['onStart','onEnd','onDrag'].each( function(eventName) { Draggables[eventName+'Count'] = Draggables.observers.select( function(o) { return o[eventName]; } ).length; }); } } /*--------------------------------------------------------------------------*/ var Draggable = Class.create(); Draggable._dragging = {}; Draggable.prototype = { initialize: function(element) { var defaults = { handle: false, reverteffect: function(element, top_offset, left_offset) { var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, queue: {scope:'_draggable', position:'end'} }); }, endeffect: function(element) { var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0; new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, queue: {scope:'_draggable', position:'end'}, afterFinish: function(){ Draggable._dragging[element] = false } }); }, zindex: 1000, revert: false, scroll: false, scrollSensitivity: 20, scrollSpeed: 15, snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] } delay: 0 }; if(!arguments[1] || typeof arguments[1].endeffect == 'undefined') Object.extend(defaults, { starteffect: function(element) { element._opacity = Element.getOpacity(element); Draggable._dragging[element] = true; new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); } }); var options = Object.extend(defaults, arguments[1] || {}); this.element = $(element); if(options.handle && (typeof options.handle == 'string')) this.handle = this.element.down('.'+options.handle, 0); if(!this.handle) this.handle = $(options.handle); if(!this.handle) this.handle = this.element; if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { options.scroll = $(options.scroll); this._isScrollChild = Element.childOf(this.element, options.scroll); } Element.makePositioned(this.element); // fix IE this.delta = this.currentDelta(); this.options = options; this.dragging = false; this.eventMouseDown = this.initDrag.bindAsEventListener(this); Event.observe(this.handle, "mousedown", this.eventMouseDown); Draggables.register(this); }, destroy: function() { Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); Draggables.unregister(this); }, currentDelta: function() { return([ parseInt(Element.getStyle(this.element,'left') || '0'), parseInt(Element.getStyle(this.element,'top') || '0')]); }, initDrag: function(event) { if(typeof Draggable._dragging[this.element] != 'undefined' && Draggable._dragging[this.element]) return; if(Event.isLeftClick(event)) { // abort on form elements, fixes a Firefox issue var src = Event.element(event); if((tag_name = src.tagName.toUpperCase()) && ( tag_name=='INPUT' || tag_name=='SELECT' || tag_name=='OPTION' || tag_name=='BUTTON' || tag_name=='TEXTAREA')) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; var pos = Position.cumulativeOffset(this.element); this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); Draggables.activate(this); Event.stop(event); } }, startDrag: function(event) { this.dragging = true; if(this.options.zindex) { this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); this.element.style.zIndex = this.options.zindex; } if(this.options.ghosting) { this._clone = this.element.cloneNode(true); Position.absolutize(this.element); this.element.parentNode.insertBefore(this._clone, this.element); } if(this.options.scroll) { if (this.options.scroll == window) { var where = this._getWindowScroll(this.options.scroll); this.originalScrollLeft = where.left; this.originalScrollTop = where.top; } else { this.originalScrollLeft = this.options.scroll.scrollLeft; this.originalScrollTop = this.options.scroll.scrollTop; } } Draggables.notify('onStart', this, event); if(this.options.starteffect) this.options.starteffect(this.element); }, updateDrag: function(event, pointer) { if(!this.dragging) this.startDrag(event); Position.prepare(); Droppables.show(pointer, this.element); Draggables.notify('onDrag', this, event); this.draw(pointer); if(this.options.change) this.options.change(this); if(this.options.scroll) { this.stopScrolling(); var p; if (this.options.scroll == window) { with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } } else { p = Position.page(this.options.scroll); p[0] += this.options.scroll.scrollLeft + Position.deltaX; p[1] += this.options.scroll.scrollTop + Position.deltaY; p.push(p[0]+this.options.scroll.offsetWidth); p.push(p[1]+this.options.scroll.offsetHeight); } var speed = [0,0]; if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); this.startScrolling(speed); } // fix AppleWebKit rendering if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); Event.stop(event); }, finishDrag: function(event, success) { this.dragging = false; if(this.options.ghosting) { Position.relativize(this.element); Element.remove(this._clone); this._clone = null; } if(success) Droppables.fire(event, this.element); Draggables.notify('onEnd', this, event); var revert = this.options.revert; if(revert && typeof revert == 'function') revert = revert(this.element); var d = this.currentDelta(); if(revert && this.options.reverteffect) { this.options.reverteffect(this.element, d[1]-this.delta[1], d[0]-this.delta[0]); } else { this.delta = d; } if(this.options.zindex) this.element.style.zIndex = this.originalZ; if(this.options.endeffect) this.options.endeffect(this.element); Draggables.deactivate(this); Droppables.reset(); }, keyPress: function(event) { if(event.keyCode!=Event.KEY_ESC) return; this.finishDrag(event, false); Event.stop(event); }, endDrag: function(event) { if(!this.dragging) return; this.stopScrolling(); this.finishDrag(event, true); Event.stop(event); }, draw: function(point) { var pos = Position.cumulativeOffset(this.element); if(this.options.ghosting) { var r = Position.realOffset(this.element); pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; } var d = this.currentDelta(); pos[0] -= d[0]; pos[1] -= d[1]; if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; } var p = [0,1].map(function(i){ return (point[i]-pos[i]-this.offset[i]) }.bind(this)); if(this.options.snap) { if(typeof this.options.snap == 'function') { p = this.options.snap(p[0],p[1],this); } else { if(this.options.snap instanceof Array) { p = p.map( function(v, i) { return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this)) } else { p = p.map( function(v) { return Math.round(v/this.options.snap)*this.options.snap }.bind(this)) } }} var style = this.element.style; if((!this.options.constraint) || (this.options.constraint=='horizontal')) style.left = p[0] + "px"; if((!this.options.constraint) || (this.options.constraint=='vertical')) style.top = p[1] + "px"; if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering }, stopScrolling: function() { if(this.scrollInterval) { clearInterval(this.scrollInterval); this.scrollInterval = null; Draggables._lastScrollPointer = null; } }, startScrolling: function(speed) { if(!(speed[0] || speed[1])) return; this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; this.lastScrolled = new Date(); this.scrollInterval = setInterval(this.scroll.bind(this), 10); }, scroll: function() { var current = new Date(); var delta = current - this.lastScrolled; this.lastScrolled = current; if(this.options.scroll == window) { with (this._getWindowScroll(this.options.scroll)) { if (this.scrollSpeed[0] || this.scrollSpeed[1]) { var d = delta / 1000; this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); } } } else { this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; } Position.prepare(); Droppables.show(Draggables._lastPointer, this.element); Draggables.notify('onDrag', this); if (this._isScrollChild) { Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; if (Draggables._lastScrollPointer[0] < 0) Draggables._lastScrollPointer[0] = 0; if (Draggables._lastScrollPointer[1] < 0) Draggables._lastScrollPointer[1] = 0; this.draw(Draggables._lastScrollPointer); } if(this.options.change) this.options.change(this); }, _getWindowScroll: function(w) { var T, L, W, H; with (w.document) { if (w.document.documentElement && documentElement.scrollTop) { T = documentElement.scrollTop; L = documentElement.scrollLeft; } else if (w.document.body) { T = body.scrollTop; L = body.scrollLeft; } if (w.innerWidth) { W = w.innerWidth; H = w.innerHeight; } else if (w.document.documentElement && documentElement.clientWidth) { W = documentElement.clientWidth; H = documentElement.clientHeight; } else { W = body.offsetWidth; H = body.offsetHeight } } return { top: T, left: L, width: W, height: H }; } } /*--------------------------------------------------------------------------*/ var SortableObserver = Class.create(); SortableObserver.prototype = { initialize: function(element, observer) { this.element = $(element); this.observer = observer; this.lastValue = Sortable.serialize(this.element); }, onStart: function() { this.lastValue = Sortable.serialize(this.element); }, onEnd: function() { Sortable.unmark(); if(this.lastValue != Sortable.serialize(this.element)) this.observer(this.element) } } var Sortable = { SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, sortables: {}, _findRootElement: function(element) { while (element.tagName.toUpperCase() != "BODY") { if(element.id && Sortable.sortables[element.id]) return element; element = element.parentNode; } }, options: function(element) { element = Sortable._findRootElement($(element)); if(!element) return; return Sortable.sortables[element.id]; }, destroy: function(element){ var s = Sortable.options(element); if(s) { Draggables.removeObserver(s.element); s.droppables.each(function(d){ Droppables.remove(d) }); s.draggables.invoke('destroy'); delete Sortable.sortables[s.element.id]; } }, create: function(element) { element = $(element); var options = Object.extend({ element: element, tag: 'li', // assumes li children, override with tag: 'tagname' dropOnEmpty: false, tree: false, treeTag: 'ul', overlap: 'vertical', // one of 'vertical', 'horizontal' constraint: 'vertical', // one of 'vertical', 'horizontal', false containment: element, // also takes array of elements (or id's); or false handle: false, // or a CSS class only: false, delay: 0, hoverclass: null, ghosting: false, scroll: false, scrollSensitivity: 20, scrollSpeed: 15, format: this.SERIALIZE_RULE, onChange: Prototype.emptyFunction, onUpdate: Prototype.emptyFunction }, arguments[1] || {}); // clear any old sortable with same element this.destroy(element); // build options for the draggables var options_for_draggable = { revert: true, scroll: options.scroll, scrollSpeed: options.scrollSpeed, scrollSensitivity: options.scrollSensitivity, delay: options.delay, ghosting: options.ghosting, constraint: options.constraint, handle: options.handle }; if(options.starteffect) options_for_draggable.starteffect = options.starteffect; if(options.reverteffect) options_for_draggable.reverteffect = options.reverteffect; else if(options.ghosting) options_for_draggable.reverteffect = function(element) { element.style.top = 0; element.style.left = 0; }; if(options.endeffect) options_for_draggable.endeffect = options.endeffect; if(options.zindex) options_for_draggable.zindex = options.zindex; // build options for the droppables var options_for_droppable = { overlap: options.overlap, containment: options.containment, tree: options.tree, hoverclass: options.hoverclass, onHover: Sortable.onHover } var options_for_tree = { onHover: Sortable.onEmptyHover, overlap: options.overlap, containment: options.containment, hoverclass: options.hoverclass } // fix for gecko engine Element.cleanWhitespace(element); options.draggables = []; options.droppables = []; // drop on empty handling if(options.dropOnEmpty || options.tree) { Droppables.add(element, options_for_tree); options.droppables.push(element); } (this.findElements(element, options) || []).each( function(e) { // handles are per-draggable var handle = options.handle ? $(e).down('.'+options.handle,0) : e; options.draggables.push( new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); Droppables.add(e, options_for_droppable); if(options.tree) e.treeNode = element; options.droppables.push(e); }); if(options.tree) { (Sortable.findTreeElements(element, options) || []).each( function(e) { Droppables.add(e, options_for_tree); e.treeNode = element; options.droppables.push(e); }); } // keep reference this.sortables[element.id] = options; // for onupdate Draggables.addObserver(new SortableObserver(element, options.onUpdate)); }, // return all suitable-for-sortable elements in a guaranteed order findElements: function(element, options) { return Element.findChildren( element, options.only, options.tree ? true : false, options.tag); }, findTreeElements: function(element, options) { return Element.findChildren( element, options.only, options.tree ? true : false, options.treeTag); }, onHover: function(element, dropon, overlap) { if(Element.isParent(dropon, element)) return; if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { return; } else if(overlap>0.5) { Sortable.mark(dropon, 'before'); if(dropon.previousSibling != element) { var oldParentNode = element.parentNode; element.style.visibility = "hidden"; // fix gecko rendering dropon.parentNode.insertBefore(element, dropon); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } else { Sortable.mark(dropon, 'after'); var nextElement = dropon.nextSibling || null; if(nextElement != element) { var oldParentNode = element.parentNode; element.style.visibility = "hidden"; // fix gecko rendering dropon.parentNode.insertBefore(element, nextElement); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } }, onEmptyHover: function(element, dropon, overlap) { var oldParentNode = element.parentNode; var droponOptions = Sortable.options(dropon); if(!Element.isParent(dropon, element)) { var index; var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only}); var child = null; if(children) { var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); for (index = 0; index < children.length; index += 1) { if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { offset -= Element.offsetSize (children[index], droponOptions.overlap); } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { child = index + 1 < children.length ? children[index + 1] : null; break; } else { child = children[index]; break; } } } dropon.insertBefore(element, child); Sortable.options(oldParentNode).onChange(element); droponOptions.onChange(element); } }, unmark: function() { if(Sortable._marker) Sortable._marker.hide(); }, mark: function(dropon, position) { // mark on ghosting only var sortable = Sortable.options(dropon.parentNode); if(sortable && !sortable.ghosting) return; if(!Sortable._marker) { Sortable._marker = ($('dropmarker') || Element.extend(document.createElement('DIV'))). hide().addClassName('dropmarker').setStyle({position:'absolute'}); document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); } var offsets = Position.cumulativeOffset(dropon); Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); if(position=='after') if(sortable.overlap == 'horizontal') Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'}); else Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'}); Sortable._marker.show(); }, _tree: function(element, options, parent) { var children = Sortable.findElements(element, options) || []; for (var i = 0; i < children.length; ++i) { var match = children[i].id.match(options.format); if (!match) continue; var child = { id: encodeURIComponent(match ? match[1] : null), element: element, parent: parent, children: [], position: parent.children.length, container: $(children[i]).down(options.treeTag) } /* Get the element containing the children and recurse over it */ if (child.container) this._tree(child.container, options, child) parent.children.push (child); } return parent; }, tree: function(element) { element = $(element); var sortableOptions = this.options(element); var options = Object.extend({ tag: sortableOptions.tag, treeTag: sortableOptions.treeTag, only: sortableOptions.only, name: element.id, format: sortableOptions.format }, arguments[1] || {}); var root = { id: null, parent: null, children: [], container: element, position: 0 } return Sortable._tree(element, options, root); }, /* Construct a [i] index for a particular node */ _constructIndex: function(node) { var index = ''; do { if (node.id) index = '[' + node.position + ']' + index; } while ((node = node.parent) != null); return index; }, sequence: function(element) { element = $(element); var options = Object.extend(this.options(element), arguments[1] || {}); return $(this.findElements(element, options) || []).map( function(item) { return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; }); }, setSequence: function(element, new_sequence) { element = $(element); var options = Object.extend(this.options(element), arguments[2] || {}); var nodeMap = {}; this.findElements(element, options).each( function(n) { if (n.id.match(options.format)) nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; n.parentNode.removeChild(n); }); new_sequence.each(function(ident) { var n = nodeMap[ident]; if (n) { n[1].appendChild(n[0]); delete nodeMap[ident]; } }); }, serialize: function(element) { element = $(element); var options = Object.extend(Sortable.options(element), arguments[1] || {}); var name = encodeURIComponent( (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); if (options.tree) { return Sortable.tree(element, arguments[1]).children.map( function (item) { return [name + Sortable._constructIndex(item) + "[id]=" + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); }).flatten().join('&'); } else { return Sortable.sequence(element, arguments[1]).map( function(item) { return name + "[]=" + encodeURIComponent(item); }).join('&'); } } } // Returns true if child is contained within element Element.isParent = function(child, element) { if (!child.parentNode || child == element) return false; if (child.parentNode == element) return true; return Element.isParent(child.parentNode, element); } Element.findChildren = function(element, only, recursive, tagName) { if(!element.hasChildNodes()) return null; tagName = tagName.toUpperCase(); if(only) only = [only].flatten(); var elements = []; $A(element.childNodes).each( function(e) { if(e.tagName && e.tagName.toUpperCase()==tagName && (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) elements.push(e); if(recursive) { var grandchildren = Element.findChildren(e, only, recursive, tagName); if(grandchildren) elements.push(grandchildren); } }); return (elements.length>0 ? elements.flatten() : []); } Element.offsetSize = function (element, type) { return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')]; } Iwordpress/wp-includes/js/scriptaculous/.svn/text-base/effects.js.svn-base// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // Contributors: // Justin Palmer (http://encytemedia.com/) // Mark Pilgrim (http://diveintomark.org/) // Martin Bialasinki // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ // converts rgb() and #xxx to #xxxxxx format, // returns self (or first argument) if not convertable String.prototype.parseColor = function() { var color = '#'; if(this.slice(0,4) == 'rgb(') { var cols = this.slice(4,this.length-1).split(','); var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); } else { if(this.slice(0,1) == '#') { if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); if(this.length==7) color = this.toLowerCase(); } } return(color.length==7 ? color : (arguments[0] || this)); } /*--------------------------------------------------------------------------*/ Element.collectTextNodes = function(element) { return $A($(element).childNodes).collect( function(node) { return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); }).flatten().join(''); } Element.collectTextNodesIgnoreClass = function(element, className) { return $A($(element).childNodes).collect( function(node) { return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodesIgnoreClass(node, className) : '')); }).flatten().join(''); } Element.setContentZoom = function(element, percent) { element = $(element); element.setStyle({fontSize: (percent/100) + 'em'}); if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); return element; } Element.getOpacity = function(element){ return $(element).getStyle('opacity'); } Element.setOpacity = function(element, value){ return $(element).setStyle({opacity:value}); } Element.getInlineOpacity = function(element){ return $(element).style.opacity || ''; } Element.forceRerendering = function(element) { try { element = $(element); var n = document.createTextNode(' '); element.appendChild(n); element.removeChild(n); } catch(e) { } }; /*--------------------------------------------------------------------------*/ Array.prototype.call = function() { var args = arguments; this.each(function(f){ f.apply(this, args) }); } /*--------------------------------------------------------------------------*/ var Effect = { _elementDoesNotExistError: { name: 'ElementDoesNotExistError', message: 'The specified DOM element does not exist, but is required for this effect to operate' }, tagifyText: function(element) { if(typeof Builder == 'undefined') throw("Effect.tagifyText requires including script.aculo.us' builder.js library"); var tagifyStyle = 'position:relative'; if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1'; element = $(element); $A(element.childNodes).each( function(child) { if(child.nodeType==3) { child.nodeValue.toArray().each( function(character) { element.insertBefore( Builder.node('span',{style: tagifyStyle}, character == ' ' ? String.fromCharCode(160) : character), child); }); Element.remove(child); } }); }, multiple: function(element, effect) { var elements; if(((typeof element == 'object') || (typeof element == 'function')) && (element.length)) elements = element; else elements = $(element).childNodes; var options = Object.extend({ speed: 0.1, delay: 0.0 }, arguments[2] || {}); var masterDelay = options.delay; $A(elements).each( function(element, index) { new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); }); }, PAIRS: { 'slide': ['SlideDown','SlideUp'], 'blind': ['BlindDown','BlindUp'], 'appear': ['Appear','Fade'] }, toggle: function(element, effect) { element = $(element); effect = (effect || 'appear').toLowerCase(); var options = Object.extend({ queue: { position:'end', scope:(element.id || 'global'), limit: 1 } }, arguments[2] || {}); Effect[element.visible() ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); } }; var Effect2 = Effect; // deprecated /* ------------- transitions ------------- */ Effect.Transitions = { linear: Prototype.K, sinoidal: function(pos) { return (-Math.cos(pos*Math.PI)/2) + 0.5; }, reverse: function(pos) { return 1-pos; }, flicker: function(pos) { return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; }, wobble: function(pos) { return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; }, pulse: function(pos, pulses) { pulses = pulses || 5; return ( Math.round((pos % (1/pulses)) * pulses) == 0 ? ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) ); }, none: function(pos) { return 0; }, full: function(pos) { return 1; } }; /* ------------- core effects ------------- */ Effect.ScopedQueue = Class.create(); Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), { initialize: function() { this.effects = []; this.interval = null; }, _each: function(iterator) { this.effects._each(iterator); }, add: function(effect) { var timestamp = new Date().getTime(); var position = (typeof effect.options.queue == 'string') ? effect.options.queue : effect.options.queue.position; switch(position) { case 'front': // move unstarted effects after this effect this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { e.startOn += effect.finishOn; e.finishOn += effect.finishOn; }); break; case 'with-last': timestamp = this.effects.pluck('startOn').max() || timestamp; break; case 'end': // start effect after last queued effect has finished timestamp = this.effects.pluck('finishOn').max() || timestamp; break; } effect.startOn += timestamp; effect.finishOn += timestamp; if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) this.effects.push(effect); if(!this.interval) this.interval = setInterval(this.loop.bind(this), 15); }, remove: function(effect) { this.effects = this.effects.reject(function(e) { return e==effect }); if(this.effects.length == 0) { clearInterval(this.interval); this.interval = null; } }, loop: function() { var timePos = new Date().getTime(); for(var i=0, len=this.effects.length;i= this.startOn) { if(timePos >= this.finishOn) { this.render(1.0); this.cancel(); this.event('beforeFinish'); if(this.finish) this.finish(); this.event('afterFinish'); return; } var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); var frame = Math.round(pos * this.options.fps * this.options.duration); if(frame > this.currentFrame) { this.render(pos); this.currentFrame = frame; } } }, render: function(pos) { if(this.state == 'idle') { this.state = 'running'; this.event('beforeSetup'); if(this.setup) this.setup(); this.event('afterSetup'); } if(this.state == 'running') { if(this.options.transition) pos = this.options.transition(pos); pos *= (this.options.to-this.options.from); pos += this.options.from; this.position = pos; this.event('beforeUpdate'); if(this.update) this.update(pos); this.event('afterUpdate'); } }, cancel: function() { if(!this.options.sync) Effect.Queues.get(typeof this.options.queue == 'string' ? 'global' : this.options.queue.scope).remove(this); this.state = 'finished'; }, event: function(eventName) { if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); if(this.options[eventName]) this.options[eventName](this); }, inspect: function() { var data = $H(); for(property in this) if(typeof this[property] != 'function') data[property] = this[property]; return '#'; } } Effect.Parallel = Class.create(); Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), { initialize: function(effects) { this.effects = effects || []; this.start(arguments[1]); }, update: function(position) { this.effects.invoke('render', position); }, finish: function(position) { this.effects.each( function(effect) { effect.render(1.0); effect.cancel(); effect.event('beforeFinish'); if(effect.finish) effect.finish(position); effect.event('afterFinish'); }); } }); Effect.Event = Class.create(); Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), { initialize: function() { var options = Object.extend({ duration: 0 }, arguments[0] || {}); this.start(options); }, update: Prototype.emptyFunction }); Effect.Opacity = Class.create(); Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); // make this work on IE on elements without 'layout' if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom: 1}); var options = Object.extend({ from: this.element.getOpacity() || 0.0, to: 1.0 }, arguments[1] || {}); this.start(options); }, update: function(position) { this.element.setOpacity(position); } }); Effect.Move = Class.create(); Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ x: 0, y: 0, mode: 'relative' }, arguments[1] || {}); this.start(options); }, setup: function() { // Bug in Opera: Opera returns the "real" position of a static element or // relative element that does not have top/left explicitly set. // ==> Always set top and left for position relative elements in your stylesheets // (to 0 if you do not need them) this.element.makePositioned(); this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); this.originalTop = parseFloat(this.element.getStyle('top') || '0'); if(this.options.mode == 'absolute') { // absolute movement, so we need to calc deltaX and deltaY this.options.x = this.options.x - this.originalLeft; this.options.y = this.options.y - this.originalTop; } }, update: function(position) { this.element.setStyle({ left: Math.round(this.options.x * position + this.originalLeft) + 'px', top: Math.round(this.options.y * position + this.originalTop) + 'px' }); } }); // for backwards compatibility Effect.MoveBy = function(element, toTop, toLeft) { return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop }, arguments[3] || {})); }; Effect.Scale = Class.create(); Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { initialize: function(element, percent) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ scaleX: true, scaleY: true, scaleContent: true, scaleFromCenter: false, scaleMode: 'box', // 'box' or 'contents' or {} with provided values scaleFrom: 100.0, scaleTo: percent }, arguments[2] || {}); this.start(options); }, setup: function() { this.restoreAfterFinish = this.options.restoreAfterFinish || false; this.elementPositioning = this.element.getStyle('position'); this.originalStyle = {}; ['top','left','width','height','fontSize'].each( function(k) { this.originalStyle[k] = this.element.style[k]; }.bind(this)); this.originalTop = this.element.offsetTop; this.originalLeft = this.element.offsetLeft; var fontSize = this.element.getStyle('font-size') || '100%'; ['em','px','%','pt'].each( function(fontSizeType) { if(fontSize.indexOf(fontSizeType)>0) { this.fontSize = parseFloat(fontSize); this.fontSizeType = fontSizeType; } }.bind(this)); this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; this.dims = null; if(this.options.scaleMode=='box') this.dims = [this.element.offsetHeight, this.element.offsetWidth]; if(/^content/.test(this.options.scaleMode)) this.dims = [this.element.scrollHeight, this.element.scrollWidth]; if(!this.dims) this.dims = [this.options.scaleMode.originalHeight, this.options.scaleMode.originalWidth]; }, update: function(position) { var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); if(this.options.scaleContent && this.fontSize) this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); }, finish: function(position) { if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle); }, setDimensions: function(height, width) { var d = {}; if(this.options.scaleX) d.width = Math.round(width) + 'px'; if(this.options.scaleY) d.height = Math.round(height) + 'px'; if(this.options.scaleFromCenter) { var topd = (height - this.dims[0])/2; var leftd = (width - this.dims[1])/2; if(this.elementPositioning == 'absolute') { if(this.options.scaleY) d.top = this.originalTop-topd + 'px'; if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; } else { if(this.options.scaleY) d.top = -topd + 'px'; if(this.options.scaleX) d.left = -leftd + 'px'; } } this.element.setStyle(d); } }); Effect.Highlight = Class.create(); Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); this.start(options); }, setup: function() { // Prevent executing on elements not in the layout flow if(this.element.getStyle('display')=='none') { this.cancel(); return; } // Disable background image during the effect this.oldStyle = {}; if (!this.options.keepBackgroundImage) { this.oldStyle.backgroundImage = this.element.getStyle('background-image'); this.element.setStyle({backgroundImage: 'none'}); } if(!this.options.endcolor) this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); if(!this.options.restorecolor) this.options.restorecolor = this.element.getStyle('background-color'); // init color calculations this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); }, update: function(position) { this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) }); }, finish: function() { this.element.setStyle(Object.extend(this.oldStyle, { backgroundColor: this.options.restorecolor })); } }); Effect.ScrollTo = Class.create(); Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); this.start(arguments[1] || {}); }, setup: function() { Position.prepare(); var offsets = Position.cumulativeOffset(this.element); if(this.options.offset) offsets[1] += this.options.offset; var max = window.innerHeight ? window.height - window.innerHeight : document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight); this.scrollStart = Position.deltaY; this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart; }, update: function(position) { Position.prepare(); window.scrollTo(Position.deltaX, this.scrollStart + (position*this.delta)); } }); /* ------------- combination effects ------------- */ Effect.Fade = function(element) { element = $(element); var oldOpacity = element.getInlineOpacity(); var options = Object.extend({ from: element.getOpacity() || 1.0, to: 0.0, afterFinishInternal: function(effect) { if(effect.options.to!=0) return; effect.element.hide().setStyle({opacity: oldOpacity}); }}, arguments[1] || {}); return new Effect.Opacity(element,options); } Effect.Appear = function(element) { element = $(element); var options = Object.extend({ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), to: 1.0, // force Safari to render floated elements properly afterFinishInternal: function(effect) { effect.element.forceRerendering(); }, beforeSetup: function(effect) { effect.element.setOpacity(effect.options.from).show(); }}, arguments[1] || {}); return new Effect.Opacity(element,options); } Effect.Puff = function(element) { element = $(element); var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position'), top: element.style.top, left: element.style.left, width: element.style.width, height: element.style.height }; return new Effect.Parallel( [ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { Position.absolutize(effect.effects[0].element) }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().setStyle(oldStyle); } }, arguments[1] || {}) ); } Effect.BlindUp = function(element) { element = $(element); element.makeClipping(); return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true, afterFinishInternal: function(effect) { effect.element.hide().undoClipping(); } }, arguments[1] || {}) ); } Effect.BlindDown = function(element) { element = $(element); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makeClipping().setStyle({height: '0px'}).show(); }, afterFinishInternal: function(effect) { effect.element.undoClipping(); } }, arguments[1] || {})); } Effect.SwitchOff = function(element) { element = $(element); var oldOpacity = element.getInlineOpacity(); return new Effect.Appear(element, Object.extend({ duration: 0.4, from: 0, transition: Effect.Transitions.flicker, afterFinishInternal: function(effect) { new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true, scaleX: false, scaleContent: false, restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); } }) } }, arguments[1] || {})); } Effect.DropOut = function(element) { element = $(element); var oldStyle = { top: element.getStyle('top'), left: element.getStyle('left'), opacity: element.getInlineOpacity() }; return new Effect.Parallel( [ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ], Object.extend( { duration: 0.5, beforeSetup: function(effect) { effect.effects[0].element.makePositioned(); }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); } }, arguments[1] || {})); } Effect.Shake = function(element) { element = $(element); var oldStyle = { top: element.getStyle('top'), left: element.getStyle('left') }; return new Effect.Move(element, { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { effect.element.undoPositioned().setStyle(oldStyle); }}) }}) }}) }}) }}) }}); } Effect.SlideDown = function(element) { element = $(element).cleanWhitespace(); // SlideDown need to have the content of the element wrapped in a container element with fixed height! var oldInnerBottom = element.down().getStyle('bottom'); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: window.opera ? 0 : 1, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); if(window.opera) effect.element.setStyle({top: ''}); effect.element.makeClipping().setStyle({height: '0px'}).show(); }, afterUpdateInternal: function(effect) { effect.element.down().setStyle({bottom: (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, afterFinishInternal: function(effect) { effect.element.undoClipping().undoPositioned(); effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } }, arguments[1] || {}) ); } Effect.SlideUp = function(element) { element = $(element).cleanWhitespace(); var oldInnerBottom = element.down().getStyle('bottom'); return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box', scaleFrom: 100, restoreAfterFinish: true, beforeStartInternal: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); if(window.opera) effect.element.setStyle({top: ''}); effect.element.makeClipping().show(); }, afterUpdateInternal: function(effect) { effect.element.down().setStyle({bottom: (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom}); effect.element.down().undoPositioned(); } }, arguments[1] || {}) ); } // Bug in opera makes the TD containing this element expand for a instance after finish Effect.Squish = function(element) { return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.makeClipping(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping(); } }); } Effect.Grow = function(element) { element = $(element); var options = Object.extend({ direction: 'center', moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.full }, arguments[1] || {}); var oldStyle = { top: element.style.top, left: element.style.left, height: element.style.height, width: element.style.width, opacity: element.getInlineOpacity() }; var dims = element.getDimensions(); var initialMoveX, initialMoveY; var moveX, moveY; switch (options.direction) { case 'top-left': initialMoveX = initialMoveY = moveX = moveY = 0; break; case 'top-right': initialMoveX = dims.width; initialMoveY = moveY = 0; moveX = -dims.width; break; case 'bottom-left': initialMoveX = moveX = 0; initialMoveY = dims.height; moveY = -dims.height; break; case 'bottom-right': initialMoveX = dims.width; initialMoveY = dims.height; moveX = -dims.width; moveY = -dims.height; break; case 'center': initialMoveX = dims.width / 2; initialMoveY = dims.height / 2; moveX = -dims.width / 2; moveY = -dims.height / 2; break; } return new Effect.Move(element, { x: initialMoveX, y: initialMoveY, duration: 0.01, beforeSetup: function(effect) { effect.element.hide().makeClipping().makePositioned(); }, afterFinishInternal: function(effect) { new Effect.Parallel( [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), new Effect.Scale(effect.element, 100, { scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) ], Object.extend({ beforeSetup: function(effect) { effect.effects[0].element.setStyle({height: '0px'}).show(); }, afterFinishInternal: function(effect) { effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); } }, options) ) } }); } Effect.Shrink = function(element) { element = $(element); var options = Object.extend({ direction: 'center', moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.none }, arguments[1] || {}); var oldStyle = { top: element.style.top, left: element.style.left, height: element.style.height, width: element.style.width, opacity: element.getInlineOpacity() }; var dims = element.getDimensions(); var moveX, moveY; switch (options.direction) { case 'top-left': moveX = moveY = 0; break; case 'top-right': moveX = dims.width; moveY = 0; break; case 'bottom-left': moveX = 0; moveY = dims.height; break; case 'bottom-right': moveX = dims.width; moveY = dims.height; break; case 'center': moveX = dims.width / 2; moveY = dims.height / 2; break; } return new Effect.Parallel( [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) ], Object.extend({ beforeStartInternal: function(effect) { effect.effects[0].element.makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } }, options) ); } Effect.Pulsate = function(element) { element = $(element); var options = arguments[1] || {}; var oldOpacity = element.getInlineOpacity(); var transition = options.transition || Effect.Transitions.sinoidal; var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) }; reverser.bind(transition); return new Effect.Opacity(element, Object.extend(Object.extend({ duration: 2.0, from: 0, afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } }, options), {transition: reverser})); } Effect.Fold = function(element) { element = $(element); var oldStyle = { top: element.style.top, left: element.style.left, width: element.style.width, height: element.style.height }; element.makeClipping(); return new Effect.Scale(element, 5, Object.extend({ scaleContent: false, scaleX: false, afterFinishInternal: function(effect) { new Effect.Scale(element, 1, { scaleContent: false, scaleY: false, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().setStyle(oldStyle); } }); }}, arguments[1] || {})); }; Effect.Morph = Class.create(); Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), { initialize: function(element) { this.element = $(element); if(!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ style: {} }, arguments[1] || {}); if (typeof options.style == 'string') { if(options.style.indexOf(':') == -1) { var cssText = '', selector = '.' + options.style; $A(document.styleSheets).reverse().each(function(styleSheet) { if (styleSheet.cssRules) cssRules = styleSheet.cssRules; else if (styleSheet.rules) cssRules = styleSheet.rules; $A(cssRules).reverse().each(function(rule) { if (selector == rule.selectorText) { cssText = rule.style.cssText; throw $break; } }); if (cssText) throw $break; }); this.style = cssText.parseStyle(); options.afterFinishInternal = function(effect){ effect.element.addClassName(effect.options.style); effect.transforms.each(function(transform) { if(transform.style != 'opacity') effect.element.style[transform.style.camelize()] = ''; }); } } else this.style = options.style.parseStyle(); } else this.style = $H(options.style) this.start(options); }, setup: function(){ function parseColor(color){ if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; color = color.parseColor(); return $R(0,2).map(function(i){ return parseInt( color.slice(i*2+1,i*2+3), 16 ) }); } this.transforms = this.style.map(function(pair){ var property = pair[0].underscore().dasherize(), value = pair[1], unit = null; if(value.parseColor('#zzzzzz') != '#zzzzzz') { value = value.parseColor(); unit = 'color'; } else if(property == 'opacity') { value = parseFloat(value); if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom: 1}); } else if(Element.CSS_LENGTH.test(value)) var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/), value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null; var originalValue = this.element.getStyle(property); return $H({ style: property, originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), targetValue: unit=='color' ? parseColor(value) : value, unit: unit }); }.bind(this)).reject(function(transform){ return ( (transform.originalValue == transform.targetValue) || ( transform.unit != 'color' && (isNaN(transform.originalValue) || isNaN(transform.targetValue)) ) ) }); }, update: function(position) { var style = $H(), value = null; this.transforms.each(function(transform){ value = transform.unit=='color' ? $R(0,2).inject('#',function(m,v,i){ return m+(Math.round(transform.originalValue[i]+ (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : transform.originalValue + Math.round( ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit; style[transform.style] = value; }); this.element.setStyle(style); } }); Effect.Transform = Class.create(); Object.extend(Effect.Transform.prototype, { initialize: function(tracks){ this.tracks = []; this.options = arguments[1] || {}; this.addTracks(tracks); }, addTracks: function(tracks){ tracks.each(function(track){ var data = $H(track).values().first(); this.tracks.push($H({ ids: $H(track).keys().first(), effect: Effect.Morph, options: { style: data } })); }.bind(this)); return this; }, play: function(){ return new Effect.Parallel( this.tracks.map(function(track){ var elements = [$(track.ids) || $$(track.ids)].flatten(); return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) }); }).flatten(), this.options ); } }); Element.CSS_PROPERTIES = $w( 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + 'fontSize fontWeight height left letterSpacing lineHeight ' + 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + 'right textIndent top width wordSpacing zIndex'); Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; String.prototype.parseStyle = function(){ var element = Element.extend(document.createElement('div')); element.innerHTML = '

    '; var style = element.down().style, styleRules = $H(); Element.CSS_PROPERTIES.each(function(property){ if(style[property]) styleRules[property] = style[property]; }); if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) { styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]; } return styleRules; }; Element.morph = function(element, style) { new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {})); return element; }; ['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom', 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( function(f) { Element.Methods[f] = Element[f]; } ); Element.Methods.visualEffect = function(element, effect, options) { s = effect.gsub(/_/, '-').camelize(); effect_class = s.charAt(0).toUpperCase() + s.substring(1); new Effect[effect_class](element, options); return $(element); }; Element.addMethods();Jwordpress/wp-includes/js/scriptaculous/.svn/text-base/MIT-LICENSE.svn-baseSCopyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.Kwordpress/wp-includes/js/scriptaculous/.svn/text-base/prototype.js.svn-base\/* Prototype JavaScript framework, version 1.5.0 * (c) 2005-2007 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.5.0', BrowserFeatures: { XPath: !!document.evaluate }, ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', emptyFunction: function() {}, K: function(x) { return x } } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } Object.extend(Object, { inspect: function(object) { try { if (object === undefined) return 'undefined'; if (object === null) return 'null'; return object.inspect ? object.inspect() : object.toString(); } catch (e) { if (e instanceof RangeError) return '...'; throw e; } }, keys: function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }, values: function(object) { var values = []; for (var property in object) values.push(object[property]); return values; }, clone: function(object) { return Object.extend({}, object); } }); Function.prototype.bind = function() { var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); } } Function.prototype.bindAsEventListener = function(object) { var __method = this, args = $A(arguments), object = args.shift(); return function(event) { return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); } } Object.extend(Number.prototype, { toColorPart: function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; }, succ: function() { return this + 1; }, times: function(iterator) { $R(0, this, true).each(iterator); return this; } }); var Try = { these: function() { var returnValue; for (var i = 0, length = arguments.length; i < length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, stop: function() { if (!this.timer) return; clearInterval(this.timer); this.timer = null; }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(this); } finally { this.currentlyExecuting = false; } } } } String.interpret = function(value){ return value == null ? '' : String(value); } Object.extend(String.prototype, { gsub: function(pattern, replacement) { var result = '', source = this, match; replacement = arguments.callee.prepareReplacement(replacement); while (source.length > 0) { if (match = source.match(pattern)) { result += source.slice(0, match.index); result += String.interpret(replacement(match)); source = source.slice(match.index + match[0].length); } else { result += source, source = ''; } } return result; }, sub: function(pattern, replacement, count) { replacement = this.gsub.prepareReplacement(replacement); count = count === undefined ? 1 : count; return this.gsub(pattern, function(match) { if (--count < 0) return match[0]; return replacement(match); }); }, scan: function(pattern, iterator) { this.gsub(pattern, iterator); return this; }, truncate: function(length, truncation) { length = length || 30; truncation = truncation === undefined ? '...' : truncation; return this.length > length ? this.slice(0, length - truncation.length) + truncation : this; }, strip: function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }, stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, stripScripts: function() { return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); }, extractScripts: function() { var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); return (this.match(matchAll) || []).map(function(scriptTag) { return (scriptTag.match(matchOne) || ['', ''])[1]; }); }, evalScripts: function() { return this.extractScripts().map(function(script) { return eval(script) }); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0] ? (div.childNodes.length > 1 ? $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : div.childNodes[0].nodeValue) : ''; }, toQueryParams: function(separator) { var match = this.strip().match(/([^?#]*)(#.*)?$/); if (!match) return {}; return match[1].split(separator || '&').inject({}, function(hash, pair) { if ((pair = pair.split('='))[0]) { var name = decodeURIComponent(pair[0]); var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; if (hash[name] !== undefined) { if (hash[name].constructor != Array) hash[name] = [hash[name]]; if (value) hash[name].push(value); } else hash[name] = value; } return hash; }); }, toArray: function() { return this.split(''); }, succ: function() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); }, camelize: function() { var parts = this.split('-'), len = parts.length; if (len == 1) return parts[0]; var camelized = this.charAt(0) == '-' ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) : parts[0]; for (var i = 1; i < len; i++) camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); return camelized; }, capitalize: function(){ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); }, underscore: function() { return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); }, dasherize: function() { return this.gsub(/_/,'-'); }, inspect: function(useDoubleQuotes) { var escapedString = this.replace(/\\/g, '\\\\'); if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; else return "'" + escapedString.replace(/'/g, '\\\'') + "'"; } }); String.prototype.gsub.prepareReplacement = function(replacement) { if (typeof replacement == 'function') return replacement; var template = new Template(replacement); return function(match) { return template.evaluate(match) }; } String.prototype.parseQuery = String.prototype.toQueryParams; var Template = Class.create(); Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; Template.prototype = { initialize: function(template, pattern) { this.template = template.toString(); this.pattern = pattern || Template.Pattern; }, evaluate: function(object) { return this.template.gsub(this.pattern, function(match) { var before = match[1]; if (before == '\\') return match[2]; return before + String.interpret(object[match[3]]); }); } } var $break = new Object(); var $continue = new Object(); var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch (e) { if (e != $break) throw e; } return this; }, eachSlice: function(number, iterator) { var index = -number, slices = [], array = this.toArray(); while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.map(iterator); }, all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; }, any: function(iterator) { var result = false; this.each(function(value, index) { if (result = !!(iterator || Prototype.K)(value, index)) throw $break; }); return result; }, collect: function(iterator) { var results = []; this.each(function(value, index) { results.push((iterator || Prototype.K)(value, index)); }); return results; }, detect: function(iterator) { var result; this.each(function(value, index) { if (iterator(value, index)) { result = value; throw $break; } }); return result; }, findAll: function(iterator) { var results = []; this.each(function(value, index) { if (iterator(value, index)) results.push(value); }); return results; }, grep: function(pattern, iterator) { var results = []; this.each(function(value, index) { var stringValue = value.toString(); if (stringValue.match(pattern)) results.push((iterator || Prototype.K)(value, index)); }) return results; }, include: function(object) { var found = false; this.each(function(value) { if (value == object) { found = true; throw $break; } }); return found; }, inGroupsOf: function(number, fillWith) { fillWith = fillWith === undefined ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); }, inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; }, invoke: function(method) { var args = $A(arguments).slice(1); return this.map(function(value) { return value[method].apply(value, args); }); }, max: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value >= result) result = value; }); return result; }, min: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value < result) result = value; }); return result; }, partition: function(iterator) { var trues = [], falses = []; this.each(function(value, index) { ((iterator || Prototype.K)(value, index) ? trues : falses).push(value); }); return [trues, falses]; }, pluck: function(property) { var results = []; this.each(function(value, index) { results.push(value[property]); }); return results; }, reject: function(iterator) { var results = []; this.each(function(value, index) { if (!iterator(value, index)) results.push(value); }); return results; }, sortBy: function(iterator) { return this.map(function(value, index) { return {value: value, criteria: iterator(value, index)}; }).sort(function(left, right) { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; }).pluck('value'); }, toArray: function() { return this.map(); }, zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { return iterator(collections.pluck(index)); }); }, size: function() { return this.toArray().length; }, inspect: function() { return '#'; } } Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.detect, select: Enumerable.findAll, member: Enumerable.include, entries: Enumerable.toArray }); var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0, length = iterable.length; i < length; i++) results.push(iterable[i]); return results; } } Object.extend(Array.prototype, Enumerable); if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0, length = this.length; i < length; i++) iterator(this[i]); }, clear: function() { this.length = 0; return this; }, first: function() { return this[0]; }, last: function() { return this[this.length - 1]; }, compact: function() { return this.select(function(value) { return value != null; }); }, flatten: function() { return this.inject([], function(array, value) { return array.concat(value && value.constructor == Array ? value.flatten() : [value]); }); }, without: function() { var values = $A(arguments); return this.select(function(value) { return !values.include(value); }); }, indexOf: function(object) { for (var i = 0, length = this.length; i < length; i++) if (this[i] == object) return i; return -1; }, reverse: function(inline) { return (inline !== false ? this : this.toArray())._reverse(); }, reduce: function() { return this.length > 1 ? this : this[0]; }, uniq: function() { return this.inject([], function(array, value) { return array.include(value) ? array : array.concat([value]); }); }, clone: function() { return [].concat(this); }, size: function() { return this.length; }, inspect: function() { return '[' + this.map(Object.inspect).join(', ') + ']'; } }); Array.prototype.toArray = Array.prototype.clone; function $w(string){ string = string.strip(); return string ? string.split(/\s+/) : []; } if(window.opera){ Array.prototype.concat = function(){ var array = []; for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); for(var i = 0, length = arguments.length; i < length; i++) { if(arguments[i].constructor == Array) { for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) array.push(arguments[i][j]); } else { array.push(arguments[i]); } } return array; } } var Hash = function(obj) { Object.extend(this, obj || {}); }; Object.extend(Hash, { toQueryString: function(obj) { var parts = []; this.prototype._each.call(obj, function(pair) { if (!pair.key) return; if (pair.value && pair.value.constructor == Array) { var values = pair.value.compact(); if (values.length < 2) pair.value = values.reduce(); else { key = encodeURIComponent(pair.key); values.each(function(value) { value = value != undefined ? encodeURIComponent(value) : ''; parts.push(key + '=' + encodeURIComponent(value)); }); return; } } if (pair.value == undefined) pair[1] = ''; parts.push(pair.map(encodeURIComponent).join('=')); }); return parts.join('&'); } }); Object.extend(Hash.prototype, Enumerable); Object.extend(Hash.prototype, { _each: function(iterator) { for (var key in this) { var value = this[key]; if (value && value == Hash.prototype[key]) continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, keys: function() { return this.pluck('key'); }, values: function() { return this.pluck('value'); }, merge: function(hash) { return $H(hash).inject(this, function(mergedHash, pair) { mergedHash[pair.key] = pair.value; return mergedHash; }); }, remove: function() { var result; for(var i = 0, length = arguments.length; i < length; i++) { var value = this[arguments[i]]; if (value !== undefined){ if (result === undefined) result = value; else { if (result.constructor != Array) result = [result]; result.push(value) } } delete this[arguments[i]]; } return result; }, toQueryString: function() { return Hash.toQueryString(this); }, inspect: function() { return '#'; } }); function $H(object) { if (object && object.constructor == Hash) return object; return new Hash(object); }; ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }, _each: function(iterator) { var value = this.start; while (this.include(value)) { iterator(value); value = value.succ(); } }, include: function(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } }); var $R = function(start, end, exclusive) { return new ObjectRange(start, end, exclusive); } var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, activeRequestCount: 0 } Ajax.Responders = { responders: [], _each: function(iterator) { this.responders._each(iterator); }, register: function(responder) { if (!this.include(responder)) this.responders.push(responder); }, unregister: function(responder) { this.responders = this.responders.without(responder); }, dispatch: function(callback, request, transport, json) { this.each(function(responder) { if (typeof responder[callback] == 'function') { try { responder[callback].apply(responder, [request, transport, json]); } catch (e) {} } }); } }; Object.extend(Ajax.Responders, Enumerable); Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++; }, onComplete: function() { Ajax.activeRequestCount--; } }); Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, contentType: 'application/x-www-form-urlencoded', encoding: 'UTF-8', parameters: '' } Object.extend(this.options, options || {}); this.options.method = this.options.method.toLowerCase(); if (typeof this.options.parameters == 'string') this.options.parameters = this.options.parameters.toQueryParams(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { _complete: false, initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { this.url = url; this.method = this.options.method; var params = this.options.parameters; if (!['get', 'post'].include(this.method)) { // simulate other verbs over post params['_method'] = this.method; this.method = 'post'; } params = Hash.toQueryString(params); if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' // when GET, append parameters to URL if (this.method == 'get' && params) this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; try { Ajax.Responders.dispatch('onCreate', this, this.transport); this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous); if (this.options.asynchronous) setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); this.transport.onreadystatechange = this.onStateChange.bind(this); this.setRequestHeaders(); var body = this.method == 'post' ? (this.options.postBody || params) : null; this.transport.send(body); /* Force Firefox to handle ready state 4 for synchronous requests */ if (!this.options.asynchronous && this.transport.overrideMimeType) this.onStateChange(); } catch (e) { this.dispatchException(e); } }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState > 1 && !((readyState == 4) && this._complete)) this.respondToReadyState(this.transport.readyState); }, setRequestHeaders: function() { var headers = { 'X-Requested-With': 'XMLHttpRequest', 'X-Prototype-Version': Prototype.Version, 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' }; if (this.method == 'post') { headers['Content-type'] = this.options.contentType + (this.options.encoding ? '; charset=' + this.options.encoding : ''); /* Force "Connection: close" for older Mozilla browsers to work * around a bug where XMLHttpRequest sends an incorrect * Content-length header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) headers['Connection'] = 'close'; } // user-defined headers if (typeof this.options.requestHeaders == 'object') { var extras = this.options.requestHeaders; if (typeof extras.push == 'function') for (var i = 0, length = extras.length; i < length; i += 2) headers[extras[i]] = extras[i+1]; else $H(extras).each(function(pair) { headers[pair.key] = pair.value }); } for (var name in headers) this.transport.setRequestHeader(name, headers[name]); }, success: function() { return !this.transport.status || (this.transport.status >= 200 && this.transport.status < 300); }, respondToReadyState: function(readyState) { var state = Ajax.Request.Events[readyState]; var transport = this.transport, json = this.evalJSON(); if (state == 'Complete') { try { this._complete = true; (this.options['on' + this.transport.status] || this.options['on' + (this.success() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(transport, json); } catch (e) { this.dispatchException(e); } if ((this.getHeader('Content-type') || 'text/javascript').strip(). match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) this.evalResponse(); } try { (this.options['on' + state] || Prototype.emptyFunction)(transport, json); Ajax.Responders.dispatch('on' + state, this, transport, json); } catch (e) { this.dispatchException(e); } if (state == 'Complete') { // avoid memory leak in MSIE: clean up this.transport.onreadystatechange = Prototype.emptyFunction; } }, getHeader: function(name) { try { return this.transport.getResponseHeader(name); } catch (e) { return null } }, evalJSON: function() { try { var json = this.getHeader('X-JSON'); return json ? eval('(' + json + ')') : null; } catch (e) { return null } }, evalResponse: function() { try { return eval(this.transport.responseText); } catch (e) { this.dispatchException(e); } }, dispatchException: function(exception) { (this.options.onException || Prototype.emptyFunction)(this, exception); Ajax.Responders.dispatch('onException', this, exception); } }); Ajax.Updater = Class.create(); Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { this.container = { success: (container.success || container), failure: (container.failure || (container.success ? null : container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function(transport, param) { this.updateContent(); onComplete(transport, param); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.container[this.success() ? 'success' : 'failure']; var response = this.transport.responseText; if (!this.options.evalScripts) response = response.stripScripts(); if (receiver = $(receiver)) { if (this.options.insertion) new this.options.insertion(receiver, response); else receiver.update(response); } if (this.success()) { if (this.onComplete) setTimeout(this.onComplete.bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = (this.options.decay || 1); this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.options.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); function $(element) { if (arguments.length > 1) { for (var i = 0, elements = [], length = arguments.length; i < length; i++) elements.push($(arguments[i])); return elements; } if (typeof element == 'string') element = document.getElementById(element); return Element.extend(element); } if (Prototype.BrowserFeatures.XPath) { document._getElementsByXPath = function(expression, parentElement) { var results = []; var query = document.evaluate(expression, $(parentElement) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i)); return results; }; } document.getElementsByClassName = function(className, parentElement) { if (Prototype.BrowserFeatures.XPath) { var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; return document._getElementsByXPath(q, parentElement); } else { var children = ($(parentElement) || document.body).getElementsByTagName('*'); var elements = [], child; for (var i = 0, length = children.length; i < length; i++) { child = children[i]; if (Element.hasClassName(child, className)) elements.push(Element.extend(child)); } return elements; } }; /*--------------------------------------------------------------------------*/ if (!window.Element) var Element = new Object(); Element.extend = function(element) { if (!element || _nativeExtensions || element.nodeType == 3) return element; if (!element._extended && element.tagName && element != window) { var methods = Object.clone(Element.Methods), cache = Element.extend.cache; if (element.tagName == 'FORM') Object.extend(methods, Form.Methods); if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) Object.extend(methods, Form.Element.Methods); Object.extend(methods, Element.Methods.Simulated); for (var property in methods) { var value = methods[property]; if (typeof value == 'function' && !(property in element)) element[property] = cache.findOrStore(value); } } element._extended = true; return element; }; Element.extend.cache = { findOrStore: function(value) { return this[value] = this[value] || function() { return value.apply(null, [this].concat($A(arguments))); } } }; Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; }, toggle: function(element) { element = $(element); Element[Element.visible(element) ? 'hide' : 'show'](element); return element; }, hide: function(element) { $(element).style.display = 'none'; return element; }, show: function(element) { $(element).style.display = ''; return element; }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); return element; }, update: function(element, html) { html = typeof html == 'undefined' ? '' : html.toString(); $(element).innerHTML = html.stripScripts(); setTimeout(function() {html.evalScripts()}, 10); return element; }, replace: function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); if (element.outerHTML) { element.outerHTML = html.stripScripts(); } else { var range = element.ownerDocument.createRange(); range.selectNodeContents(element); element.parentNode.replaceChild( range.createContextualFragment(html.stripScripts()), element); } setTimeout(function() {html.evalScripts()}, 10); return element; }, inspect: function(element) { element = $(element); var result = '<' + element.tagName.toLowerCase(); $H({'id': 'id', 'className': 'class'}).each(function(pair) { var property = pair.first(), attribute = pair.last(); var value = (element[property] || '').toString(); if (value) result += ' ' + attribute + '=' + value.inspect(true); }); return result + '>'; }, recursivelyCollect: function(element, property) { element = $(element); var elements = []; while (element = element[property]) if (element.nodeType == 1) elements.push(Element.extend(element)); return elements; }, ancestors: function(element) { return $(element).recursivelyCollect('parentNode'); }, descendants: function(element) { return $A($(element).getElementsByTagName('*')); }, immediateDescendants: function(element) { if (!(element = $(element).firstChild)) return []; while (element && element.nodeType != 1) element = element.nextSibling; if (element) return [element].concat($(element).nextSiblings()); return []; }, previousSiblings: function(element) { return $(element).recursivelyCollect('previousSibling'); }, nextSiblings: function(element) { return $(element).recursivelyCollect('nextSibling'); }, siblings: function(element) { element = $(element); return element.previousSiblings().reverse().concat(element.nextSiblings()); }, match: function(element, selector) { if (typeof selector == 'string') selector = new Selector(selector); return selector.match($(element)); }, up: function(element, expression, index) { return Selector.findElement($(element).ancestors(), expression, index); }, down: function(element, expression, index) { return Selector.findElement($(element).descendants(), expression, index); }, previous: function(element, expression, index) { return Selector.findElement($(element).previousSiblings(), expression, index); }, next: function(element, expression, index) { return Selector.findElement($(element).nextSiblings(), expression, index); }, getElementsBySelector: function() { var args = $A(arguments), element = $(args.shift()); return Selector.findChildElements(element, args); }, getElementsByClassName: function(element, className) { return document.getElementsByClassName(className, element); }, readAttribute: function(element, name) { element = $(element); if (document.all && !window.opera) { var t = Element._attributeTranslations; if (t.values[name]) return t.values[name](element, name); if (t.names[name]) name = t.names[name]; var attribute = element.attributes[name]; if(attribute) return attribute.nodeValue; } return element.getAttribute(name); }, getHeight: function(element) { return $(element).getDimensions().height; }, getWidth: function(element) { return $(element).getDimensions().width; }, classNames: function(element) { return new Element.ClassNames(element); }, hasClassName: function(element, className) { if (!(element = $(element))) return; var elementClassName = element.className; if (elementClassName.length == 0) return false; if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) return true; return false; }, addClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).add(className); return element; }, removeClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).remove(className); return element; }, toggleClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); return element; }, observe: function() { Event.observe.apply(Event, arguments); return $A(arguments).first(); }, stopObserving: function() { Event.stopObserving.apply(Event, arguments); return $A(arguments).first(); }, // removes whitespace-only text node children cleanWhitespace: function(element) { element = $(element); var node = element.firstChild; while (node) { var nextNode = node.nextSibling; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) element.removeChild(node); node = nextNode; } return element; }, empty: function(element) { return $(element).innerHTML.match(/^\s*$/); }, descendantOf: function(element, ancestor) { element = $(element), ancestor = $(ancestor); while (element = element.parentNode) if (element == ancestor) return true; return false; }, scrollTo: function(element) { element = $(element); var pos = Position.cumulativeOffset(element); window.scrollTo(pos[0], pos[1]); return element; }, getStyle: function(element, style) { element = $(element); if (['float','cssFloat'].include(style)) style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); style = style.camelize(); var value = element.style[style]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css[style] : null; } else if (element.currentStyle) { value = element.currentStyle[style]; } } if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) value = element['offset'+style.capitalize()] + 'px'; if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) if (Element.getStyle(element, 'position') == 'static') value = 'auto'; if(style == 'opacity') { if(value) return parseFloat(value); if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) if(value[1]) return parseFloat(value[1]) / 100; return 1.0; } return value == 'auto' ? null : value; }, setStyle: function(element, style) { element = $(element); for (var name in style) { var value = style[name]; if(name == 'opacity') { if (value == 1) { value = (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else if(value == '') { if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else { if(value < 0.00001) value = 0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + 'alpha(opacity='+value*100+')'; } } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; element.style[name.camelize()] = value; } return element; }, getDimensions: function(element) { element = $(element); var display = $(element).getStyle('display'); if (display != 'none' && display != null) // Safari bug return {width: element.offsetWidth, height: element.offsetHeight}; // All *Width and *Height properties give 0 on elements with display none, // so enable the element temporarily var els = element.style; var originalVisibility = els.visibility; var originalPosition = els.position; var originalDisplay = els.display; els.visibility = 'hidden'; els.position = 'absolute'; els.display = 'block'; var originalWidth = element.clientWidth; var originalHeight = element.clientHeight; els.display = originalDisplay; els.position = originalPosition; els.visibility = originalVisibility; return {width: originalWidth, height: originalHeight}; }, makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; // Opera returns the offset relative to the positioning context, when an // element is position relative but top and left have not been defined if (window.opera) { element.style.top = 0; element.style.left = 0; } } return element; }, undoPositioned: function(element) { element = $(element); if (element._madePositioned) { element._madePositioned = undefined; element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; } return element; }, makeClipping: function(element) { element = $(element); if (element._overflow) return element; element._overflow = element.style.overflow || 'auto'; if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') element.style.overflow = 'hidden'; return element; }, undoClipping: function(element) { element = $(element); if (!element._overflow) return element; element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; element._overflow = null; return element; } }; Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); Element._attributeTranslations = {}; Element._attributeTranslations.names = { colspan: "colSpan", rowspan: "rowSpan", valign: "vAlign", datetime: "dateTime", accesskey: "accessKey", tabindex: "tabIndex", enctype: "encType", maxlength: "maxLength", readonly: "readOnly", longdesc: "longDesc" }; Element._attributeTranslations.values = { _getAttr: function(element, attribute) { return element.getAttribute(attribute, 2); }, _flag: function(element, attribute) { return $(element).hasAttribute(attribute) ? attribute : null; }, style: function(element) { return element.style.cssText.toLowerCase(); }, title: function(element) { var node = element.getAttributeNode('title'); return node.specified ? node.nodeValue : null; } }; Object.extend(Element._attributeTranslations.values, { href: Element._attributeTranslations.values._getAttr, src: Element._attributeTranslations.values._getAttr, disabled: Element._attributeTranslations.values._flag, checked: Element._attributeTranslations.values._flag, readonly: Element._attributeTranslations.values._flag, multiple: Element._attributeTranslations.values._flag }); Element.Methods.Simulated = { hasAttribute: function(element, attribute) { var t = Element._attributeTranslations; attribute = t.names[attribute] || attribute; return $(element).getAttributeNode(attribute).specified; } }; // IE is missing .innerHTML support for TABLE-related elements if (document.all && !window.opera){ Element.Methods.update = function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); var tagName = element.tagName.toUpperCase(); if (['THEAD','TBODY','TR','TD'].include(tagName)) { var div = document.createElement('div'); switch (tagName) { case 'THEAD': case 'TBODY': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 2; break; case 'TR': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 3; break; case 'TD': div.innerHTML = '
    ' + html.stripScripts() + '
    '; depth = 4; } $A(element.childNodes).each(function(node){ element.removeChild(node) }); depth.times(function(){ div = div.firstChild }); $A(div.childNodes).each( function(node){ element.appendChild(node) }); } else { element.innerHTML = html.stripScripts(); } setTimeout(function() {html.evalScripts()}, 10); return element; } }; Object.extend(Element, Element.Methods); var _nativeExtensions = false; if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { var className = 'HTML' + tag + 'Element'; if(window[className]) return; var klass = window[className] = {}; klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; }); Element.addMethods = function(methods) { Object.extend(Element.Methods, methods || {}); function copy(methods, destination, onlyIfAbsent) { onlyIfAbsent = onlyIfAbsent || false; var cache = Element.extend.cache; for (var property in methods) { var value = methods[property]; if (!onlyIfAbsent || !(property in destination)) destination[property] = cache.findOrStore(value); } } if (typeof HTMLElement != 'undefined') { copy(Element.Methods, HTMLElement.prototype); copy(Element.Methods.Simulated, HTMLElement.prototype, true); copy(Form.Methods, HTMLFormElement.prototype); [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { copy(Form.Element.Methods, klass.prototype); }); _nativeExtensions = true; } } var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content.stripScripts(); if (this.adjacency && this.element.insertAdjacentHTML) { try { this.element.insertAdjacentHTML(this.adjacency, this.content); } catch (e) { var tagName = this.element.tagName.toUpperCase(); if (['TBODY', 'TR'].include(tagName)) { this.insertContent(this.contentFromAnonymousTable()); } else { throw e; } } } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.insertContent([this.range.createContextualFragment(this.content)]); } setTimeout(function() {content.evalScripts()}, 10); }, contentFromAnonymousTable: function() { var div = document.createElement('div'); div.innerHTML = '' + this.content + '
    '; return $A(div.childNodes[0].childNodes[0].childNodes); } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element); }).bind(this)); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function(fragments) { fragments.reverse(false).each((function(fragment) { this.element.insertBefore(fragment, this.element.firstChild); }).bind(this)); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.appendChild(fragment); }).bind(this)); } }); Insertion.After = Class.create(); Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element.nextSibling); }).bind(this)); } }); /*--------------------------------------------------------------------------*/ Element.ClassNames = Class.create(); Element.ClassNames.prototype = { initialize: function(element) { this.element = $(element); }, _each: function(iterator) { this.element.className.split(/\s+/).select(function(name) { return name.length > 0; })._each(iterator); }, set: function(className) { this.element.className = className; }, add: function(classNameToAdd) { if (this.include(classNameToAdd)) return; this.set($A(this).concat(classNameToAdd).join(' ')); }, remove: function(classNameToRemove) { if (!this.include(classNameToRemove)) return; this.set($A(this).without(classNameToRemove).join(' ')); }, toString: function() { return $A(this).join(' '); } }; Object.extend(Element.ClassNames.prototype, Enumerable); var Selector = Class.create(); Selector.prototype = { initialize: function(expression) { this.params = {classNames: []}; this.expression = expression.toString().strip(); this.parseExpression(); this.compileMatcher(); }, parseExpression: function() { function abort(message) { throw 'Parse error in selector: ' + message; } if (this.expression == '') abort('empty expression'); var params = this.params, expr = this.expression, match, modifier, clause, rest; while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { params.attributes = params.attributes || []; params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); expr = match[1]; } if (expr == '*') return this.params.wildcard = true; while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { modifier = match[1], clause = match[2], rest = match[3]; switch (modifier) { case '#': params.id = clause; break; case '.': params.classNames.push(clause); break; case '': case undefined: params.tagName = clause.toUpperCase(); break; default: abort(expr.inspect()); } expr = rest; } if (expr.length > 0) abort(expr.inspect()); }, buildMatchExpression: function() { var params = this.params, conditions = [], clause; if (params.wildcard) conditions.push('true'); if (clause = params.id) conditions.push('element.readAttribute("id") == ' + clause.inspect()); if (clause = params.tagName) conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); if ((clause = params.classNames).length > 0) for (var i = 0, length = clause.length; i < length; i++) conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); if (clause = params.attributes) { clause.each(function(attribute) { var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; var splitValueBy = function(delimiter) { return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; } switch (attribute.operator) { case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; case '|=': conditions.push( splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() ); break; case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; case '': case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; default: throw 'Unknown operator ' + attribute.operator + ' in selector'; } }); } return conditions.join(' && '); }, compileMatcher: function() { this.match = new Function('element', 'if (!element.tagName) return false; \ element = $(element); \ return ' + this.buildMatchExpression()); }, findElements: function(scope) { var element; if (element = $(this.params.id)) if (this.match(element)) if (!scope || Element.childOf(element, scope)) return [element]; scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); var results = []; for (var i = 0, length = scope.length; i < length; i++) if (this.match(element = scope[i])) results.push(Element.extend(element)); return results; }, toString: function() { return this.expression; } } Object.extend(Selector, { matchElements: function(elements, expression) { var selector = new Selector(expression); return elements.select(selector.match.bind(selector)).map(Element.extend); }, findElement: function(elements, expression, index) { if (typeof expression == 'number') index = expression, expression = false; return Selector.matchElements(elements, expression || '*')[index || 0]; }, findChildElements: function(element, expressions) { return expressions.map(function(expression) { return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { var selector = new Selector(expr); return results.inject([], function(elements, result) { return elements.concat(selector.findElements(result || element)); }); }); }).flatten(); } }); function $$() { return Selector.findChildElements(document, $A(arguments)); } var Form = { reset: function(form) { $(form).reset(); return form; }, serializeElements: function(elements, getHash) { var data = elements.inject({}, function(result, element) { if (!element.disabled && element.name) { var key = element.name, value = $(element).getValue(); if (value != undefined) { if (result[key]) { if (result[key].constructor != Array) result[key] = [result[key]]; result[key].push(value); } else result[key] = value; } } return result; }); return getHash ? data : Hash.toQueryString(data); } }; Form.Methods = { serialize: function(form, getHash) { return Form.serializeElements(Form.getElements(form), getHash); }, getElements: function(form) { return $A($(form).getElementsByTagName('*')).inject([], function(elements, child) { if (Form.Element.Serializers[child.tagName.toLowerCase()]) elements.push(Element.extend(child)); return elements; } ); }, getInputs: function(form, typeName, name) { form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return $A(inputs).map(Element.extend); for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(Element.extend(input)); } return matchingInputs; }, disable: function(form) { form = $(form); form.getElements().each(function(element) { element.blur(); element.disabled = 'true'; }); return form; }, enable: function(form) { form = $(form); form.getElements().each(function(element) { element.disabled = ''; }); return form; }, findFirstElement: function(form) { return $(form).getElements().find(function(element) { return element.type != 'hidden' && !element.disabled && ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); }); }, focusFirstElement: function(form) { form = $(form); form.findFirstElement().activate(); return form; } } Object.extend(Form, Form.Methods); /*--------------------------------------------------------------------------*/ Form.Element = { focus: function(element) { $(element).focus(); return element; }, select: function(element) { $(element).select(); return element; } } Form.Element.Methods = { serialize: function(element) { element = $(element); if (!element.disabled && element.name) { var value = element.getValue(); if (value != undefined) { var pair = {}; pair[element.name] = value; return Hash.toQueryString(pair); } } return ''; }, getValue: function(element) { element = $(element); var method = element.tagName.toLowerCase(); return Form.Element.Serializers[method](element); }, clear: function(element) { $(element).value = ''; return element; }, present: function(element) { return $(element).value != ''; }, activate: function(element) { element = $(element); element.focus(); if (element.select && ( element.tagName.toLowerCase() != 'input' || !['button', 'reset', 'submit'].include(element.type) ) ) element.select(); return element; }, disable: function(element) { element = $(element); element.disabled = true; return element; }, enable: function(element) { element = $(element); element.blur(); element.disabled = false; return element; } } Object.extend(Form.Element, Form.Element.Methods); var Field = Form.Element; var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); default: return Form.Element.Serializers.textarea(element); } }, inputSelector: function(element) { return element.checked ? element.value : null; }, textarea: function(element) { return element.value; }, select: function(element) { return this[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, selectOne: function(element) { var index = element.selectedIndex; return index >= 0 ? this.optionValue(element.options[index]) : null; }, selectMany: function(element) { var values, length = element.length; if (!length) return null; for (var i = 0, values = []; i < length; i++) { var opt = element.options[i]; if (opt.selected) values.push(this.optionValue(opt)); } return values; }, optionValue: function(opt) { // extend element because hasAttribute may not be native return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; } } /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); var changed = ('string' == typeof this.lastValue && 'string' == typeof value ? this.lastValue != value : String(this.lastValue) != String(value)); if (changed) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { Form.getElements(this.element).each(this.registerCallback.bind(this)); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': Event.observe(element, 'click', this.onElementEvent.bind(this)); break; default: Event.observe(element, 'change', this.onElementEvent.bind(this)); break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, KEY_HOME: 36, KEY_END: 35, KEY_PAGEUP: 33, KEY_PAGEDOWN: 34, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0, length = Event.observers.length; i < length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) name = 'keydown'; Event._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { try { element.detachEvent('on' + name, observer); } catch (e) {} } } }); /* prevent memory leaks in IE */ if (navigator.appVersion.match(/\bMSIE\b/)) Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, positionedOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; if (element) { if(element.tagName=='BODY') break; var p = Element.getStyle(element, 'position'); if (p == 'relative' || p == 'absolute') break; } } while (element); return [valueL, valueT]; }, offsetParent: function(element) { if (element.offsetParent) return element.offsetParent; if (element == document.body) return element; while ((element = element.parentNode) && element != document.body) if (Element.getStyle(element, 'position') != 'static') return element; return document.body; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, page: function(forElement) { var valueT = 0, valueL = 0; var element = forElement; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; // Safari fix if (element.offsetParent==document.body) if (Element.getStyle(element,'position')=='absolute') break; } while (element = element.offsetParent); element = forElement; do { if (!window.opera || element.tagName=='BODY') { valueT -= element.scrollTop || 0; valueL -= element.scrollLeft || 0; } } while (element = element.parentNode); return [valueL, valueT]; }, clone: function(source, target) { var options = Object.extend({ setLeft: true, setTop: true, setWidth: true, setHeight: true, offsetTop: 0, offsetLeft: 0 }, arguments[2] || {}) // find page position of source source = $(source); var p = Position.page(source); // find coordinate system to use target = $(target); var delta = [0, 0]; var parent = null; // delta [0,0] will do fine with position: fixed elements, // position:absolute needs offsetParent deltas if (Element.getStyle(target,'position') == 'absolute') { parent = Position.offsetParent(target); delta = Position.page(parent); } // correct by body offsets (fixes Safari) if (parent == document.body) { delta[0] -= document.body.offsetLeft; delta[1] -= document.body.offsetTop; } // set position if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; if(options.setWidth) target.style.width = source.offsetWidth + 'px'; if(options.setHeight) target.style.height = source.offsetHeight + 'px'; }, absolutize: function(element) { element = $(element); if (element.style.position == 'absolute') return; Position.prepare(); var offsets = Position.positionedOffset(element); var top = offsets[1]; var left = offsets[0]; var width = element.clientWidth; var height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); element._originalWidth = element.style.width; element._originalHeight = element.style.height; element.style.position = 'absolute'; element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.width = width + 'px'; element.style.height = height + 'px'; }, relativize: function(element) { element = $(element); if (element.style.position == 'relative') return; Position.prepare(); element.style.position = 'relative'; var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.height = element._originalHeight; element.style.width = element._originalWidth; } } // Safari returns margins on body which is incorrect if the child is absolutely // positioned. For performance reasons, redefine Position.cumulativeOffset for // KHTML/WebKit only. if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { Position.cumulativeOffset = function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; if (element.offsetParent == document.body) if (Element.getStyle(element, 'position') == 'absolute') break; element = element.offsetParent; } while (element); return [valueL, valueT]; } } Element.addMethods();Owordpress/wp-includes/js/scriptaculous/.svn/text-base/scriptaculous.js.svn-base d// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // For details, see the script.aculo.us web site: http://script.aculo.us/ var Scriptaculous = { Version: '1.7.0', require: function(libraryName) { // inserting via DOM fails in Safari 2.0, so brute force approach document.write(''); }, load: function() { if((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined') || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5) throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); var includes = s.src.match(/\?.*load=([a-z,]*)/); (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each( function(include) { Scriptaculous.require(path+include+'.js') }); }); } } Scriptaculous.load();Hwordpress/wp-includes/js/scriptaculous/.svn/text-base/slider.js.svn-base(// script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ if(!Control) var Control = {}; Control.Slider = Class.create(); // options: // axis: 'vertical', or 'horizontal' (default) // // callbacks: // onChange(value) // onSlide(value) Control.Slider.prototype = { initialize: function(handle, track, options) { var slider = this; if(handle instanceof Array) { this.handles = handle.collect( function(e) { return $(e) }); } else { this.handles = [$(handle)]; } this.track = $(track); this.options = options || {}; this.axis = this.options.axis || 'horizontal'; this.increment = this.options.increment || 1; this.step = parseInt(this.options.step || '1'); this.range = this.options.range || $R(0,1); this.value = 0; // assure backwards compat this.values = this.handles.map( function() { return 0 }); this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false; this.options.startSpan = $(this.options.startSpan || null); this.options.endSpan = $(this.options.endSpan || null); this.restricted = this.options.restricted || false; this.maximum = this.options.maximum || this.range.end; this.minimum = this.options.minimum || this.range.start; // Will be used to align the handle onto the track, if necessary this.alignX = parseInt(this.options.alignX || '0'); this.alignY = parseInt(this.options.alignY || '0'); this.trackLength = this.maximumOffset() - this.minimumOffset(); this.handleLength = this.isVertical() ? (this.handles[0].offsetHeight != 0 ? this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : this.handles[0].style.width.replace(/px$/,"")); this.active = false; this.dragging = false; this.disabled = false; if(this.options.disabled) this.setDisabled(); // Allowed values array this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; if(this.allowedValues) { this.minimum = this.allowedValues.min(); this.maximum = this.allowedValues.max(); } this.eventMouseDown = this.startDrag.bindAsEventListener(this); this.eventMouseUp = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.update.bindAsEventListener(this); // Initialize handles in reverse (make sure first handle is active) this.handles.each( function(h,i) { i = slider.handles.length-1-i; slider.setValue(parseFloat( (slider.options.sliderValue instanceof Array ? slider.options.sliderValue[i] : slider.options.sliderValue) || slider.range.start), i); Element.makePositioned(h); // fix IE Event.observe(h, "mousedown", slider.eventMouseDown); }); Event.observe(this.track, "mousedown", this.eventMouseDown); Event.observe(document, "mouseup", this.eventMouseUp); Event.observe(document, "mousemove", this.eventMouseMove); this.initialized = true; }, dispose: function() { var slider = this; Event.stopObserving(this.track, "mousedown", this.eventMouseDown); Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); this.handles.each( function(h) { Event.stopObserving(h, "mousedown", slider.eventMouseDown); }); }, setDisabled: function(){ this.disabled = true; }, setEnabled: function(){ this.disabled = false; }, getNearestValue: function(value){ if(this.allowedValues){ if(value >= this.allowedValues.max()) return(this.allowedValues.max()); if(value <= this.allowedValues.min()) return(this.allowedValues.min()); var offset = Math.abs(this.allowedValues[0] - value); var newValue = this.allowedValues[0]; this.allowedValues.each( function(v) { var currentOffset = Math.abs(v - value); if(currentOffset <= offset){ newValue = v; offset = currentOffset; } }); return newValue; } if(value > this.range.end) return this.range.end; if(value < this.range.start) return this.range.start; return value; }, setValue: function(sliderValue, handleIdx){ if(!this.active) { this.activeHandleIdx = handleIdx || 0; this.activeHandle = this.handles[this.activeHandleIdx]; this.updateStyles(); } handleIdx = handleIdx || this.activeHandleIdx || 0; if(this.initialized && this.restricted) { if((handleIdx>0) && (sliderValuethis.values[handleIdx+1])) sliderValue = this.values[handleIdx+1]; } sliderValue = this.getNearestValue(sliderValue); this.values[handleIdx] = sliderValue; this.value = this.values[0]; // assure backwards compat this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = this.translateToPx(sliderValue); this.drawSpans(); if(!this.dragging || !this.event) this.updateFinished(); }, setValueBy: function(delta, handleIdx) { this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, handleIdx || this.activeHandleIdx || 0); }, translateToPx: function(value) { return Math.round( ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * (value - this.range.start)) + "px"; }, translateToValue: function(offset) { return ((offset/(this.trackLength-this.handleLength) * (this.range.end-this.range.start)) + this.range.start); }, getRange: function(range) { var v = this.values.sortBy(Prototype.K); range = range || 0; return $R(v[range],v[range+1]); }, minimumOffset: function(){ return(this.isVertical() ? this.alignY : this.alignX); }, maximumOffset: function(){ return(this.isVertical() ? (this.track.offsetHeight != 0 ? this.track.offsetHeight : this.track.style.height.replace(/px$/,"")) - this.alignY : (this.track.offsetWidth != 0 ? this.track.offsetWidth : this.track.style.width.replace(/px$/,"")) - this.alignY); }, isVertical: function(){ return (this.axis == 'vertical'); }, drawSpans: function() { var slider = this; if(this.spans) $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) }); if(this.options.startSpan) this.setSpan(this.options.startSpan, $R(0, this.values.length>1 ? this.getRange(0).min() : this.value )); if(this.options.endSpan) this.setSpan(this.options.endSpan, $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum)); }, setSpan: function(span, range) { if(this.isVertical()) { span.style.top = this.translateToPx(range.start); span.style.height = this.translateToPx(range.end - range.start + this.range.start); } else { span.style.left = this.translateToPx(range.start); span.style.width = this.translateToPx(range.end - range.start + this.range.start); } }, updateStyles: function() { this.handles.each( function(h){ Element.removeClassName(h, 'selected') }); Element.addClassName(this.activeHandle, 'selected'); }, startDrag: function(event) { if(Event.isLeftClick(event)) { if(!this.disabled){ this.active = true; var handle = Event.element(event); var pointer = [Event.pointerX(event), Event.pointerY(event)]; var track = handle; if(track==this.track) { var offsets = Position.cumulativeOffset(this.track); this.event = event; this.setValue(this.translateToValue( (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2) )); var offsets = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); } else { // find the handle (prevents issues with Safari) while((this.handles.indexOf(handle) == -1) && handle.parentNode) handle = handle.parentNode; if(this.handles.indexOf(handle)!=-1) { this.activeHandle = handle; this.activeHandleIdx = this.handles.indexOf(this.activeHandle); this.updateStyles(); var offsets = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); } } } Event.stop(event); } }, update: function(event) { if(this.active) { if(!this.dragging) this.dragging = true; this.draw(event); // fix AppleWebKit rendering if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); Event.stop(event); } }, draw: function(event) { var pointer = [Event.pointerX(event), Event.pointerY(event)]; var offsets = Position.cumulativeOffset(this.track); pointer[0] -= this.offsetX + offsets[0]; pointer[1] -= this.offsetY + offsets[1]; this.event = event; this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] )); if(this.initialized && this.options.onSlide) this.options.onSlide(this.values.length>1 ? this.values : this.value, this); }, endDrag: function(event) { if(this.active && this.dragging) { this.finishDrag(event, true); Event.stop(event); } this.active = false; this.dragging = false; }, finishDrag: function(event, success) { this.active = false; this.dragging = false; this.updateFinished(); }, updateFinished: function() { if(this.initialized && this.options.onChange) this.options.onChange(this.values.length>1 ? this.values : this.value, this); this.event = null; } }Jwordpress/wp-includes/js/scriptaculous/.svn/text-base/unittest.js.svn-baseNO// script.aculo.us unittest.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com) // (c) 2005, 2006 Michael Schuerig (http://www.schuerig.de/michael/) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ // experimental, Firefox-only Event.simulateMouse = function(element, eventName) { var options = Object.extend({ pointerX: 0, pointerY: 0, buttons: 0, ctrlKey: false, altKey: false, shiftKey: false, metaKey: false }, arguments[2] || {}); var oEvent = document.createEvent("MouseEvents"); oEvent.initMouseEvent(eventName, true, true, document.defaultView, options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element)); if(this.mark) Element.remove(this.mark); this.mark = document.createElement('div'); this.mark.appendChild(document.createTextNode(" ")); document.body.appendChild(this.mark); this.mark.style.position = 'absolute'; this.mark.style.top = options.pointerY + "px"; this.mark.style.left = options.pointerX + "px"; this.mark.style.width = "5px"; this.mark.style.height = "5px;"; this.mark.style.borderTop = "1px solid red;" this.mark.style.borderLeft = "1px solid red;" if(this.step) alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options)); $(element).dispatchEvent(oEvent); }; // Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2. // You need to downgrade to 1.0.4 for now to get this working // See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much Event.simulateKey = function(element, eventName) { var options = Object.extend({ ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, keyCode: 0, charCode: 0 }, arguments[2] || {}); var oEvent = document.createEvent("KeyEvents"); oEvent.initKeyEvent(eventName, true, true, window, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.keyCode, options.charCode ); $(element).dispatchEvent(oEvent); }; Event.simulateKeys = function(element, command) { for(var i=0; i' + 'StatusTestMessage' + '' + ''; this.logsummary = $('logsummary') this.loglines = $('loglines'); }, _toHTML: function(txt) { return txt.escapeHTML().replace(/\n/g,"
    "); }, addLinksToResults: function(){ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log td.title = "Run only this test" Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;}); }); $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log td.title = "Run all tests" Event.observe(td, 'click', function(){ window.location.search = "";}); }); } } Test.Unit.Runner = Class.create(); Test.Unit.Runner.prototype = { initialize: function(testcases) { this.options = Object.extend({ testLog: 'testlog' }, arguments[1] || {}); this.options.resultsURL = this.parseResultsURLQueryParameter(); this.options.tests = this.parseTestsQueryParameter(); if (this.options.testLog) { this.options.testLog = $(this.options.testLog) || null; } if(this.options.tests) { this.tests = []; for(var i = 0; i < this.options.tests.length; i++) { if(/^test/.test(this.options.tests[i])) { this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"])); } } } else { if (this.options.test) { this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])]; } else { this.tests = []; for(var testcase in testcases) { if(/^test/.test(testcase)) { this.tests.push( new Test.Unit.Testcase( this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, testcases[testcase], testcases["setup"], testcases["teardown"] )); } } } } this.currentTest = 0; this.logger = new Test.Unit.Logger(this.options.testLog); setTimeout(this.runTests.bind(this), 1000); }, parseResultsURLQueryParameter: function() { return window.location.search.parseQuery()["resultsURL"]; }, parseTestsQueryParameter: function(){ if (window.location.search.parseQuery()["tests"]){ return window.location.search.parseQuery()["tests"].split(','); }; }, // Returns: // "ERROR" if there was an error, // "FAILURE" if there was a failure, or // "SUCCESS" if there was neither getResult: function() { var hasFailure = false; for(var i=0;i 0) { return "ERROR"; } if (this.tests[i].failures > 0) { hasFailure = true; } } if (hasFailure) { return "FAILURE"; } else { return "SUCCESS"; } }, postResults: function() { if (this.options.resultsURL) { new Ajax.Request(this.options.resultsURL, { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false }); } }, runTests: function() { var test = this.tests[this.currentTest]; if (!test) { // finished! this.postResults(); this.logger.summary(this.summary()); return; } if(!test.isWaiting) { this.logger.start(test.name); } test.run(); if(test.isWaiting) { this.logger.message("Waiting for " + test.timeToWait + "ms"); setTimeout(this.runTests.bind(this), test.timeToWait || 1000); } else { this.logger.finish(test.status(), test.summary()); this.currentTest++; // tail recursive, hopefully the browser will skip the stackframe this.runTests(); } }, summary: function() { var assertions = 0; var failures = 0; var errors = 0; var messages = []; for(var i=0;i 0) return 'failed'; if (this.errors > 0) return 'error'; return 'passed'; }, assert: function(expression) { var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"'; try { expression ? this.pass() : this.fail(message); } catch(e) { this.error(e); } }, assertEqual: function(expected, actual) { var message = arguments[2] || "assertEqual"; try { (expected == actual) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertInspect: function(expected, actual) { var message = arguments[2] || "assertInspect"; try { (expected == actual.inspect()) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertEnumEqual: function(expected, actual) { var message = arguments[2] || "assertEnumEqual"; try { $A(expected).length == $A(actual).length && expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ? this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + ', actual ' + Test.Unit.inspect(actual)); } catch(e) { this.error(e); } }, assertNotEqual: function(expected, actual) { var message = arguments[2] || "assertNotEqual"; try { (expected != actual) ? this.pass() : this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertIdentical: function(expected, actual) { var message = arguments[2] || "assertIdentical"; try { (expected === actual) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertNotIdentical: function(expected, actual) { var message = arguments[2] || "assertNotIdentical"; try { !(expected === actual) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertNull: function(obj) { var message = arguments[1] || 'assertNull' try { (obj==null) ? this.pass() : this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); } catch(e) { this.error(e); } }, assertMatch: function(expected, actual) { var message = arguments[2] || 'assertMatch'; var regex = new RegExp(expected); try { (regex.exec(actual)) ? this.pass() : this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertHidden: function(element) { var message = arguments[1] || 'assertHidden'; this.assertEqual("none", element.style.display, message); }, assertNotNull: function(object) { var message = arguments[1] || 'assertNotNull'; this.assert(object != null, message); }, assertType: function(expected, actual) { var message = arguments[2] || 'assertType'; try { (actual.constructor == expected) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + (actual.constructor) + '"'); } catch(e) { this.error(e); } }, assertNotOfType: function(expected, actual) { var message = arguments[2] || 'assertNotOfType'; try { (actual.constructor != expected) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + (actual.constructor) + '"'); } catch(e) { this.error(e); } }, assertInstanceOf: function(expected, actual) { var message = arguments[2] || 'assertInstanceOf'; try { (actual instanceof expected) ? this.pass() : this.fail(message + ": object was not an instance of the expected type"); } catch(e) { this.error(e); } }, assertNotInstanceOf: function(expected, actual) { var message = arguments[2] || 'assertNotInstanceOf'; try { !(actual instanceof expected) ? this.pass() : this.fail(message + ": object was an instance of the not expected type"); } catch(e) { this.error(e); } }, assertRespondsTo: function(method, obj) { var message = arguments[2] || 'assertRespondsTo'; try { (obj[method] && typeof obj[method] == 'function') ? this.pass() : this.fail(message + ": object doesn't respond to [" + method + "]"); } catch(e) { this.error(e); } }, assertReturnsTrue: function(method, obj) { var message = arguments[2] || 'assertReturnsTrue'; try { var m = obj[method]; if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)]; m() ? this.pass() : this.fail(message + ": method returned false"); } catch(e) { this.error(e); } }, assertReturnsFalse: function(method, obj) { var message = arguments[2] || 'assertReturnsFalse'; try { var m = obj[method]; if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)]; !m() ? this.pass() : this.fail(message + ": method returned true"); } catch(e) { this.error(e); } }, assertRaise: function(exceptionName, method) { var message = arguments[2] || 'assertRaise'; try { method(); this.fail(message + ": exception expected but none was raised"); } catch(e) { ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); } }, assertElementsMatch: function() { var expressions = $A(arguments), elements = $A(expressions.shift()); if (elements.length != expressions.length) { this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions'); return false; } elements.zip(expressions).all(function(pair, index) { var element = $(pair.first()), expression = pair.last(); if (element.match(expression)) return true; this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect()); }.bind(this)) && this.pass(); }, assertElementMatches: function(element, expression) { this.assertElementsMatch([element], expression); }, benchmark: function(operation, iterations) { var startAt = new Date(); (iterations || 1).times(operation); var timeTaken = ((new Date())-startAt); this.info((arguments[2] || 'Operation') + ' finished ' + iterations + ' iterations in ' + (timeTaken/1000)+'s' ); return timeTaken; }, _isVisible: function(element) { element = $(element); if(!element.parentNode) return true; this.assertNotNull(element); if(element.style && Element.getStyle(element, 'display') == 'none') return false; return this._isVisible(element.parentNode); }, assertNotVisible: function(element) { this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1])); }, assertVisible: function(element) { this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1])); }, benchmark: function(operation, iterations) { var startAt = new Date(); (iterations || 1).times(operation); var timeTaken = ((new Date())-startAt); this.info((arguments[2] || 'Operation') + ' finished ' + iterations + ' iterations in ' + (timeTaken/1000)+'s' ); return timeTaken; } } Test.Unit.Testcase = Class.create(); Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), { initialize: function(name, test, setup, teardown) { Test.Unit.Assertions.prototype.initialize.bind(this)(); this.name = name; if(typeof test == 'string') { test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,'); test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)'); this.test = function() { eval('with(this){'+test+'}'); } } else { this.test = test || function() {}; } this.setup = setup || function() {}; this.teardown = teardown || function() {}; this.isWaiting = false; this.timeToWait = 1000; }, wait: function(time, nextPart) { this.isWaiting = true; this.test = nextPart; this.timeToWait = time; }, run: function() { try { try { if (!this.isWaiting) this.setup.bind(this)(); this.isWaiting = false; this.test.bind(this)(); } finally { if(!this.isWaiting) { this.teardown.bind(this)(); } } } catch(e) { this.error(e); } } }); // *EXPERIMENTAL* BDD-style testing to please non-technical folk // This draws many ideas from RSpec http://rspec.rubyforge.org/ Test.setupBDDExtensionMethods = function(){ var METHODMAP = { shouldEqual: 'assertEqual', shouldNotEqual: 'assertNotEqual', shouldEqualEnum: 'assertEnumEqual', shouldBeA: 'assertType', shouldNotBeA: 'assertNotOfType', shouldBeAn: 'assertType', shouldNotBeAn: 'assertNotOfType', shouldBeNull: 'assertNull', shouldNotBeNull: 'assertNotNull', shouldBe: 'assertReturnsTrue', shouldNotBe: 'assertReturnsFalse', shouldRespondTo: 'assertRespondsTo' }; Test.BDDMethods = {}; for(m in METHODMAP) { Test.BDDMethods[m] = eval( 'function(){'+ 'var args = $A(arguments);'+ 'var scope = args.shift();'+ 'scope.'+METHODMAP[m]+'.apply(scope,(args || []).concat([this])); }'); } [Array.prototype, String.prototype, Number.prototype].each( function(p){ Object.extend(p, Test.BDDMethods) } ); } Test.context = function(name, spec, log){ Test.setupBDDExtensionMethods(); var compiledSpec = {}; var titles = {}; for(specName in spec) { switch(specName){ case "setup": case "teardown": compiledSpec[specName] = spec[specName]; break; default: var testName = 'test'+specName.gsub(/\s+/,'-').camelize(); var body = spec[specName].toString().split('\n').slice(1); if(/^\{/.test(body[0])) body = body.slice(1); body.pop(); body = body.map(function(statement){ return statement.strip() }); compiledSpec[testName] = body.join('\n'); titles[testName] = specName; } } new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name }); };Rwordpress/wp-includes/js/scriptaculous/.svn/text-base/wp-scriptaculous.js.svn-base// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. var Scriptaculous = { Version: '1.7.0', require: function(libraryName) { // inserting via DOM fails in Safari 2.0, so brute force approach document.write(''); }, load: function() { if((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined') || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5) throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); var includes = s.src.match(/\?.*load=([a-z,]*)/); if ( includes ) includes[1].split(',').each( function(include) { Scriptaculous.require(path+include+'.js') }); }); } } Scriptaculous.load(); 2wordpress/wp-includes/js/scriptaculous/unittest.jsNO// script.aculo.us unittest.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com) // (c) 2005, 2006 Michael Schuerig (http://www.schuerig.de/michael/) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ // experimental, Firefox-only Event.simulateMouse = function(element, eventName) { var options = Object.extend({ pointerX: 0, pointerY: 0, buttons: 0, ctrlKey: false, altKey: false, shiftKey: false, metaKey: false }, arguments[2] || {}); var oEvent = document.createEvent("MouseEvents"); oEvent.initMouseEvent(eventName, true, true, document.defaultView, options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element)); if(this.mark) Element.remove(this.mark); this.mark = document.createElement('div'); this.mark.appendChild(document.createTextNode(" ")); document.body.appendChild(this.mark); this.mark.style.position = 'absolute'; this.mark.style.top = options.pointerY + "px"; this.mark.style.left = options.pointerX + "px"; this.mark.style.width = "5px"; this.mark.style.height = "5px;"; this.mark.style.borderTop = "1px solid red;" this.mark.style.borderLeft = "1px solid red;" if(this.step) alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options)); $(element).dispatchEvent(oEvent); }; // Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2. // You need to downgrade to 1.0.4 for now to get this working // See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much Event.simulateKey = function(element, eventName) { var options = Object.extend({ ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, keyCode: 0, charCode: 0 }, arguments[2] || {}); var oEvent = document.createEvent("KeyEvents"); oEvent.initKeyEvent(eventName, true, true, window, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.keyCode, options.charCode ); $(element).dispatchEvent(oEvent); }; Event.simulateKeys = function(element, command) { for(var i=0; i' + 'StatusTestMessage' + '' + ''; this.logsummary = $('logsummary') this.loglines = $('loglines'); }, _toHTML: function(txt) { return txt.escapeHTML().replace(/\n/g,"
    "); }, addLinksToResults: function(){ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log td.title = "Run only this test" Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;}); }); $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log td.title = "Run all tests" Event.observe(td, 'click', function(){ window.location.search = "";}); }); } } Test.Unit.Runner = Class.create(); Test.Unit.Runner.prototype = { initialize: function(testcases) { this.options = Object.extend({ testLog: 'testlog' }, arguments[1] || {}); this.options.resultsURL = this.parseResultsURLQueryParameter(); this.options.tests = this.parseTestsQueryParameter(); if (this.options.testLog) { this.options.testLog = $(this.options.testLog) || null; } if(this.options.tests) { this.tests = []; for(var i = 0; i < this.options.tests.length; i++) { if(/^test/.test(this.options.tests[i])) { this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"])); } } } else { if (this.options.test) { this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])]; } else { this.tests = []; for(var testcase in testcases) { if(/^test/.test(testcase)) { this.tests.push( new Test.Unit.Testcase( this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, testcases[testcase], testcases["setup"], testcases["teardown"] )); } } } } this.currentTest = 0; this.logger = new Test.Unit.Logger(this.options.testLog); setTimeout(this.runTests.bind(this), 1000); }, parseResultsURLQueryParameter: function() { return window.location.search.parseQuery()["resultsURL"]; }, parseTestsQueryParameter: function(){ if (window.location.search.parseQuery()["tests"]){ return window.location.search.parseQuery()["tests"].split(','); }; }, // Returns: // "ERROR" if there was an error, // "FAILURE" if there was a failure, or // "SUCCESS" if there was neither getResult: function() { var hasFailure = false; for(var i=0;i 0) { return "ERROR"; } if (this.tests[i].failures > 0) { hasFailure = true; } } if (hasFailure) { return "FAILURE"; } else { return "SUCCESS"; } }, postResults: function() { if (this.options.resultsURL) { new Ajax.Request(this.options.resultsURL, { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false }); } }, runTests: function() { var test = this.tests[this.currentTest]; if (!test) { // finished! this.postResults(); this.logger.summary(this.summary()); return; } if(!test.isWaiting) { this.logger.start(test.name); } test.run(); if(test.isWaiting) { this.logger.message("Waiting for " + test.timeToWait + "ms"); setTimeout(this.runTests.bind(this), test.timeToWait || 1000); } else { this.logger.finish(test.status(), test.summary()); this.currentTest++; // tail recursive, hopefully the browser will skip the stackframe this.runTests(); } }, summary: function() { var assertions = 0; var failures = 0; var errors = 0; var messages = []; for(var i=0;i 0) return 'failed'; if (this.errors > 0) return 'error'; return 'passed'; }, assert: function(expression) { var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"'; try { expression ? this.pass() : this.fail(message); } catch(e) { this.error(e); } }, assertEqual: function(expected, actual) { var message = arguments[2] || "assertEqual"; try { (expected == actual) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertInspect: function(expected, actual) { var message = arguments[2] || "assertInspect"; try { (expected == actual.inspect()) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertEnumEqual: function(expected, actual) { var message = arguments[2] || "assertEnumEqual"; try { $A(expected).length == $A(actual).length && expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ? this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + ', actual ' + Test.Unit.inspect(actual)); } catch(e) { this.error(e); } }, assertNotEqual: function(expected, actual) { var message = arguments[2] || "assertNotEqual"; try { (expected != actual) ? this.pass() : this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertIdentical: function(expected, actual) { var message = arguments[2] || "assertIdentical"; try { (expected === actual) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertNotIdentical: function(expected, actual) { var message = arguments[2] || "assertNotIdentical"; try { !(expected === actual) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertNull: function(obj) { var message = arguments[1] || 'assertNull' try { (obj==null) ? this.pass() : this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); } catch(e) { this.error(e); } }, assertMatch: function(expected, actual) { var message = arguments[2] || 'assertMatch'; var regex = new RegExp(expected); try { (regex.exec(actual)) ? this.pass() : this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); } catch(e) { this.error(e); } }, assertHidden: function(element) { var message = arguments[1] || 'assertHidden'; this.assertEqual("none", element.style.display, message); }, assertNotNull: function(object) { var message = arguments[1] || 'assertNotNull'; this.assert(object != null, message); }, assertType: function(expected, actual) { var message = arguments[2] || 'assertType'; try { (actual.constructor == expected) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + (actual.constructor) + '"'); } catch(e) { this.error(e); } }, assertNotOfType: function(expected, actual) { var message = arguments[2] || 'assertNotOfType'; try { (actual.constructor != expected) ? this.pass() : this.fail(message + ': expected "' + Test.Unit.inspect(expected) + '", actual "' + (actual.constructor) + '"'); } catch(e) { this.error(e); } }, assertInstanceOf: function(expected, actual) { var message = arguments[2] || 'assertInstanceOf'; try { (actual instanceof expected) ? this.pass() : this.fail(message + ": object was not an instance of the expected type"); } catch(e) { this.error(e); } }, assertNotInstanceOf: function(expected, actual) { var message = arguments[2] || 'assertNotInstanceOf'; try { !(actual instanceof expected) ? this.pass() : this.fail(message + ": object was an instance of the not expected type"); } catch(e) { this.error(e); } }, assertRespondsTo: function(method, obj) { var message = arguments[2] || 'assertRespondsTo'; try { (obj[method] && typeof obj[method] == 'function') ? this.pass() : this.fail(message + ": object doesn't respond to [" + method + "]"); } catch(e) { this.error(e); } }, assertReturnsTrue: function(method, obj) { var message = arguments[2] || 'assertReturnsTrue'; try { var m = obj[method]; if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)]; m() ? this.pass() : this.fail(message + ": method returned false"); } catch(e) { this.error(e); } }, assertReturnsFalse: function(method, obj) { var message = arguments[2] || 'assertReturnsFalse'; try { var m = obj[method]; if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)]; !m() ? this.pass() : this.fail(message + ": method returned true"); } catch(e) { this.error(e); } }, assertRaise: function(exceptionName, method) { var message = arguments[2] || 'assertRaise'; try { method(); this.fail(message + ": exception expected but none was raised"); } catch(e) { ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); } }, assertElementsMatch: function() { var expressions = $A(arguments), elements = $A(expressions.shift()); if (elements.length != expressions.length) { this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions'); return false; } elements.zip(expressions).all(function(pair, index) { var element = $(pair.first()), expression = pair.last(); if (element.match(expression)) return true; this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect()); }.bind(this)) && this.pass(); }, assertElementMatches: function(element, expression) { this.assertElementsMatch([element], expression); }, benchmark: function(operation, iterations) { var startAt = new Date(); (iterations || 1).times(operation); var timeTaken = ((new Date())-startAt); this.info((arguments[2] || 'Operation') + ' finished ' + iterations + ' iterations in ' + (timeTaken/1000)+'s' ); return timeTaken; }, _isVisible: function(element) { element = $(element); if(!element.parentNode) return true; this.assertNotNull(element); if(element.style && Element.getStyle(element, 'display') == 'none') return false; return this._isVisible(element.parentNode); }, assertNotVisible: function(element) { this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1])); }, assertVisible: function(element) { this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1])); }, benchmark: function(operation, iterations) { var startAt = new Date(); (iterations || 1).times(operation); var timeTaken = ((new Date())-startAt); this.info((arguments[2] || 'Operation') + ' finished ' + iterations + ' iterations in ' + (timeTaken/1000)+'s' ); return timeTaken; } } Test.Unit.Testcase = Class.create(); Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), { initialize: function(name, test, setup, teardown) { Test.Unit.Assertions.prototype.initialize.bind(this)(); this.name = name; if(typeof test == 'string') { test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,'); test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)'); this.test = function() { eval('with(this){'+test+'}'); } } else { this.test = test || function() {}; } this.setup = setup || function() {}; this.teardown = teardown || function() {}; this.isWaiting = false; this.timeToWait = 1000; }, wait: function(time, nextPart) { this.isWaiting = true; this.test = nextPart; this.timeToWait = time; }, run: function() { try { try { if (!this.isWaiting) this.setup.bind(this)(); this.isWaiting = false; this.test.bind(this)(); } finally { if(!this.isWaiting) { this.teardown.bind(this)(); } } } catch(e) { this.error(e); } } }); // *EXPERIMENTAL* BDD-style testing to please non-technical folk // This draws many ideas from RSpec http://rspec.rubyforge.org/ Test.setupBDDExtensionMethods = function(){ var METHODMAP = { shouldEqual: 'assertEqual', shouldNotEqual: 'assertNotEqual', shouldEqualEnum: 'assertEnumEqual', shouldBeA: 'assertType', shouldNotBeA: 'assertNotOfType', shouldBeAn: 'assertType', shouldNotBeAn: 'assertNotOfType', shouldBeNull: 'assertNull', shouldNotBeNull: 'assertNotNull', shouldBe: 'assertReturnsTrue', shouldNotBe: 'assertReturnsFalse', shouldRespondTo: 'assertRespondsTo' }; Test.BDDMethods = {}; for(m in METHODMAP) { Test.BDDMethods[m] = eval( 'function(){'+ 'var args = $A(arguments);'+ 'var scope = args.shift();'+ 'scope.'+METHODMAP[m]+'.apply(scope,(args || []).concat([this])); }'); } [Array.prototype, String.prototype, Number.prototype].each( function(p){ Object.extend(p, Test.BDDMethods) } ); } Test.context = function(name, spec, log){ Test.setupBDDExtensionMethods(); var compiledSpec = {}; var titles = {}; for(specName in spec) { switch(specName){ case "setup": case "teardown": compiledSpec[specName] = spec[specName]; break; default: var testName = 'test'+specName.gsub(/\s+/,'-').camelize(); var body = spec[specName].toString().split('\n').slice(1); if(/^\{/.test(body[0])) body = body.slice(1); body.pop(); body = body.map(function(statement){ return statement.strip() }); compiledSpec[testName] = body.join('\n'); titles[testName] = specName; } } new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name }); };:wordpress/wp-includes/js/scriptaculous/wp-scriptaculous.js// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. var Scriptaculous = { Version: '1.7.0', require: function(libraryName) { // inserting via DOM fails in Safari 2.0, so brute force approach document.write(''); }, load: function() { if((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined') || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5) throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0"); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); var includes = s.src.match(/\?.*load=([a-z,]*)/); if ( includes ) includes[1].split(',').each( function(include) { Scriptaculous.require(path+include+'.js') }); }); } } Scriptaculous.load(); %wordpress/wp-includes/js/.svn/entriesd8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 jquery dir scriptaculous dir prototype.js file 2008-11-20T16:30:33.000000Z ed2d6608b0832c5e990e10729157b485 2008-10-28T18:17:06.112729Z 97 paul autosave.js file 2008-11-20T16:30:33.000000Z 6e0efaa35b424792e180c3c619b9823f 2008-10-28T18:17:06.112729Z 97 paul wp-ajax.js file 2008-11-20T16:30:33.000000Z c65fa296a21bab7aaac66f145ac45155 2008-10-28T18:17:06.112729Z 97 paul crop dir list-manipulation.js file 2008-11-20T16:30:33.000000Z 4e420736ce40b9b74fa4c33a542a1554 2008-10-28T18:17:06.112729Z 97 paul tw-sack.js file 2008-11-20T16:30:33.000000Z b989a5bd84f6ebcbc1393ec003e6e991 2008-10-28T18:17:06.112729Z 97 paul fat.js file 2008-11-20T16:30:33.000000Z c6f7565dd1534de02ff7abc431afb042 2008-10-28T18:17:06.112729Z 97 paul quicktags.js file 2008-11-20T16:30:33.000000Z 05f72f5183487b3d93ffdea33f521cff 2008-10-28T18:17:06.112729Z 97 paul colorpicker.js file 2008-11-20T16:30:33.000000Z b21badaea40428ee61a1cddc35b28fdc 2008-10-28T18:17:06.112729Z 97 paul tinymce dir dbx.js file 2008-11-20T16:30:33.000000Z 33c7eab1039d3730275aa1006a4dbfaa 2008-10-28T18:17:06.112729Z 97 paul $wordpress/wp-includes/js/.svn/format8 12) ? now.getHours() -12 : now.getHours()) + ((now.getMinutes() < 10) ? ":0" : ":") + now.getMinutes() + ((now.getSeconds() < 10) ? ":0" : ":") + now.getSeconds(); } function autosave_update_nonce() { var response = nonceAjax.response; document.getElementsByName('_wpnonce')[0].value = response; } function autosave_update_post_ID() { var response = autosaveAjax.response; var res = parseInt(response); var message; if(isNaN(res)) { message = autosaveL10n.errorText.replace(/%response%/g, response); } else { message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time()); $('post_ID').name = "post_ID"; $('post_ID').value = res; // We need new nonces nonceAjax = new sack(); nonceAjax.element = null; nonceAjax.setVar("action", "autosave-generate-nonces"); nonceAjax.setVar("post_ID", res); nonceAjax.setVar("cookie", document.cookie); nonceAjax.setVar("post_type", $('post_type').value); nonceAjax.requestFile = autosaveL10n.requestFile; nonceAjax.onCompletion = autosave_update_nonce; nonceAjax.method = "POST"; nonceAjax.runAJAX(); $('hiddenaction').value = 'editpost'; } $('autosave').innerHTML = message; autosave_enable_buttons(); } function autosave_loading() { $('autosave').innerHTML = autosaveL10n.savingText; } function autosave_saved() { var response = autosaveAjax.response; var res = parseInt(response); var message; if(isNaN(res)) { message = autosaveL10n.errorText.replace(/%response%/g, response); } else { message = autosaveL10n.saveText.replace(/%time%/g, autosave_cur_time()); } $('autosave').innerHTML = message; autosave_enable_buttons(); } function autosave_disable_buttons() { var form = $('post'); form.save ? form.save.disabled = 'disabled' : null; form.submit ? form.submit.disabled = 'disabled' : null; form.publish ? form.publish.disabled = 'disabled' : null; form.deletepost ? form.deletepost.disabled = 'disabled' : null; setTimeout('autosave_enable_buttons();', 1000); // Re-enable 1 sec later. Just gives autosave a head start to avoid collisions. } function autosave_enable_buttons() { var form = $('post'); form.save ? form.save.disabled = '' : null; form.submit ? form.submit.disabled = '' : null; form.publish ? form.publish.disabled = '' : null; form.deletepost ? form.deletepost.disabled = '' : null; } function autosave() { var form = $('post'); var rich = ((typeof tinyMCE != "undefined") && tinyMCE.getInstanceById('content')) ? true : false; autosaveAjax = new sack(); /* Gotta do this up here so we can check the length when tinyMCE is in use */ if ( typeof tinyMCE == "undefined" || tinyMCE.configs.length < 1 || rich == false ) { autosaveAjax.setVar("content", form.content.value); } else { // Don't run while the TinyMCE spellcheck is on. if(tinyMCE.selectedInstance.spellcheckerOn) return; tinyMCE.wpTriggerSave(); autosaveAjax.setVar("content", form.content.value); } if(form.post_title.value.length==0 || form.content.value.length==0 || form.post_title.value+form.content.value == autosaveLast) return; autosave_disable_buttons(); autosaveLast = form.post_title.value+form.content.value; cats = document.getElementsByName("post_category[]"); goodcats = ([]); for(i=0;i // WWW: http://www.mattkruse.com/ // // NOTICE: You may use this code for any purpose, commercial or // private, without any further permission from the author. You may // remove this notice from your final code if you wish, however it is // appreciated by the author if at least my web site address is kept. // // You may *NOT* re-distribute this code in any way except through its // use. That means, you can include it in your product, or your web // site, or any other form where the code is actually being used. You // may not put the plain javascript up on your site for download or // include it in your javascript libraries for download. // If you wish to share this code with others, please just point them // to the URL instead. // Please DO NOT link directly to my .js files from your site. Copy // the files to your server and use them there. Thank you. // =================================================================== /* SOURCE FILE: AnchorPosition.js */ /* AnchorPosition.js Author: Matt Kruse Last modified: 10/11/02 DESCRIPTION: These functions find the position of an
    tag in a document, so other elements can be positioned relative to it. COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small positioning errors - usually with Window positioning - occur on the Macintosh platform. FUNCTIONS: getAnchorPosition(anchorname) Returns an Object() having .x and .y properties of the pixel coordinates of the upper-left corner of the anchor. Position is relative to the PAGE. getAnchorWindowPosition(anchorname) Returns an Object() having .x and .y properties of the pixel coordinates of the upper-left corner of the anchor, relative to the WHOLE SCREEN. NOTES: 1) For popping up separate browser windows, use getAnchorWindowPosition. Otherwise, use getAnchorPosition 2) Your anchor tag MUST contain both NAME and ID attributes which are the same. For example: 3) There must be at least a space between for IE5.5 to see the anchor tag correctly. Do not do with no space. */ // getAnchorPosition(anchorname) // This function returns an object having .x and .y properties which are the coordinates // of the named anchor, relative to the page. function getAnchorPosition(anchorname) { // This function will return an Object with x and y properties var useWindow=false; var coordinates=new Object(); var x=0,y=0; // Browser capability sniffing var use_gebi=false, use_css=false, use_layers=false; if (document.getElementById) { use_gebi=true; } else if (document.all) { use_css=true; } else if (document.layers) { use_layers=true; } // Logic to find position if (use_gebi && document.all) { x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]); y=AnchorPosition_getPageOffsetTop(document.all[anchorname]); } else if (use_gebi) { var o=document.getElementById(anchorname); x=AnchorPosition_getPageOffsetLeft(o); y=AnchorPosition_getPageOffsetTop(o); } else if (use_css) { x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]); y=AnchorPosition_getPageOffsetTop(document.all[anchorname]); } else if (use_layers) { var found=0; for (var i=0; i tags may cause errors. USAGE: // Create an object for a WINDOW popup var win = new PopupWindow(); // Create an object for a DIV window using the DIV named 'mydiv' var win = new PopupWindow('mydiv'); // Set the window to automatically hide itself when the user clicks // anywhere else on the page except the popup win.autoHide(); // Show the window relative to the anchor name passed in win.showPopup(anchorname); // Hide the popup win.hidePopup(); // Set the size of the popup window (only applies to WINDOW popups win.setSize(width,height); // Populate the contents of the popup window that will be shown. If you // change the contents while it is displayed, you will need to refresh() win.populate(string); // set the URL of the window, rather than populating its contents // manually win.setUrl("http://www.site.com/"); // Refresh the contents of the popup win.refresh(); // Specify how many pixels to the right of the anchor the popup will appear win.offsetX = 50; // Specify how many pixels below the anchor the popup will appear win.offsetY = 100; NOTES: 1) Requires the functions in AnchorPosition.js 2) Your anchor tag MUST contain both NAME and ID attributes which are the same. For example: 3) There must be at least a space between for IE5.5 to see the anchor tag correctly. Do not do with no space. 4) When a PopupWindow object is created, a handler for 'onmouseup' is attached to any event handler you may have already defined. Do NOT define an event handler for 'onmouseup' after you define a PopupWindow object or the autoHide() will not work correctly. */ // Set the position of the popup window based on the anchor function PopupWindow_getXYPosition(anchorname) { var coordinates; if (this.type == "WINDOW") { coordinates = getAnchorWindowPosition(anchorname); } else { coordinates = getAnchorPosition(anchorname); } this.x = coordinates.x; this.y = coordinates.y; } // Set width/height of DIV/popup window function PopupWindow_setSize(width,height) { this.width = width; this.height = height; } // Fill the window with contents function PopupWindow_populate(contents) { this.contents = contents; this.populated = false; } // Set the URL to go to function PopupWindow_setUrl(url) { this.url = url; } // Set the window popup properties function PopupWindow_setWindowProperties(props) { this.windowProperties = props; } // Refresh the displayed contents of the popup function PopupWindow_refresh() { if (this.divName != null) { // refresh the DIV object if (this.use_gebi) { document.getElementById(this.divName).innerHTML = this.contents; } else if (this.use_css) { document.all[this.divName].innerHTML = this.contents; } else if (this.use_layers) { var d = document.layers[this.divName]; d.document.open(); d.document.writeln(this.contents); d.document.close(); } } else { if (this.popupWindow != null && !this.popupWindow.closed) { if (this.url!="") { this.popupWindow.location.href=this.url; } else { this.popupWindow.document.open(); this.popupWindow.document.writeln(this.contents); this.popupWindow.document.close(); } this.popupWindow.focus(); } } } // Position and show the popup, relative to an anchor object function PopupWindow_showPopup(anchorname) { this.getXYPosition(anchorname); this.x += this.offsetX; this.y += this.offsetY; if (!this.populated && (this.contents != "")) { this.populated = true; this.refresh(); } if (this.divName != null) { // Show the DIV object if (this.use_gebi) { document.getElementById(this.divName).style.left = this.x + "px"; document.getElementById(this.divName).style.top = this.y; document.getElementById(this.divName).style.visibility = "visible"; } else if (this.use_css) { document.all[this.divName].style.left = this.x; document.all[this.divName].style.top = this.y; document.all[this.divName].style.visibility = "visible"; } else if (this.use_layers) { document.layers[this.divName].left = this.x; document.layers[this.divName].top = this.y; document.layers[this.divName].visibility = "visible"; } } else { if (this.popupWindow == null || this.popupWindow.closed) { // If the popup window will go off-screen, move it so it doesn't if (this.x<0) { this.x=0; } if (this.y<0) { this.y=0; } if (screen && screen.availHeight) { if ((this.y + this.height) > screen.availHeight) { this.y = screen.availHeight - this.height; } } if (screen && screen.availWidth) { if ((this.x + this.width) > screen.availWidth) { this.x = screen.availWidth - this.width; } } var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ); this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+""); } this.refresh(); } } // Hide the popup function PopupWindow_hidePopup() { if (this.divName != null) { if (this.use_gebi) { document.getElementById(this.divName).style.visibility = "hidden"; } else if (this.use_css) { document.all[this.divName].style.visibility = "hidden"; } else if (this.use_layers) { document.layers[this.divName].visibility = "hidden"; } } else { if (this.popupWindow && !this.popupWindow.closed) { this.popupWindow.close(); this.popupWindow = null; } } } // Pass an event and return whether or not it was the popup DIV that was clicked function PopupWindow_isClicked(e) { if (this.divName != null) { if (this.use_layers) { var clickX = e.pageX; var clickY = e.pageY; var t = document.layers[this.divName]; if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) { return true; } else { return false; } } else if (document.all) { // Need to hard-code this to trap IE for error-handling var t = window.event.srcElement; while (t.parentElement != null) { if (t.id==this.divName) { return true; } t = t.parentElement; } return false; } else if (this.use_gebi && e) { var t = e.originalTarget; while (t.parentNode != null) { if (t.id==this.divName) { return true; } t = t.parentNode; } return false; } return false; } return false; } // Check an onMouseDown event to see if we should hide function PopupWindow_hideIfNotClicked(e) { if (this.autoHideEnabled && !this.isClicked(e)) { this.hidePopup(); } } // Call this to make the DIV disable automatically when mouse is clicked outside it function PopupWindow_autoHide() { this.autoHideEnabled = true; } // This global function checks all PopupWindow objects onmouseup to see if they should be hidden function PopupWindow_hidePopupWindows(e) { for (var i=0; i0) { this.type="DIV"; this.divName = arguments[0]; } else { this.type="WINDOW"; } this.use_gebi = false; this.use_css = false; this.use_layers = false; if (document.getElementById) { this.use_gebi = true; } else if (document.all) { this.use_css = true; } else if (document.layers) { this.use_layers = true; } else { this.type = "WINDOW"; } this.offsetX = 0; this.offsetY = 0; // Method mappings this.getXYPosition = PopupWindow_getXYPosition; this.populate = PopupWindow_populate; this.setUrl = PopupWindow_setUrl; this.setWindowProperties = PopupWindow_setWindowProperties; this.refresh = PopupWindow_refresh; this.showPopup = PopupWindow_showPopup; this.hidePopup = PopupWindow_hidePopup; this.setSize = PopupWindow_setSize; this.isClicked = PopupWindow_isClicked; this.autoHide = PopupWindow_autoHide; this.hideIfNotClicked = PopupWindow_hideIfNotClicked; } /* SOURCE FILE: ColorPicker2.js */ /* Last modified: 02/24/2003 DESCRIPTION: This widget is used to select a color, in hexadecimal #RRGGBB form. It uses a color "swatch" to display the standard 216-color web-safe palette. The user can then click on a color to select it. COMPATABILITY: See notes in AnchorPosition.js and PopupWindow.js. Only the latest DHTML-capable browsers will show the color and hex values at the bottom as your mouse goes over them. USAGE: // Create a new ColorPicker object using DHTML popup var cp = new ColorPicker(); // Create a new ColorPicker object using Window Popup var cp = new ColorPicker('window'); // Add a link in your page to trigger the popup. For example: Pick // Or use the built-in "select" function to do the dirty work for you: Pick // If using DHTML popup, write out the required DIV tag near the bottom // of your page. // Write the 'pickColor' function that will be called when the user clicks // a color and do something with the value. This is only required if you // want to do something other than simply populate a form field, which is // what the 'select' function will give you. function pickColor(color) { field.value = color; } NOTES: 1) Requires the functions in AnchorPosition.js and PopupWindow.js 2) Your anchor tag MUST contain both NAME and ID attributes which are the same. For example: 3) There must be at least a space between for IE5.5 to see the anchor tag correctly. Do not do with no space. 4) When a ColorPicker object is created, a handler for 'onmouseup' is attached to any event handler you may have already defined. Do NOT define an event handler for 'onmouseup' after you define a ColorPicker object or the color picker will not hide itself correctly. */ ColorPicker_targetInput = null; function ColorPicker_writeDiv() { document.writeln(""); } function ColorPicker_show(anchorname) { this.showPopup(anchorname); } function ColorPicker_pickColor(color,obj) { obj.hidePopup(); pickColor(color); } // A Default "pickColor" function to accept the color passed back from popup. // User can over-ride this with their own function. function pickColor(color) { if (ColorPicker_targetInput==null) { alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!"); return; } ColorPicker_targetInput.value = color; } // This function is the easiest way to popup the window, select a color, and // have the value populate a form field, which is what most people want to do. function ColorPicker_select(inputobj,linkname) { if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") { alert("colorpicker.select: Input object passed is not a valid form input object"); window.ColorPicker_targetInput=null; return; } window.ColorPicker_targetInput = inputobj; this.show(linkname); } // This function runs when you move your mouse over a color block, if you have a newer browser function ColorPicker_highlightColor(c) { var thedoc = (arguments.length>1)?arguments[1]:window.document; var d = thedoc.getElementById("colorPickerSelectedColor"); d.style.backgroundColor = c; d = thedoc.getElementById("colorPickerSelectedColorValue"); d.innerHTML = c; } function ColorPicker() { var windowMode = false; // Create a new PopupWindow object if (arguments.length==0) { var divname = "colorPickerDiv"; } else if (arguments[0] == "window") { var divname = ''; windowMode = true; } else { var divname = arguments[0]; } if (divname != "") { var cp = new PopupWindow(divname); } else { var cp = new PopupWindow(); cp.setSize(225,250); } // Object variables cp.currentValue = "#FFFFFF"; // Method Mappings cp.writeDiv = ColorPicker_writeDiv; cp.highlightColor = ColorPicker_highlightColor; cp.show = ColorPicker_show; cp.select = ColorPicker_select; // Code to populate color picker window var colors = new Array( "#4180B6","#69AEE7","#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099", "#3300CC","#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099", "#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066","#FF0099", "#FF00CC","#FF00FF","#7FFFFF","#7FFFFF","#7FF7F7","#7FEFEF","#7FE7E7","#7FDFDF","#7FD7D7","#7FCFCF","#7FC7C7","#7FBFBF", "#7FB7B7","#7FAFAF","#7FA7A7","#7F9F9F","#7F9797","#7F8F8F","#7F8787","#7F7F7F","#7F7777","#7F6F6F","#7F6767","#7F5F5F", "#7F5757","#7F4F4F","#7F4747","#7F3F3F","#7F3737","#7F2F2F","#7F2727","#7F1F1F","#7F1717","#7F0F0F","#7F0707","#7F0000", "#4180B6","#69AEE7","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333","#333366","#333399", "#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300","#993333","#993366","#993399", "#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#FF3300","#FF3333","#FF3366","#FF3399", "#FF33CC","#FF33FF","#FF7FFF","#FF7FFF","#F77FF7","#EF7FEF","#E77FE7","#DF7FDF","#D77FD7","#CF7FCF","#C77FC7","#BF7FBF", "#B77FB7","#AF7FAF","#A77FA7","#9F7F9F","#977F97","#8F7F8F","#877F87","#7F7F7F","#777F77","#6F7F6F","#677F67","#5F7F5F", "#577F57","#4F7F4F","#477F47","#3F7F3F","#377F37","#2F7F2F","#277F27","#1F7F1F","#177F17","#0F7F0F","#077F07","#007F00", "#4180B6","#69AEE7","#006600","#006633","#006666","#006699","#0066CC","#0066FF","#336600","#336633","#336666","#336699", "#3366CC","#3366FF","#666600","#666633","#666666","#666699","#6666CC","#6666FF","#996600","#996633","#996666","#996699", "#9966CC","#9966FF","#CC6600","#CC6633","#CC6666","#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699", "#FF66CC","#FF66FF","#FFFF7F","#FFFF7F","#F7F77F","#EFEF7F","#E7E77F","#DFDF7F","#D7D77F","#CFCF7F","#C7C77F","#BFBF7F", "#B7B77F","#AFAF7F","#A7A77F","#9F9F7F","#97977F","#8F8F7F","#87877F","#7F7F7F","#77777F","#6F6F7F","#67677F","#5F5F7F", "#57577F","#4F4F7F","#47477F","#3F3F7F","#37377F","#2F2F7F","#27277F","#1F1F7F","#17177F","#0F0F7F","#07077F","#00007F", "#4180B6","#69AEE7","#009900","#009933","#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999", "#3399CC","#3399FF","#669900","#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999", "#9999CC","#9999FF","#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999", "#FF99CC","#FF99FF","#3FFFFF","#3FFFFF","#3FF7F7","#3FEFEF","#3FE7E7","#3FDFDF","#3FD7D7","#3FCFCF","#3FC7C7","#3FBFBF", "#3FB7B7","#3FAFAF","#3FA7A7","#3F9F9F","#3F9797","#3F8F8F","#3F8787","#3F7F7F","#3F7777","#3F6F6F","#3F6767","#3F5F5F", "#3F5757","#3F4F4F","#3F4747","#3F3F3F","#3F3737","#3F2F2F","#3F2727","#3F1F1F","#3F1717","#3F0F0F","#3F0707","#3F0000", "#4180B6","#69AEE7","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99", "#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66","#99CC99", "#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33","#FFCC66","#FFCC99", "#FFCCCC","#FFCCFF","#FF3FFF","#FF3FFF","#F73FF7","#EF3FEF","#E73FE7","#DF3FDF","#D73FD7","#CF3FCF","#C73FC7","#BF3FBF", "#B73FB7","#AF3FAF","#A73FA7","#9F3F9F","#973F97","#8F3F8F","#873F87","#7F3F7F","#773F77","#6F3F6F","#673F67","#5F3F5F", "#573F57","#4F3F4F","#473F47","#3F3F3F","#373F37","#2F3F2F","#273F27","#1F3F1F","#173F17","#0F3F0F","#073F07","#003F00", "#4180B6","#69AEE7","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00","#33FF33","#33FF66","#33FF99", "#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF","#99FF00","#99FF33","#99FF66","#99FF99", "#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC","#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99", "#FFFFCC","#FFFFFF","#FFFF3F","#FFFF3F","#F7F73F","#EFEF3F","#E7E73F","#DFDF3F","#D7D73F","#CFCF3F","#C7C73F","#BFBF3F", "#B7B73F","#AFAF3F","#A7A73F","#9F9F3F","#97973F","#8F8F3F","#87873F","#7F7F3F","#77773F","#6F6F3F","#67673F","#5F5F3F", "#57573F","#4F4F3F","#47473F","#3F3F3F","#37373F","#2F2F3F","#27273F","#1F1F3F","#17173F","#0F0F3F","#07073F","#00003F", "#4180B6","#69AEE7","#FFFFFF","#FFEEEE","#FFDDDD","#FFCCCC","#FFBBBB","#FFAAAA","#FF9999","#FF8888","#FF7777","#FF6666", "#FF5555","#FF4444","#FF3333","#FF2222","#FF1111","#FF0000","#FF0000","#FF0000","#FF0000","#EE0000","#DD0000","#CC0000", "#BB0000","#AA0000","#990000","#880000","#770000","#660000","#550000","#440000","#330000","#220000","#110000","#000000", "#000000","#000000","#000000","#001111","#002222","#003333","#004444","#005555","#006666","#007777","#008888","#009999", "#00AAAA","#00BBBB","#00CCCC","#00DDDD","#00EEEE","#00FFFF","#00FFFF","#00FFFF","#00FFFF","#11FFFF","#22FFFF","#33FFFF", "#44FFFF","#55FFFF","#66FFFF","#77FFFF","#88FFFF","#99FFFF","#AAFFFF","#BBFFFF","#CCFFFF","#DDFFFF","#EEFFFF","#FFFFFF", "#4180B6","#69AEE7","#FFFFFF","#EEFFEE","#DDFFDD","#CCFFCC","#BBFFBB","#AAFFAA","#99FF99","#88FF88","#77FF77","#66FF66", "#55FF55","#44FF44","#33FF33","#22FF22","#11FF11","#00FF00","#00FF00","#00FF00","#00FF00","#00EE00","#00DD00","#00CC00", "#00BB00","#00AA00","#009900","#008800","#007700","#006600","#005500","#004400","#003300","#002200","#001100","#000000", "#000000","#000000","#000000","#110011","#220022","#330033","#440044","#550055","#660066","#770077","#880088","#990099", "#AA00AA","#BB00BB","#CC00CC","#DD00DD","#EE00EE","#FF00FF","#FF00FF","#FF00FF","#FF00FF","#FF11FF","#FF22FF","#FF33FF", "#FF44FF","#FF55FF","#FF66FF","#FF77FF","#FF88FF","#FF99FF","#FFAAFF","#FFBBFF","#FFCCFF","#FFDDFF","#FFEEFF","#FFFFFF", "#4180B6","#69AEE7","#FFFFFF","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF","#7777FF","#6666FF", "#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000EE","#0000DD","#0000CC", "#0000BB","#0000AA","#000099","#000088","#000077","#000066","#000055","#000044","#000033","#000022","#000011","#000000", "#000000","#000000","#000000","#111100","#222200","#333300","#444400","#555500","#666600","#777700","#888800","#999900", "#AAAA00","#BBBB00","#CCCC00","#DDDD00","#EEEE00","#FFFF00","#FFFF00","#FFFF00","#FFFF00","#FFFF11","#FFFF22","#FFFF33", "#FFFF44","#FFFF55","#FFFF66","#FFFF77","#FFFF88","#FFFF99","#FFFFAA","#FFFFBB","#FFFFCC","#FFFFDD","#FFFFEE","#FFFFFF", "#4180B6","#69AEE7","#FFFFFF","#FFFFFF","#FBFBFB","#F7F7F7","#F3F3F3","#EFEFEF","#EBEBEB","#E7E7E7","#E3E3E3","#DFDFDF", "#DBDBDB","#D7D7D7","#D3D3D3","#CFCFCF","#CBCBCB","#C7C7C7","#C3C3C3","#BFBFBF","#BBBBBB","#B7B7B7","#B3B3B3","#AFAFAF", "#ABABAB","#A7A7A7","#A3A3A3","#9F9F9F","#9B9B9B","#979797","#939393","#8F8F8F","#8B8B8B","#878787","#838383","#7F7F7F", "#7B7B7B","#777777","#737373","#6F6F6F","#6B6B6B","#676767","#636363","#5F5F5F","#5B5B5B","#575757","#535353","#4F4F4F", "#4B4B4B","#474747","#434343","#3F3F3F","#3B3B3B","#373737","#333333","#2F2F2F","#2B2B2B","#272727","#232323","#1F1F1F", "#1B1B1B","#171717","#131313","#0F0F0F","#0B0B0B","#070707","#030303","#000000","#000000","#000000","#000000","#000000"); var total = colors.length; var width = 72; var cp_contents = ""; var windowRef = (windowMode)?"window.opener.":""; if (windowMode) { cp_contents += "Select Color"; cp_contents += "
    "; } cp_contents += ""; var use_highlight = (document.getElementById || document.all)?true:false; for (var i=0; i '; if ( ((i+1)>=total) || (((i+1) % width) == 0)) { cp_contents += ""; } } // If the browser supports dynamically changing TD cells, add the fancy stuff if (document.getElementById) { var width1 = Math.floor(width/2); var width2 = width = width1; cp_contents += ""; } cp_contents += "
     #FFFFFF
    "; if (windowMode) { cp_contents += "
    "; } // end populate code // Write the contents to the popup object cp.populate(cp_contents+"\n"); // Move the table down a bit so you can see it cp.offsetY = 25; cp.autoHide(); return cp; } 7wordpress/wp-includes/js/.svn/text-base/dbx.js.svn-baseJ*// DBX2.05 :: Docking Boxes (dbx) // ***************************************************** // DOM scripting by brothercake -- http://www.brothercake.com/ // GNU Lesser General Public License -- http://www.gnu.org/licenses/lgpl.html //****************************************************** var dbx;function dbxManager(sid){dbx = this;if(!/^[-_a-z0-9]+$/i.test(sid)) { alert('Error from dbxManager:\n"' + sid + '" is an invalid session ID'); return; }this.supported = !(document.getElementsByTagName('*').length == 0 || (navigator.vendor == 'KDE' && typeof window.sidebar == 'undefined'));if(!this.supported) { return; }this.etype = typeof document.addEventListener != 'undefined' ? 'addEventListener' : typeof document.attachEvent != 'undefined' ? 'attachEvent' : 'none';this.eprefix = (this.etype == 'attachEvent' ? 'on' : '');if(typeof window.opera != 'undefined' && parseFloat(navigator.userAgent.toLowerCase().split(/opera[\/ ]/)[1].split(' ')[0], 10) < 7.5){this.etype = 'none';}if(this.etype == 'none') { this.supported = false; return; }this.running = 0;this.sid = sid;this.savedata = {};this.cookiestate = this.getCookieState();};dbxManager.prototype.setCookieState = function(){var now = new Date();now.setTime(now.getTime() + (365*24*60*60*1000));var str = '';for(j in this.savedata){if(typeof this.savedata[j]!='function'){str += j + '=' + this.savedata[j] + '&'}}this.state = str.replace(/^(.+)&$/, '$1');this.cookiestring = this.state.replace(/,/g, '|');this.cookiestring = this.cookiestring.replace(/=/g, ':');if(typeof this.onstatechange == 'undefined' || this.onstatechange()){document.cookie = 'dbx-' + this.sid + '='+ this.cookiestring+ '; expires=' + now.toGMTString()+ '; path=/';}};dbxManager.prototype.getCookieState = function(){this.cookiestate = null;if(document.cookie){if(document.cookie.indexOf('dbx-' + this.sid)!=-1){this.cookie = document.cookie.split('dbx-' + this.sid + '=')[1].split(';')[0].split('&');for(var i in this.cookie){if(typeof this.cookie[i]!='function'){this.cookie[i] = this.cookie[i].replace(/\|/g, ',');this.cookie[i]= this.cookie[i].replace(/:/g, '=');this.cookie[i] = this.cookie[i].split('=');this.cookie[i][1] = this.cookie[i][1].split(',');}}this.cookiestate = {};for(i in this.cookie){if(typeof this.cookie[i]!='function'){this.cookiestate[this.cookie[i][0]] = this.cookie[i][1];}}}}return this.cookiestate;};dbxManager.prototype.addDataMember = function(gid, order){this.savedata[gid] = order;};dbxManager.prototype.createElement = function(tag){return typeof document.createElementNS != 'undefined' ? document.createElementNS('http://www.w3.org/1999/xhtml', tag) : document.createElement(tag);};dbxManager.prototype.getTarget = function(e, pattern, node){if(typeof node != 'undefined'){var target = node;}else{target = typeof e.target != 'undefined' ? e.target : e.srcElement;}var regex = new RegExp(pattern, '');while(!regex.test(target.className)){target = target.parentNode;}return target;};function dbxGroup(gid, dir, thresh, fix, ani, togs, def, open, close, move, toggle, kmove, ktoggle, syntax){if(!/^[-_a-z0-9]+$/i.test(gid)) { alert('Error from dbxGroup:\n"' + gid + '" is an invalid container ID'); return; }this.container = document.getElementById(gid);if(this.container == null || !dbx.supported) { return; }var self = this;this.gid = gid;this.dragok = false;this.box = null;this.vertical = dir == 'vertical';this.threshold = parseInt(thresh, 10);this.restrict = fix == 'yes';this.resolution = parseInt(ani, 10);this.toggles = togs == 'yes';this.defopen = def != 'closed';this.vocab = {'open' : open,'close' : close,'move' : move,'toggle' : toggle,'kmove' : kmove,'ktoggle' : ktoggle,'syntax' : syntax};this.container.style.position = 'relative';this.container.style.display = 'block';if(typeof window.opera != 'undefined'){this.container.style.display = 'run-in';}this.boxes = [];this.buttons = [];this.order = [];this.eles = this.container.getElementsByTagName('*');for(var i=0; i 0)){var sibling = this.boxes[positions[i + (positive ? 1 : -1)][0]];if(this.resolution > 0){var visipos = { 'x' : parent.offsetLeft, 'y' : parent.offsetTop };var siblingpos = { 'x' : sibling.offsetLeft, 'y' : sibling.offsetTop };}var obj = { 'insert' : (positive ? sibling : parent), 'before' : (positive ? parent : sibling) };this.container.insertBefore(obj.insert, obj.before);if(this.resolution > 0){var animators ={'sibling' : new dbxAnimator(this, sibling, siblingpos, this.resolution, true, anchor),'parent' : new dbxAnimator(this, parent, visipos, this.resolution, true, anchor)};}else{anchor.focus();}break;}}}this.getBoxOrder();}};dbxGroup.prototype.compare = function(a, b){return a[1] - b[1];};dbxGroup.prototype.createTooltip = function(isopen, anchor){if(this.keydown){this.tooltip = this.container.appendChild(dbx.createElement('span'));this.tooltip.style.visibility = 'hidden';this.tooltip.className = 'dbx-tooltip';if(isopen != null){this.tooltip.appendChild(document.createTextNode(this.vocab.kmove + this.vocab.ktoggle.replace('%toggle%', isopen ? this.vocab.close : this.vocab.open)));}else{this.tooltip.appendChild(document.createTextNode(this.vocab.kmove));}var parent = dbx.getTarget(null, 'dbx\-box', anchor);this.tooltip.style.left = parent.offsetLeft + 'px';this.tooltip.style.top = parent.offsetTop + 'px';var tooltip = this.tooltip;window.setTimeout(function(){if(tooltip != null) { tooltip.style.visibility = 'visible'; }}, 500);}};dbxGroup.prototype.removeTooltip = function(){if(this.tooltip != null){this.tooltip.parentNode.removeChild(this.tooltip);this.tooltip = null;}};dbxGroup.prototype.mousedown = function(e, box){var node = typeof e.target != 'undefined' ? e.target : e.srcElement;if(node.nodeName == '#text') { node = node.parentNode; }if(!/dbx\-(toggle|box|group)/i.test(node.className)){while(!/dbx\-(handle|box|group)/i.test(node.className)){node = node.parentNode;}}if(/dbx\-handle/i.test(node.className)){this.removeTooltip();this.released = false;this.initial = { 'x' : e.clientX, 'y' : e.clientY };this.current = { 'x' : 0, 'y' : 0 };this.createCloneBox(box);if(typeof e.preventDefault != 'undefined' ) { e.preventDefault(); }if(typeof document.onselectstart != 'undefined'){document.onselectstart = function() { return false; }}}};dbxGroup.prototype.mousemove = function(e){if(this.dragok && this.box != null){this.positive = this.vertical ? (e.clientY > this.current.y ? true : false) : (e.clientX > this.current.x ? true : false);this.current = { 'x' : e.clientX, 'y' : e.clientY };var overall = { 'x' : this.current.x - this.initial.x, 'y' : this.current.y - this.initial.y };if(((overall.x >= 0 && overall.x <= this.threshold) || (overall.x <= 0 && overall.x >= 0 - this.threshold))&&((overall.y >= 0 && overall.y <= this.threshold) || (overall.y <= 0 && overall.y >= 0 - this.threshold))){this.current.x -= overall.x;this.current.y -= overall.y;}if(this.released || overall.x > this.threshold || overall.x < (0 - this.threshold) || overall.y > this.threshold || overall.y < (0 - this.threshold)){dbx.group = this.container;dbx.box = this.box;dbx.event = e;if(typeof dbx.onboxdrag == 'undefined' || dbx.onboxdrag()){this.released = true;if(!this.restrict || !this.vertical) { this.boxclone.style.left = (this.current.x - this.difference.x) + 'px'; }if(!this.restrict || this.vertical) { this.boxclone.style.top = (this.current.y - this.difference.y) + 'px'; }this.moveOriginalToPosition(this.current.x, this.current.y);if(typeof e.preventDefault != 'undefined' ) { e.preventDefault(); }}}}return true;};dbxGroup.prototype.mouseup = function(e){if(this.box != null){this.moveOriginalToPosition(e.clientX, e.clientY);this.removeCloneBox();this.getBoxOrder();if(typeof document.onselectstart != 'undefined'){document.onselectstart = function() { return true; }}}this.dragok = false;};dbxGroup.prototype.keypress = function(e, anchor){if(/^(3[7-9])|(40)$/.test(e.keyCode)){this.removeTooltip();if((this.vertical && /^(38|40)$/.test(e.keyCode)) || (!this.vertical && /^(37|39)$/.test(e.keyCode))){this.shiftBoxPosition(e, anchor, /^[3][78]$/.test(e.keyCode) ? false : true);if(typeof e.preventDefault != 'undefined') { e.preventDefault(); }else { return false; }typeof e.stopPropagation != 'undefined' ? e.stopPropagation() : e.cancelBubble = true;this.keydown = false;}}return true;};dbxGroup.prototype.getBoxOrder = function(){this.order = [];var len = this.eles.length;for(var j=0; j boxprops.xy && cloneprops.xy < boxprops.xy)||(!this.positive && cloneprops.xy < boxprops.xy && cloneprops.xy + cloneprops.wh > boxprops.xy)){if(this.boxes[i] == this.box) { return; }var sibling = this.box.nextSibling;while(sibling.className == null || !/dbx\-box/.test(sibling.className)){sibling = sibling.nextSibling;}if(this.boxes[i] == sibling) { return; }if(this.resolution > 0){if(this.box[this.vertical ? 'offsetTop' : 'offsetLeft'] < boxprops.xy){var visibox = this.boxes[i].previousSibling;while(visibox.className == null || !/dbx\-box/.test(visibox.className)){visibox = visibox.previousSibling;}}else{visibox = this.boxes[i];}var visipos = { 'x' : visibox.offsetLeft, 'y' : visibox.offsetTop };}var prepos = { 'x' : this.box.offsetLeft, 'y' : this.box.offsetTop };this.container.insertBefore(this.box, this.boxes[i]);this.initial.x += (this.box.offsetLeft - prepos.x);this.initial.y += (this.box.offsetTop - prepos.y);if(this.resolution > 0 && visibox != this.box){var animator = new dbxAnimator(this, visibox, visipos, this.resolution, false, null);}else{}break;}}};function dbxAnimator(caller, box, pos, res, kbd, anchor){this.caller = caller;this.box = box;this.timer = null;var before = pos[this.caller.vertical ? 'y' : 'x'];var after = this.box[this.caller.vertical ? 'offsetTop' : 'offsetLeft'];if(before != after){if(dbx.running > this.caller.boxes.length - 1) { return; }var clone = this.caller.createClone(this.box, 29999, arguments[2]);clone.style.visibility = 'visible';this.box.style.visibility = 'hidden';this.animateClone(clone,before,after > before ? after - before : 0 - (before - after),this.caller.vertical ? 'top' : 'left',res,kbd,anchor);}};dbxAnimator.prototype.animateClone = function(clone, current, change, dir, res, kbd, anchor){var self = this;var count = 0;dbx.running ++;this.timer = window.setInterval(function(){count ++;current += change / res;clone.style[dir] = current + 'px';if(count == res){window.clearTimeout(self.timer);self.timer = null;dbx.running --;self.caller.container.removeChild(clone);self.box.style.visibility = 'visible';if(kbd){if(anchor != null && anchor.parentNode.style.visibility != 'hidden'){anchor.focus();}else if(self.caller.toggles){var button = self.caller.buttons[parseInt(self.box.className.split('dbxid')[1],10)];if(button != null && typeof button.isactive != 'undefined'){button.focus();}}}}}, 20);};if(typeof window.attachEvent != 'undefined'){window.attachEvent('onunload', function(){var ev = ['mousedown', 'mousemove', 'mouseup', 'mouseout', 'click', 'keydown', 'keyup', 'focus', 'blur', 'selectstart', 'statechange', 'boxdrag', 'boxopen', 'boxclose'];var el = ev.length;var dl = document.all.length;for(var i=0; i\n" : ''; if ( m ) showLinkMessage += m; else showLinkMessage += "" + tempObj.jumpText + ""; }); if ( tempObj.showLink && showLinkMessage ) Element.update(ajaxAdd.myResponseElement,""); } if ( tempObj.addComplete && typeof tempObj.addComplete == 'function' ) tempObj.addComplete( what, where, update, transport ); tempObj.recolorList(); ajaxAdd.restoreInputs = null; }); if ( !update ) ajaxAdd.addOnWPError( function(transport) { tempObj.restoreForm(ajaxAdd.restoreInputs); }); ajaxAdd.request(ajaxAdd.url); if ( !update ) this.clear(); return false; }, // sends update-what and fields contained in where // recieves html with top element having an id like what-# ajaxUpdater: function( what, where ) { return this.ajaxAdder( what, where, true ); }, // sends delete-what and id# ajaxDelete: function( what, id ) { var ajaxDel = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); if( ajaxDel.notInitialized() ) return true; var tempObj = this; var action = 'delete-' + what; var actionId = action + '&id=' + id; var idName = what.replace('-as-spam','') + '-' + id; ajaxDel.addOnComplete( function(transport) { Element.update(ajaxDel.myResponseElement,''); tempObj.destore(actionId); if( tempObj.delComplete && typeof tempObj.delComplete == 'function' ) tempObj.delComplete( what, id, transport ); }); ajaxDel.addOnWPError( function(transport) { tempObj.restore(actionId, true); }); ajaxDel.options.parameters = $H(ajaxDel.options.parameters).merge({action: action, id: id}).merge(this.inputData.toQueryParams()); ajaxDel.request(ajaxDel.url); this.store(actionId, idName); tempObj.removeListItem( idName ); return false; }, // Toggles class nomes // sends dim-what and id# ajaxDimmer: function( what, id, dimClass ) { ajaxDim = new WPAjax( this.ajaxHandler, this.ajaxRespEl ); if ( ajaxDim.notInitialized() ) return true; var tempObj = this; var action = 'dim-' + what; var actionId = action + '&id=' + id; var idName = what + '-' + id; ajaxDim.addOnComplete( function(transport) { Element.update(ajaxDim.myResponseElement,''); tempObj.destore(actionId); if ( tempObj.dimComplete && typeof tempObj.dimComplete == 'function' ) tempObj.dimComplete( what, id, dimClass, transport ); }); ajaxDim.addOnWPError( function(transport) { tempObj.restore(actionId, true); }); ajaxDim.options.parameters = $H(ajaxDim.options.parameters).merge({action: action, id: id}).merge(this.inputData.toQueryParams()); ajaxDim.request(ajaxDim.url); this.store(actionId, idName); this.dimItem( idName, dimClass ); return false; }, addListItem: function( h ) { new Insertion[this.topAdder ? 'Top' : 'Bottom'](this.theList,h); Element.cleanWhitespace(this.theList); var id = this.topAdder ? this.theList.firstChild.id : this.theList.lastChild.id; if ( this.alt ) if ( ( this.theList.childNodes.length + this.altOffset ) % 2 ) Element.addClassName($(id),this.alt); Fat.fade_element(id); }, // only hides the element sa it can be put back again if necessary removeListItem: function( id, noFade ) { id = $(id); if ( !noFade ) { Fat.fade_element(id.id,null,700,'#FF3333'); var tempObj = this; var func = function() { id.hide(); tempObj.recolorList(); } setTimeout(func, 705); } else { id.hide(); this.recolorList(); } }, replaceListItem: function( id, h, update ) { id = $(id); if ( !update ) { Element.remove(id); this.addListItem( h ); return; } id.replace(h); Fat.fade_element(id.id); }, // toggles class dimItem: function( id, dimClass, noFade ) { id = $(id); if ( Element.hasClassName(id,dimClass) ) { if ( !noFade ) Fat.fade_element(id.id,null,700,null); Element.removeClassName(id,dimClass); } else { if ( !noFade ) Fat.fade_element(id.id,null,700,'#FF3333'); Element.addClassName(id,dimClass); } }, // store an element in case we need it later store: function(action, id) { if ( !this.dataStore ) this.dataStore = $H(); this.dataStore[action] = $(id).cloneNode(true); }, // delete from store destore: function(action) { delete(this.dataStore[action]); }, // restore element from store into existing (possibly hidden) element of same id restore: function(action, error) { var id = this.dataStore[action].id; this.theList.replaceChild(this.dataStore[action], $(id)); delete(this.dataStore[action]); if ( error ) { func = function() { Element.setStyle($(id),{backgroundColor:'#FF3333'}); } func(); setTimeout(func, 705); // Hit it twice in case it's still fading. } }, // Like Form.serialize, but excludes action and sets up clearInputs grabInputs: function( where, ajaxObj ) { if ( ajaxObj ) ajaxObj.restoreInputs = []; var elements = Form.getElements($(where)); var queryComponents = new Array(); for (var i = 0; i < elements.length; i++) { if ( 'action' == elements[i].name ) continue; if ( 'hidden' != elements[i].type && 'submit' != elements[i].type && 'button' != elements[i].type ) { this.clearInputs.push(elements[i]); if ( ajaxObj ) ajaxObj.restoreInputs.push([elements[i], elements[i].value]); } var queryComponent = Form.Element.serialize(elements[i]); if (queryComponent) { queryComponents.push(queryComponent); } } return queryComponents.join('&'); }, // form.reset() can only do whole forms. This can do subsections. clear: function() { this.clearInputs.each( function(i) { i = $(i); if ( 'textarea' == i.tagName.toLowerCase() ) i.value = ''; else switch ( i.type.toLowerCase() ) { case 'password': case 'text': i.value = ''; break; case 'checkbox': case 'radio': i.checked = false; break; case 'select': case 'select-one': i.selectedIndex = null; break; case 'select-multiple': for (var o = 0; o < i.length; o++) i.options[o].selected = false; break; } }); this.clearInputs = []; }, restoreForm: function(elements) { elements.each( function(i) { i[0].value = i[1]; }); }, recolorList: function() { if ( !this.alt ) return; var alt = this.alt; var offset = this.altOffset; var listItems = $A(this.theList.childNodes).findAll( function(i) { return Element.visible(i) } ); listItems.each( function(i,n) { if ( ( n + offset ) % 2 ) Element.removeClassName(i,alt); else Element.addClassName(i,alt); }); } }); //No submit unless code returns true. function killSubmit ( code, e ) { e = e ? e : window.event; if ( !e ) return; var t = e.target ? e.target : e.srcElement; if ( ( 'text' == t.type && e.keyCode == 13 ) || ( 'submit' == t.type && 'click' == e.type ) ) { if ( ( 'string' == typeof code && !eval(code) ) || ( 'function' == typeof code && !code() ) ) { e.returnValue = false; e.cancelBubble = true; return false; } } } //Generic but lame JS closure function encloseFunc(f){var a=arguments[1];return function(){return f(a);}} =wordpress/wp-includes/js/.svn/text-base/prototype.js.svn-base\/* Prototype JavaScript framework, version 1.5.0 * (c) 2005-2007 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://prototype.conio.net/ * /*--------------------------------------------------------------------------*/ var Prototype = { Version: '1.5.0', BrowserFeatures: { XPath: !!document.evaluate }, ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', emptyFunction: function() {}, K: function(x) { return x } } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; } Object.extend(Object, { inspect: function(object) { try { if (object === undefined) return 'undefined'; if (object === null) return 'null'; return object.inspect ? object.inspect() : object.toString(); } catch (e) { if (e instanceof RangeError) return '...'; throw e; } }, keys: function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }, values: function(object) { var values = []; for (var property in object) values.push(object[property]); return values; }, clone: function(object) { return Object.extend({}, object); } }); Function.prototype.bind = function() { var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); } } Function.prototype.bindAsEventListener = function(object) { var __method = this, args = $A(arguments), object = args.shift(); return function(event) { return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); } } Object.extend(Number.prototype, { toColorPart: function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; }, succ: function() { return this + 1; }, times: function(iterator) { $R(0, this, true).each(iterator); return this; } }); var Try = { these: function() { var returnValue; for (var i = 0, length = arguments.length; i < length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } /*--------------------------------------------------------------------------*/ var PeriodicalExecuter = Class.create(); PeriodicalExecuter.prototype = { initialize: function(callback, frequency) { this.callback = callback; this.frequency = frequency; this.currentlyExecuting = false; this.registerCallback(); }, registerCallback: function() { this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, stop: function() { if (!this.timer) return; clearInterval(this.timer); this.timer = null; }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.callback(this); } finally { this.currentlyExecuting = false; } } } } String.interpret = function(value){ return value == null ? '' : String(value); } Object.extend(String.prototype, { gsub: function(pattern, replacement) { var result = '', source = this, match; replacement = arguments.callee.prepareReplacement(replacement); while (source.length > 0) { if (match = source.match(pattern)) { result += source.slice(0, match.index); result += String.interpret(replacement(match)); source = source.slice(match.index + match[0].length); } else { result += source, source = ''; } } return result; }, sub: function(pattern, replacement, count) { replacement = this.gsub.prepareReplacement(replacement); count = count === undefined ? 1 : count; return this.gsub(pattern, function(match) { if (--count < 0) return match[0]; return replacement(match); }); }, scan: function(pattern, iterator) { this.gsub(pattern, iterator); return this; }, truncate: function(length, truncation) { length = length || 30; truncation = truncation === undefined ? '...' : truncation; return this.length > length ? this.slice(0, length - truncation.length) + truncation : this; }, strip: function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); }, stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, stripScripts: function() { return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); }, extractScripts: function() { var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); return (this.match(matchAll) || []).map(function(scriptTag) { return (scriptTag.match(matchOne) || ['', ''])[1]; }); }, evalScripts: function() { return this.extractScripts().map(function(script) { return eval(script) }); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0] ? (div.childNodes.length > 1 ? $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : div.childNodes[0].nodeValue) : ''; }, toQueryParams: function(separator) { var match = this.strip().match(/([^?#]*)(#.*)?$/); if (!match) return {}; return match[1].split(separator || '&').inject({}, function(hash, pair) { if ((pair = pair.split('='))[0]) { var name = decodeURIComponent(pair[0]); var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; if (hash[name] !== undefined) { if (hash[name].constructor != Array) hash[name] = [hash[name]]; if (value) hash[name].push(value); } else hash[name] = value; } return hash; }); }, toArray: function() { return this.split(''); }, succ: function() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); }, camelize: function() { var parts = this.split('-'), len = parts.length; if (len == 1) return parts[0]; var camelized = this.charAt(0) == '-' ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) : parts[0]; for (var i = 1; i < len; i++) camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); return camelized; }, capitalize: function(){ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); }, underscore: function() { return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); }, dasherize: function() { return this.gsub(/_/,'-'); }, inspect: function(useDoubleQuotes) { var escapedString = this.replace(/\\/g, '\\\\'); if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; else return "'" + escapedString.replace(/'/g, '\\\'') + "'"; } }); String.prototype.gsub.prepareReplacement = function(replacement) { if (typeof replacement == 'function') return replacement; var template = new Template(replacement); return function(match) { return template.evaluate(match) }; } String.prototype.parseQuery = String.prototype.toQueryParams; var Template = Class.create(); Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; Template.prototype = { initialize: function(template, pattern) { this.template = template.toString(); this.pattern = pattern || Template.Pattern; }, evaluate: function(object) { return this.template.gsub(this.pattern, function(match) { var before = match[1]; if (before == '\\') return match[2]; return before + String.interpret(object[match[3]]); }); } } var $break = new Object(); var $continue = new Object(); var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch (e) { if (e != $break) throw e; } return this; }, eachSlice: function(number, iterator) { var index = -number, slices = [], array = this.toArray(); while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.map(iterator); }, all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; }, any: function(iterator) { var result = false; this.each(function(value, index) { if (result = !!(iterator || Prototype.K)(value, index)) throw $break; }); return result; }, collect: function(iterator) { var results = []; this.each(function(value, index) { results.push((iterator || Prototype.K)(value, index)); }); return results; }, detect: function(iterator) { var result; this.each(function(value, index) { if (iterator(value, index)) { result = value; throw $break; } }); return result; }, findAll: function(iterator) { var results = []; this.each(function(value, index) { if (iterator(value, index)) results.push(value); }); return results; }, grep: function(pattern, iterator) { var results = []; this.each(function(value, index) { var stringValue = value.toString(); if (stringValue.match(pattern)) results.push((iterator || Prototype.K)(value, index)); }) return results; }, include: function(object) { var found = false; this.each(function(value) { if (value == object) { found = true; throw $break; } }); return found; }, inGroupsOf: function(number, fillWith) { fillWith = fillWith === undefined ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); }, inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; }, invoke: function(method) { var args = $A(arguments).slice(1); return this.map(function(value) { return value[method].apply(value, args); }); }, max: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value >= result) result = value; }); return result; }, min: function(iterator) { var result; this.each(function(value, index) { value = (iterator || Prototype.K)(value, index); if (result == undefined || value < result) result = value; }); return result; }, partition: function(iterator) { var trues = [], falses = []; this.each(function(value, index) { ((iterator || Prototype.K)(value, index) ? trues : falses).push(value); }); return [trues, falses]; }, pluck: function(property) { var results = []; this.each(function(value, index) { results.push(value[property]); }); return results; }, reject: function(iterator) { var results = []; this.each(function(value, index) { if (!iterator(value, index)) results.push(value); }); return results; }, sortBy: function(iterator) { return this.map(function(value, index) { return {value: value, criteria: iterator(value, index)}; }).sort(function(left, right) { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; }).pluck('value'); }, toArray: function() { return this.map(); }, zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { return iterator(collections.pluck(index)); }); }, size: function() { return this.toArray().length; }, inspect: function() { return '#'; } } Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.detect, select: Enumerable.findAll, member: Enumerable.include, entries: Enumerable.toArray }); var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0, length = iterable.length; i < length; i++) results.push(iterable[i]); return results; } } Object.extend(Array.prototype, Enumerable); if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0, length = this.length; i < length; i++) iterator(this[i]); }, clear: function() { this.length = 0; return this; }, first: function() { return this[0]; }, last: function() { return this[this.length - 1]; }, compact: function() { return this.select(function(value) { return value != null; }); }, flatten: function() { return this.inject([], function(array, value) { return array.concat(value && value.constructor == Array ? value.flatten() : [value]); }); }, without: function() { var values = $A(arguments); return this.select(function(value) { return !values.include(value); }); }, indexOf: function(object) { for (var i = 0, length = this.length; i < length; i++) if (this[i] == object) return i; return -1; }, reverse: function(inline) { return (inline !== false ? this : this.toArray())._reverse(); }, reduce: function() { return this.length > 1 ? this : this[0]; }, uniq: function() { return this.inject([], function(array, value) { return array.include(value) ? array : array.concat([value]); }); }, clone: function() { return [].concat(this); }, size: function() { return this.length; }, inspect: function() { return '[' + this.map(Object.inspect).join(', ') + ']'; } }); Array.prototype.toArray = Array.prototype.clone; function $w(string){ string = string.strip(); return string ? string.split(/\s+/) : []; } if(window.opera){ Array.prototype.concat = function(){ var array = []; for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); for(var i = 0, length = arguments.length; i < length; i++) { if(arguments[i].constructor == Array) { for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) array.push(arguments[i][j]); } else { array.push(arguments[i]); } } return array; } } var Hash = function(obj) { Object.extend(this, obj || {}); }; Object.extend(Hash, { toQueryString: function(obj) { var parts = []; this.prototype._each.call(obj, function(pair) { if (!pair.key) return; if (pair.value && pair.value.constructor == Array) { var values = pair.value.compact(); if (values.length < 2) pair.value = values.reduce(); else { key = encodeURIComponent(pair.key); values.each(function(value) { value = value != undefined ? encodeURIComponent(value) : ''; parts.push(key + '=' + encodeURIComponent(value)); }); return; } } if (pair.value == undefined) pair[1] = ''; parts.push(pair.map(encodeURIComponent).join('=')); }); return parts.join('&'); } }); Object.extend(Hash.prototype, Enumerable); Object.extend(Hash.prototype, { _each: function(iterator) { for (var key in this) { var value = this[key]; if (value && value == Hash.prototype[key]) continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, keys: function() { return this.pluck('key'); }, values: function() { return this.pluck('value'); }, merge: function(hash) { return $H(hash).inject(this, function(mergedHash, pair) { mergedHash[pair.key] = pair.value; return mergedHash; }); }, remove: function() { var result; for(var i = 0, length = arguments.length; i < length; i++) { var value = this[arguments[i]]; if (value !== undefined){ if (result === undefined) result = value; else { if (result.constructor != Array) result = [result]; result.push(value) } } delete this[arguments[i]]; } return result; }, toQueryString: function() { return Hash.toQueryString(this); }, inspect: function() { return '#'; } }); function $H(object) { if (object && object.constructor == Hash) return object; return new Hash(object); }; ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }, _each: function(iterator) { var value = this.start; while (this.include(value)) { iterator(value); value = value.succ(); } }, include: function(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } }); var $R = function(start, end, exclusive) { return new ObjectRange(start, end, exclusive); } var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, activeRequestCount: 0 } Ajax.Responders = { responders: [], _each: function(iterator) { this.responders._each(iterator); }, register: function(responder) { if (!this.include(responder)) this.responders.push(responder); }, unregister: function(responder) { this.responders = this.responders.without(responder); }, dispatch: function(callback, request, transport, json) { this.each(function(responder) { if (typeof responder[callback] == 'function') { try { responder[callback].apply(responder, [request, transport, json]); } catch (e) {} } }); } }; Object.extend(Ajax.Responders, Enumerable); Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++; }, onComplete: function() { Ajax.activeRequestCount--; } }); Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, contentType: 'application/x-www-form-urlencoded', encoding: 'UTF-8', parameters: '' } Object.extend(this.options, options || {}); this.options.method = this.options.method.toLowerCase(); if (typeof this.options.parameters == 'string') this.options.parameters = this.options.parameters.toQueryParams(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { _complete: false, initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { this.url = url; this.method = this.options.method; var params = this.options.parameters; if (!['get', 'post'].include(this.method)) { // simulate other verbs over post params['_method'] = this.method; this.method = 'post'; } params = Hash.toQueryString(params); if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' // when GET, append parameters to URL if (this.method == 'get' && params) this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; try { Ajax.Responders.dispatch('onCreate', this, this.transport); this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous); if (this.options.asynchronous) setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); this.transport.onreadystatechange = this.onStateChange.bind(this); this.setRequestHeaders(); var body = this.method == 'post' ? (this.options.postBody || params) : null; this.transport.send(body); /* Force Firefox to handle ready state 4 for synchronous requests */ if (!this.options.asynchronous && this.transport.overrideMimeType) this.onStateChange(); } catch (e) { this.dispatchException(e); } }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState > 1 && !((readyState == 4) && this._complete)) this.respondToReadyState(this.transport.readyState); }, setRequestHeaders: function() { var headers = { 'X-Requested-With': 'XMLHttpRequest', 'X-Prototype-Version': Prototype.Version, 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' }; if (this.method == 'post') { headers['Content-type'] = this.options.contentType + (this.options.encoding ? '; charset=' + this.options.encoding : ''); /* Force "Connection: close" for older Mozilla browsers to work * around a bug where XMLHttpRequest sends an incorrect * Content-length header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) headers['Connection'] = 'close'; } // user-defined headers if (typeof this.options.requestHeaders == 'object') { var extras = this.options.requestHeaders; if (typeof extras.push == 'function') for (var i = 0, length = extras.length; i < length; i += 2) headers[extras[i]] = extras[i+1]; else $H(extras).each(function(pair) { headers[pair.key] = pair.value }); } for (var name in headers) this.transport.setRequestHeader(name, headers[name]); }, success: function() { return !this.transport.status || (this.transport.status >= 200 && this.transport.status < 300); }, respondToReadyState: function(readyState) { var state = Ajax.Request.Events[readyState]; var transport = this.transport, json = this.evalJSON(); if (state == 'Complete') { try { this._complete = true; (this.options['on' + this.transport.status] || this.options['on' + (this.success() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(transport, json); } catch (e) { this.dispatchException(e); } if ((this.getHeader('Content-type') || 'text/javascript').strip(). match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) this.evalResponse(); } try { (this.options['on' + state] || Prototype.emptyFunction)(transport, json); Ajax.Responders.dispatch('on' + state, this, transport, json); } catch (e) { this.dispatchException(e); } if (state == 'Complete') { // avoid memory leak in MSIE: clean up this.transport.onreadystatechange = Prototype.emptyFunction; } }, getHeader: function(name) { try { return this.transport.getResponseHeader(name); } catch (e) { return null } }, evalJSON: function() { try { var json = this.getHeader('X-JSON'); return json ? eval('(' + json + ')') : null; } catch (e) { return null } }, evalResponse: function() { try { return eval(this.transport.responseText); } catch (e) { this.dispatchException(e); } }, dispatchException: function(exception) { (this.options.onException || Prototype.emptyFunction)(this, exception); Ajax.Responders.dispatch('onException', this, exception); } }); Ajax.Updater = Class.create(); Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { this.container = { success: (container.success || container), failure: (container.failure || (container.success ? null : container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function(transport, param) { this.updateContent(); onComplete(transport, param); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.container[this.success() ? 'success' : 'failure']; var response = this.transport.responseText; if (!this.options.evalScripts) response = response.stripScripts(); if (receiver = $(receiver)) { if (this.options.insertion) new this.options.insertion(receiver, response); else receiver.update(response); } if (this.success()) { if (this.onComplete) setTimeout(this.onComplete.bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = (this.options.decay || 1); this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.options.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); function $(element) { if (arguments.length > 1) { for (var i = 0, elements = [], length = arguments.length; i < length; i++) elements.push($(arguments[i])); return elements; } if (typeof element == 'string') element = document.getElementById(element); return Element.extend(element); } if (Prototype.BrowserFeatures.XPath) { document._getElementsByXPath = function(expression, parentElement) { var results = []; var query = document.evaluate(expression, $(parentElement) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i)); return results; }; } document.getElementsByClassName = function(className, parentElement) { if (Prototype.BrowserFeatures.XPath) { var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; return document._getElementsByXPath(q, parentElement); } else { var children = ($(parentElement) || document.body).getElementsByTagName('*'); var elements = [], child; for (var i = 0, length = children.length; i < length; i++) { child = children[i]; if (Element.hasClassName(child, className)) elements.push(Element.extend(child)); } return elements; } }; /*--------------------------------------------------------------------------*/ if (!window.Element) var Element = new Object(); Element.extend = function(element) { if (!element || _nativeExtensions || element.nodeType == 3) return element; if (!element._extended && element.tagName && element != window) { var methods = Object.clone(Element.Methods), cache = Element.extend.cache; if (element.tagName == 'FORM') Object.extend(methods, Form.Methods); if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) Object.extend(methods, Form.Element.Methods); Object.extend(methods, Element.Methods.Simulated); for (var property in methods) { var value = methods[property]; if (typeof value == 'function' && !(property in element)) element[property] = cache.findOrStore(value); } } element._extended = true; return element; }; Element.extend.cache = { findOrStore: function(value) { return this[value] = this[value] || function() { return value.apply(null, [this].concat($A(arguments))); } } }; Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; }, toggle: function(element) { element = $(element); Element[Element.visible(element) ? 'hide' : 'show'](element); return element; }, hide: function(element) { $(element).style.display = 'none'; return element; }, show: function(element) { $(element).style.display = ''; return element; }, remove: function(element) { element = $(element); element.parentNode.removeChild(element); return element; }, update: function(element, html) { html = typeof html == 'undefined' ? '' : html.toString(); $(element).innerHTML = html.stripScripts(); setTimeout(function() {html.evalScripts()}, 10); return element; }, replace: function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); if (element.outerHTML) { element.outerHTML = html.stripScripts(); } else { var range = element.ownerDocument.createRange(); range.selectNodeContents(element); element.parentNode.replaceChild( range.createContextualFragment(html.stripScripts()), element); } setTimeout(function() {html.evalScripts()}, 10); return element; }, inspect: function(element) { element = $(element); var result = '<' + element.tagName.toLowerCase(); $H({'id': 'id', 'className': 'class'}).each(function(pair) { var property = pair.first(), attribute = pair.last(); var value = (element[property] || '').toString(); if (value) result += ' ' + attribute + '=' + value.inspect(true); }); return result + '>'; }, recursivelyCollect: function(element, property) { element = $(element); var elements = []; while (element = element[property]) if (element.nodeType == 1) elements.push(Element.extend(element)); return elements; }, ancestors: function(element) { return $(element).recursivelyCollect('parentNode'); }, descendants: function(element) { return $A($(element).getElementsByTagName('*')); }, immediateDescendants: function(element) { if (!(element = $(element).firstChild)) return []; while (element && element.nodeType != 1) element = element.nextSibling; if (element) return [element].concat($(element).nextSiblings()); return []; }, previousSiblings: function(element) { return $(element).recursivelyCollect('previousSibling'); }, nextSiblings: function(element) { return $(element).recursivelyCollect('nextSibling'); }, siblings: function(element) { element = $(element); return element.previousSiblings().reverse().concat(element.nextSiblings()); }, match: function(element, selector) { if (typeof selector == 'string') selector = new Selector(selector); return selector.match($(element)); }, up: function(element, expression, index) { return Selector.findElement($(element).ancestors(), expression, index); }, down: function(element, expression, index) { return Selector.findElement($(element).descendants(), expression, index); }, previous: function(element, expression, index) { return Selector.findElement($(element).previousSiblings(), expression, index); }, next: function(element, expression, index) { return Selector.findElement($(element).nextSiblings(), expression, index); }, getElementsBySelector: function() { var args = $A(arguments), element = $(args.shift()); return Selector.findChildElements(element, args); }, getElementsByClassName: function(element, className) { return document.getElementsByClassName(className, element); }, readAttribute: function(element, name) { element = $(element); if (document.all && !window.opera) { var t = Element._attributeTranslations; if (t.values[name]) return t.values[name](element, name); if (t.names[name]) name = t.names[name]; var attribute = element.attributes[name]; if(attribute) return attribute.nodeValue; } return element.getAttribute(name); }, getHeight: function(element) { return $(element).getDimensions().height; }, getWidth: function(element) { return $(element).getDimensions().width; }, classNames: function(element) { return new Element.ClassNames(element); }, hasClassName: function(element, className) { if (!(element = $(element))) return; var elementClassName = element.className; if (elementClassName.length == 0) return false; if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) return true; return false; }, addClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).add(className); return element; }, removeClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element).remove(className); return element; }, toggleClassName: function(element, className) { if (!(element = $(element))) return; Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); return element; }, observe: function() { Event.observe.apply(Event, arguments); return $A(arguments).first(); }, stopObserving: function() { Event.stopObserving.apply(Event, arguments); return $A(arguments).first(); }, // removes whitespace-only text node children cleanWhitespace: function(element) { element = $(element); var node = element.firstChild; while (node) { var nextNode = node.nextSibling; if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) element.removeChild(node); node = nextNode; } return element; }, empty: function(element) { return $(element).innerHTML.match(/^\s*$/); }, descendantOf: function(element, ancestor) { element = $(element), ancestor = $(ancestor); while (element = element.parentNode) if (element == ancestor) return true; return false; }, scrollTo: function(element) { element = $(element); var pos = Position.cumulativeOffset(element); window.scrollTo(pos[0], pos[1]); return element; }, getStyle: function(element, style) { element = $(element); if (['float','cssFloat'].include(style)) style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); style = style.camelize(); var value = element.style[style]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css[style] : null; } else if (element.currentStyle) { value = element.currentStyle[style]; } } if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) value = element['offset'+style.capitalize()] + 'px'; if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) if (Element.getStyle(element, 'position') == 'static') value = 'auto'; if(style == 'opacity') { if(value) return parseFloat(value); if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) if(value[1]) return parseFloat(value[1]) / 100; return 1.0; } return value == 'auto' ? null : value; }, setStyle: function(element, style) { element = $(element); for (var name in style) { var value = style[name]; if(name == 'opacity') { if (value == 1) { value = (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else if(value == '') { if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); } else { if(value < 0.00001) value = 0; if(/MSIE/.test(navigator.userAgent) && !window.opera) element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + 'alpha(opacity='+value*100+')'; } } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; element.style[name.camelize()] = value; } return element; }, getDimensions: function(element) { element = $(element); var display = $(element).getStyle('display'); if (display != 'none' && display != null) // Safari bug return {width: element.offsetWidth, height: element.offsetHeight}; // All *Width and *Height properties give 0 on elements with display none, // so enable the element temporarily var els = element.style; var originalVisibility = els.visibility; var originalPosition = els.position; var originalDisplay = els.display; els.visibility = 'hidden'; els.position = 'absolute'; els.display = 'block'; var originalWidth = element.clientWidth; var originalHeight = element.clientHeight; els.display = originalDisplay; els.position = originalPosition; els.visibility = originalVisibility; return {width: originalWidth, height: originalHeight}; }, makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; // Opera returns the offset relative to the positioning context, when an // element is position relative but top and left have not been defined if (window.opera) { element.style.top = 0; element.style.left = 0; } } return element; }, undoPositioned: function(element) { element = $(element); if (element._madePositioned) { element._madePositioned = undefined; element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; } return element; }, makeClipping: function(element) { element = $(element); if (element._overflow) return element; element._overflow = element.style.overflow || 'auto'; if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') element.style.overflow = 'hidden'; return element; }, undoClipping: function(element) { element = $(element); if (!element._overflow) return element; element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; element._overflow = null; return element; } }; Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); Element._attributeTranslations = {}; Element._attributeTranslations.names = { colspan: "colSpan", rowspan: "rowSpan", valign: "vAlign", datetime: "dateTime", accesskey: "accessKey", tabindex: "tabIndex", enctype: "encType", maxlength: "maxLength", readonly: "readOnly", longdesc: "longDesc" }; Element._attributeTranslations.values = { _getAttr: function(element, attribute) { return element.getAttribute(attribute, 2); }, _flag: function(element, attribute) { return $(element).hasAttribute(attribute) ? attribute : null; }, style: function(element) { return element.style.cssText.toLowerCase(); }, title: function(element) { var node = element.getAttributeNode('title'); return node.specified ? node.nodeValue : null; } }; Object.extend(Element._attributeTranslations.values, { href: Element._attributeTranslations.values._getAttr, src: Element._attributeTranslations.values._getAttr, disabled: Element._attributeTranslations.values._flag, checked: Element._attributeTranslations.values._flag, readonly: Element._attributeTranslations.values._flag, multiple: Element._attributeTranslations.values._flag }); Element.Methods.Simulated = { hasAttribute: function(element, attribute) { var t = Element._attributeTranslations; attribute = t.names[attribute] || attribute; return $(element).getAttributeNode(attribute).specified; } }; // IE is missing .innerHTML support for TABLE-related elements if (document.all && !window.opera){ Element.Methods.update = function(element, html) { element = $(element); html = typeof html == 'undefined' ? '' : html.toString(); var tagName = element.tagName.toUpperCase(); if (['THEAD','TBODY','TR','TD'].include(tagName)) { var div = document.createElement('div'); switch (tagName) { case 'THEAD': case 'TBODY': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 2; break; case 'TR': div.innerHTML = '' + html.stripScripts() + '
    '; depth = 3; break; case 'TD': div.innerHTML = '
    ' + html.stripScripts() + '
    '; depth = 4; } $A(element.childNodes).each(function(node){ element.removeChild(node) }); depth.times(function(){ div = div.firstChild }); $A(div.childNodes).each( function(node){ element.appendChild(node) }); } else { element.innerHTML = html.stripScripts(); } setTimeout(function() {html.evalScripts()}, 10); return element; } }; Object.extend(Element, Element.Methods); var _nativeExtensions = false; if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { var className = 'HTML' + tag + 'Element'; if(window[className]) return; var klass = window[className] = {}; klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; }); Element.addMethods = function(methods) { Object.extend(Element.Methods, methods || {}); function copy(methods, destination, onlyIfAbsent) { onlyIfAbsent = onlyIfAbsent || false; var cache = Element.extend.cache; for (var property in methods) { var value = methods[property]; if (!onlyIfAbsent || !(property in destination)) destination[property] = cache.findOrStore(value); } } if (typeof HTMLElement != 'undefined') { copy(Element.Methods, HTMLElement.prototype); copy(Element.Methods.Simulated, HTMLElement.prototype, true); copy(Form.Methods, HTMLFormElement.prototype); [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { copy(Form.Element.Methods, klass.prototype); }); _nativeExtensions = true; } } var Toggle = new Object(); Toggle.display = Element.toggle; /*--------------------------------------------------------------------------*/ Abstract.Insertion = function(adjacency) { this.adjacency = adjacency; } Abstract.Insertion.prototype = { initialize: function(element, content) { this.element = $(element); this.content = content.stripScripts(); if (this.adjacency && this.element.insertAdjacentHTML) { try { this.element.insertAdjacentHTML(this.adjacency, this.content); } catch (e) { var tagName = this.element.tagName.toUpperCase(); if (['TBODY', 'TR'].include(tagName)) { this.insertContent(this.contentFromAnonymousTable()); } else { throw e; } } } else { this.range = this.element.ownerDocument.createRange(); if (this.initializeRange) this.initializeRange(); this.insertContent([this.range.createContextualFragment(this.content)]); } setTimeout(function() {content.evalScripts()}, 10); }, contentFromAnonymousTable: function() { var div = document.createElement('div'); div.innerHTML = '' + this.content + '
    '; return $A(div.childNodes[0].childNodes[0].childNodes); } } var Insertion = new Object(); Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element); }).bind(this)); } }); Insertion.Top = Class.create(); Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(true); }, insertContent: function(fragments) { fragments.reverse(false).each((function(fragment) { this.element.insertBefore(fragment, this.element.firstChild); }).bind(this)); } }); Insertion.Bottom = Class.create(); Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { initializeRange: function() { this.range.selectNodeContents(this.element); this.range.collapse(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.appendChild(fragment); }).bind(this)); } }); Insertion.After = Class.create(); Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { initializeRange: function() { this.range.setStartAfter(this.element); }, insertContent: function(fragments) { fragments.each((function(fragment) { this.element.parentNode.insertBefore(fragment, this.element.nextSibling); }).bind(this)); } }); /*--------------------------------------------------------------------------*/ Element.ClassNames = Class.create(); Element.ClassNames.prototype = { initialize: function(element) { this.element = $(element); }, _each: function(iterator) { this.element.className.split(/\s+/).select(function(name) { return name.length > 0; })._each(iterator); }, set: function(className) { this.element.className = className; }, add: function(classNameToAdd) { if (this.include(classNameToAdd)) return; this.set($A(this).concat(classNameToAdd).join(' ')); }, remove: function(classNameToRemove) { if (!this.include(classNameToRemove)) return; this.set($A(this).without(classNameToRemove).join(' ')); }, toString: function() { return $A(this).join(' '); } }; Object.extend(Element.ClassNames.prototype, Enumerable); var Selector = Class.create(); Selector.prototype = { initialize: function(expression) { this.params = {classNames: []}; this.expression = expression.toString().strip(); this.parseExpression(); this.compileMatcher(); }, parseExpression: function() { function abort(message) { throw 'Parse error in selector: ' + message; } if (this.expression == '') abort('empty expression'); var params = this.params, expr = this.expression, match, modifier, clause, rest; while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { params.attributes = params.attributes || []; params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); expr = match[1]; } if (expr == '*') return this.params.wildcard = true; while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { modifier = match[1], clause = match[2], rest = match[3]; switch (modifier) { case '#': params.id = clause; break; case '.': params.classNames.push(clause); break; case '': case undefined: params.tagName = clause.toUpperCase(); break; default: abort(expr.inspect()); } expr = rest; } if (expr.length > 0) abort(expr.inspect()); }, buildMatchExpression: function() { var params = this.params, conditions = [], clause; if (params.wildcard) conditions.push('true'); if (clause = params.id) conditions.push('element.readAttribute("id") == ' + clause.inspect()); if (clause = params.tagName) conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); if ((clause = params.classNames).length > 0) for (var i = 0, length = clause.length; i < length; i++) conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); if (clause = params.attributes) { clause.each(function(attribute) { var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; var splitValueBy = function(delimiter) { return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; } switch (attribute.operator) { case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; case '|=': conditions.push( splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() ); break; case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; case '': case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; default: throw 'Unknown operator ' + attribute.operator + ' in selector'; } }); } return conditions.join(' && '); }, compileMatcher: function() { this.match = new Function('element', 'if (!element.tagName) return false; \ element = $(element); \ return ' + this.buildMatchExpression()); }, findElements: function(scope) { var element; if (element = $(this.params.id)) if (this.match(element)) if (!scope || Element.childOf(element, scope)) return [element]; scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); var results = []; for (var i = 0, length = scope.length; i < length; i++) if (this.match(element = scope[i])) results.push(Element.extend(element)); return results; }, toString: function() { return this.expression; } } Object.extend(Selector, { matchElements: function(elements, expression) { var selector = new Selector(expression); return elements.select(selector.match.bind(selector)).map(Element.extend); }, findElement: function(elements, expression, index) { if (typeof expression == 'number') index = expression, expression = false; return Selector.matchElements(elements, expression || '*')[index || 0]; }, findChildElements: function(element, expressions) { return expressions.map(function(expression) { return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { var selector = new Selector(expr); return results.inject([], function(elements, result) { return elements.concat(selector.findElements(result || element)); }); }); }).flatten(); } }); function $$() { return Selector.findChildElements(document, $A(arguments)); } var Form = { reset: function(form) { $(form).reset(); return form; }, serializeElements: function(elements, getHash) { var data = elements.inject({}, function(result, element) { if (!element.disabled && element.name) { var key = element.name, value = $(element).getValue(); if (value != undefined) { if (result[key]) { if (result[key].constructor != Array) result[key] = [result[key]]; result[key].push(value); } else result[key] = value; } } return result; }); return getHash ? data : Hash.toQueryString(data); } }; Form.Methods = { serialize: function(form, getHash) { return Form.serializeElements(Form.getElements(form), getHash); }, getElements: function(form) { return $A($(form).getElementsByTagName('*')).inject([], function(elements, child) { if (Form.Element.Serializers[child.tagName.toLowerCase()]) elements.push(Element.extend(child)); return elements; } ); }, getInputs: function(form, typeName, name) { form = $(form); var inputs = form.getElementsByTagName('input'); if (!typeName && !name) return $A(inputs).map(Element.extend); for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { var input = inputs[i]; if ((typeName && input.type != typeName) || (name && input.name != name)) continue; matchingInputs.push(Element.extend(input)); } return matchingInputs; }, disable: function(form) { form = $(form); form.getElements().each(function(element) { element.blur(); element.disabled = 'true'; }); return form; }, enable: function(form) { form = $(form); form.getElements().each(function(element) { element.disabled = ''; }); return form; }, findFirstElement: function(form) { return $(form).getElements().find(function(element) { return element.type != 'hidden' && !element.disabled && ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); }); }, focusFirstElement: function(form) { form = $(form); form.findFirstElement().activate(); return form; } } Object.extend(Form, Form.Methods); /*--------------------------------------------------------------------------*/ Form.Element = { focus: function(element) { $(element).focus(); return element; }, select: function(element) { $(element).select(); return element; } } Form.Element.Methods = { serialize: function(element) { element = $(element); if (!element.disabled && element.name) { var value = element.getValue(); if (value != undefined) { var pair = {}; pair[element.name] = value; return Hash.toQueryString(pair); } } return ''; }, getValue: function(element) { element = $(element); var method = element.tagName.toLowerCase(); return Form.Element.Serializers[method](element); }, clear: function(element) { $(element).value = ''; return element; }, present: function(element) { return $(element).value != ''; }, activate: function(element) { element = $(element); element.focus(); if (element.select && ( element.tagName.toLowerCase() != 'input' || !['button', 'reset', 'submit'].include(element.type) ) ) element.select(); return element; }, disable: function(element) { element = $(element); element.disabled = true; return element; }, enable: function(element) { element = $(element); element.blur(); element.disabled = false; return element; } } Object.extend(Form.Element, Form.Element.Methods); var Field = Form.Element; var $F = Form.Element.getValue; /*--------------------------------------------------------------------------*/ Form.Element.Serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': return Form.Element.Serializers.inputSelector(element); default: return Form.Element.Serializers.textarea(element); } }, inputSelector: function(element) { return element.checked ? element.value : null; }, textarea: function(element) { return element.value; }, select: function(element) { return this[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, selectOne: function(element) { var index = element.selectedIndex; return index >= 0 ? this.optionValue(element.options[index]) : null; }, selectMany: function(element) { var values, length = element.length; if (!length) return null; for (var i = 0, values = []; i < length; i++) { var opt = element.options[i]; if (opt.selected) values.push(this.optionValue(opt)); } return values; }, optionValue: function(opt) { // extend element because hasAttribute may not be native return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; } } /*--------------------------------------------------------------------------*/ Abstract.TimedObserver = function() {} Abstract.TimedObserver.prototype = { initialize: function(element, frequency, callback) { this.frequency = frequency; this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); this.registerCallback(); }, registerCallback: function() { setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); }, onTimerEvent: function() { var value = this.getValue(); var changed = ('string' == typeof this.lastValue && 'string' == typeof value ? this.lastValue != value : String(this.lastValue) != String(value)); if (changed) { this.callback(this.element, value); this.lastValue = value; } } } Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.Observer = Class.create(); Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.serialize(this.element); } }); /*--------------------------------------------------------------------------*/ Abstract.EventObserver = function() {} Abstract.EventObserver.prototype = { initialize: function(element, callback) { this.element = $(element); this.callback = callback; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == 'form') this.registerFormCallbacks(); else this.registerCallback(this.element); }, onElementEvent: function() { var value = this.getValue(); if (this.lastValue != value) { this.callback(this.element, value); this.lastValue = value; } }, registerFormCallbacks: function() { Form.getElements(this.element).each(this.registerCallback.bind(this)); }, registerCallback: function(element) { if (element.type) { switch (element.type.toLowerCase()) { case 'checkbox': case 'radio': Event.observe(element, 'click', this.onElementEvent.bind(this)); break; default: Event.observe(element, 'change', this.onElementEvent.bind(this)); break; } } } } Form.Element.EventObserver = Class.create(); Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.Element.getValue(this.element); } }); Form.EventObserver = Class.create(); Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { getValue: function() { return Form.serialize(this.element); } }); if (!window.Event) { var Event = new Object(); } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, KEY_HOME: 36, KEY_END: 35, KEY_PAGEUP: 33, KEY_PAGEDOWN: 34, element: function(event) { return event.target || event.srcElement; }, isLeftClick: function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); }, pointerX: function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }, pointerY: function(event) { return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); }, stop: function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } }, // find the first node with the given tagName, starting from the // node the event was triggered on; traverses the DOM upwards findElement: function(event, tagName) { var element = Event.element(event); while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase()))) element = element.parentNode; return element; }, observers: false, _observeAndCache: function(element, name, observer, useCapture) { if (!this.observers) this.observers = []; if (element.addEventListener) { this.observers.push([element, name, observer, useCapture]); element.addEventListener(name, observer, useCapture); } else if (element.attachEvent) { this.observers.push([element, name, observer, useCapture]); element.attachEvent('on' + name, observer); } }, unloadCache: function() { if (!Event.observers) return; for (var i = 0, length = Event.observers.length; i < length; i++) { Event.stopObserving.apply(this, Event.observers[i]); Event.observers[i][0] = null; } Event.observers = false; }, observe: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) name = 'keydown'; Event._observeAndCache(element, name, observer, useCapture); }, stopObserving: function(element, name, observer, useCapture) { element = $(element); useCapture = useCapture || false; if (name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.detachEvent)) name = 'keydown'; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { try { element.detachEvent('on' + name, observer); } catch (e) {} } } }); /* prevent memory leaks in IE */ if (navigator.appVersion.match(/\bMSIE\b/)) Event.observe(window, 'unload', Event.unloadCache, false); var Position = { // set to true if needed, warning: firefox performance problems // NOT neeeded for page scrolling, only if draggable contained in // scrollable elements includeScrollOffsets: false, // must be called before calling withinIncludingScrolloffset, every time the // page is scrolled prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; }, realOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; element = element.parentNode; } while (element); return [valueL, valueT]; }, cumulativeOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; } while (element); return [valueL, valueT]; }, positionedOffset: function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; element = element.offsetParent; if (element) { if(element.tagName=='BODY') break; var p = Element.getStyle(element, 'position'); if (p == 'relative' || p == 'absolute') break; } } while (element); return [valueL, valueT]; }, offsetParent: function(element) { if (element.offsetParent) return element.offsetParent; if (element == document.body) return element; while ((element = element.parentNode) && element != document.body) if (Element.getStyle(element, 'position') != 'static') return element; return document.body; }, // caches x/y coordinate pair to use with overlap within: function(element, x, y) { if (this.includeScrollOffsets) return this.withinIncludingScrolloffsets(element, x, y); this.xcomp = x; this.ycomp = y; this.offset = this.cumulativeOffset(element); return (y >= this.offset[1] && y < this.offset[1] + element.offsetHeight && x >= this.offset[0] && x < this.offset[0] + element.offsetWidth); }, withinIncludingScrolloffsets: function(element, x, y) { var offsetcache = this.realOffset(element); this.xcomp = x + offsetcache[0] - this.deltaX; this.ycomp = y + offsetcache[1] - this.deltaY; this.offset = this.cumulativeOffset(element); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + element.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + element.offsetWidth); }, // within must be called directly before overlap: function(mode, element) { if (!mode) return 0; if (mode == 'vertical') return ((this.offset[1] + element.offsetHeight) - this.ycomp) / element.offsetHeight; if (mode == 'horizontal') return ((this.offset[0] + element.offsetWidth) - this.xcomp) / element.offsetWidth; }, page: function(forElement) { var valueT = 0, valueL = 0; var element = forElement; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; // Safari fix if (element.offsetParent==document.body) if (Element.getStyle(element,'position')=='absolute') break; } while (element = element.offsetParent); element = forElement; do { if (!window.opera || element.tagName=='BODY') { valueT -= element.scrollTop || 0; valueL -= element.scrollLeft || 0; } } while (element = element.parentNode); return [valueL, valueT]; }, clone: function(source, target) { var options = Object.extend({ setLeft: true, setTop: true, setWidth: true, setHeight: true, offsetTop: 0, offsetLeft: 0 }, arguments[2] || {}) // find page position of source source = $(source); var p = Position.page(source); // find coordinate system to use target = $(target); var delta = [0, 0]; var parent = null; // delta [0,0] will do fine with position: fixed elements, // position:absolute needs offsetParent deltas if (Element.getStyle(target,'position') == 'absolute') { parent = Position.offsetParent(target); delta = Position.page(parent); } // correct by body offsets (fixes Safari) if (parent == document.body) { delta[0] -= document.body.offsetLeft; delta[1] -= document.body.offsetTop; } // set position if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; if(options.setWidth) target.style.width = source.offsetWidth + 'px'; if(options.setHeight) target.style.height = source.offsetHeight + 'px'; }, absolutize: function(element) { element = $(element); if (element.style.position == 'absolute') return; Position.prepare(); var offsets = Position.positionedOffset(element); var top = offsets[1]; var left = offsets[0]; var width = element.clientWidth; var height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); element._originalWidth = element.style.width; element._originalHeight = element.style.height; element.style.position = 'absolute'; element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.width = width + 'px'; element.style.height = height + 'px'; }, relativize: function(element) { element = $(element); if (element.style.position == 'relative') return; Position.prepare(); element.style.position = 'relative'; var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.height = element._originalHeight; element.style.width = element._originalWidth; } } // Safari returns margins on body which is incorrect if the child is absolutely // positioned. For performance reasons, redefine Position.cumulativeOffset for // KHTML/WebKit only. if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { Position.cumulativeOffset = function(element) { var valueT = 0, valueL = 0; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; if (element.offsetParent == document.body) if (Element.getStyle(element, 'position') == 'absolute') break; element = element.offsetParent; } while (element); return [valueL, valueT]; } } Element.addMethods();=wordpress/wp-includes/js/.svn/text-base/quicktags.js.svn-base%// new edit toolbar used with permission // by Alex King // http://www.alexking.org/ var edButtons = new Array(); var edLinks = new Array(); var edOpenTags = new Array(); function edButton(id, display, tagStart, tagEnd, access, open) { this.id = id; // used to name the toolbar button this.display = display; // label on button this.tagStart = tagStart; // open tag this.tagEnd = tagEnd; // close tag this.access = access; // access key this.open = open; // set to -1 if tag does not need to be closed } function zeroise(number, threshold) { // FIXME: or we could use an implementation of printf in js here var str = number.toString(); if (number < 0) { str = str.substr(1, str.length) } while (str.length < threshold) { str = "0" + str } if (number < 0) { str = '-' + str } return str; } var now = new Date(); var datetime = now.getUTCFullYear() + '-' + zeroise(now.getUTCMonth() + 1, 2) + '-' + zeroise(now.getUTCDate(), 2) + 'T' + zeroise(now.getUTCHours(), 2) + ':' + zeroise(now.getUTCMinutes(), 2) + ':' + zeroise(now.getUTCSeconds() ,2) + '+00:00'; edButtons[edButtons.length] = new edButton('ed_strong' ,'b' ,'' ,'' ,'b' ); edButtons[edButtons.length] = new edButton('ed_em' ,'i' ,'' ,'' ,'i' ); edButtons[edButtons.length] = new edButton('ed_link' ,'link' ,'' ,'' ,'a' ); // special case edButtons[edButtons.length] = new edButton('ed_block' ,'b-quote' ,'\n\n
    ' ,'
    \n\n' ,'q' ); edButtons[edButtons.length] = new edButton('ed_del' ,'del' ,'' ,'' ,'d' ); edButtons[edButtons.length] = new edButton('ed_ins' ,'ins' ,'' ,'' ,'s' ); edButtons[edButtons.length] = new edButton('ed_img' ,'img' ,'' ,'' ,'m' ,-1 ); // special case edButtons[edButtons.length] = new edButton('ed_ul' ,'ul' ,'
      \n' ,'
    \n\n' ,'u' ); edButtons[edButtons.length] = new edButton('ed_ol' ,'ol' ,'
      \n' ,'
    \n\n' ,'o' ); edButtons[edButtons.length] = new edButton('ed_li' ,'li' ,'\t
  • ' ,'
  • \n' ,'l' ); edButtons[edButtons.length] = new edButton('ed_code' ,'code' ,'' ,'' ,'c' ); edButtons[edButtons.length] = new edButton('ed_more' ,'more' ,'' ,'' ,'t' ,-1 ); /* edButtons[edButtons.length] = new edButton('ed_next' ,'page' ,'' ,'' ,'p' ,-1 ); */ function edLink() { this.display = ''; this.URL = ''; this.newWin = 0; } edLinks[edLinks.length] = new edLink('WordPress' ,'http://wordpress.org/' ); edLinks[edLinks.length] = new edLink('alexking.org' ,'http://www.alexking.org/' ); function edShowButton(button, i) { if (button.id == 'ed_img') { document.write(''); } else if (button.id == 'ed_link') { document.write(''); } else { document.write(''); } } function edShowLinks() { var tempStr = ''; document.write(tempStr); } function edAddTag(button) { if (edButtons[button].tagEnd != '') { edOpenTags[edOpenTags.length] = button; document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value; } } function edRemoveTag(button) { for (i = 0; i < edOpenTags.length; i++) { if (edOpenTags[i] == button) { edOpenTags.splice(i, 1); document.getElementById(edButtons[button].id).value = document.getElementById(edButtons[button].id).value.replace('/', ''); } } } function edCheckOpenTags(button) { var tag = 0; for (i = 0; i < edOpenTags.length; i++) { if (edOpenTags[i] == button) { tag++; } } if (tag > 0) { return true; // tag found } else { return false; // tag not found } } function edCloseAllTags() { var count = edOpenTags.length; for (o = 0; o < count; o++) { edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]); } } function edQuickLink(i, thisSelect) { if (i > -1) { var newWin = ''; if (edLinks[i].newWin == 1) { newWin = ' target="_blank"'; } var tempStr = '' + edLinks[i].display + ''; thisSelect.selectedIndex = 0; edInsertContent(edCanvas, tempStr); } else { thisSelect.selectedIndex = 0; } } function edSpell(myField) { var word = ''; if (document.selection) { myField.focus(); var sel = document.selection.createRange(); if (sel.text.length > 0) { word = sel.text; } } else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; if (startPos != endPos) { word = myField.value.substring(startPos, endPos); } } if (word == '') { word = prompt(quicktagsL10n.wordLookup, ''); } if (word !== null && /^\w[\w ]*$/.test(word)) { window.open('http://www.answers.com/' + escape(word)); } } function edToolbar() { document.write('
    '); for (i = 0; i < edButtons.length; i++) { edShowButton(edButtons[i], i); } document.write(''); document.write(''); // edShowLinks(); // disabled by default document.write('
    '); } // insertion code function edInsertTag(myField, i) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); if (sel.text.length > 0) { sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd; } else { if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') { sel.text = edButtons[i].tagStart; edAddTag(i); } else { sel.text = edButtons[i].tagEnd; edRemoveTag(i); } } myField.focus(); } //MOZILLA/NETSCAPE support else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; var cursorPos = endPos; var scrollTop = myField.scrollTop; if (startPos != endPos) { myField.value = myField.value.substring(0, startPos) + edButtons[i].tagStart + myField.value.substring(startPos, endPos) + edButtons[i].tagEnd + myField.value.substring(endPos, myField.value.length); cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length; } else { if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') { myField.value = myField.value.substring(0, startPos) + edButtons[i].tagStart + myField.value.substring(endPos, myField.value.length); edAddTag(i); cursorPos = startPos + edButtons[i].tagStart.length; } else { myField.value = myField.value.substring(0, startPos) + edButtons[i].tagEnd + myField.value.substring(endPos, myField.value.length); edRemoveTag(i); cursorPos = startPos + edButtons[i].tagEnd.length; } } myField.focus(); myField.selectionStart = cursorPos; myField.selectionEnd = cursorPos; myField.scrollTop = scrollTop; } else { if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') { myField.value += edButtons[i].tagStart; edAddTag(i); } else { myField.value += edButtons[i].tagEnd; edRemoveTag(i); } myField.focus(); } } function edInsertContent(myField, myValue) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; myField.focus(); } //MOZILLA/NETSCAPE support else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); myField.focus(); myField.selectionStart = startPos + myValue.length; myField.selectionEnd = startPos + myValue.length; } else { myField.value += myValue; myField.focus(); } } function edInsertLink(myField, i, defaultValue) { if (!defaultValue) { defaultValue = 'http://'; } if (!edCheckOpenTags(i)) { var URL = prompt(quicktagsL10n.enterURL, defaultValue); if (URL) { edButtons[i].tagStart = ''; edInsertTag(myField, i); } } else { edInsertTag(myField, i); } } function edInsertImage(myField) { var myValue = prompt(quicktagsL10n.enterImageURL, 'http://'); if (myValue) { myValue = '' + prompt(quicktagsL10n.enterImageDescription, '') 
				+ ''; edInsertContent(myField, myValue); } } ;wordpress/wp-includes/js/.svn/text-base/tw-sack.js.svn-basei/* Simple AJAX Code-Kit (SACK) v1.6.1 */ /* 2005 Gregory Wild-Smith */ /* www.twilightuniverse.com */ /* Software licenced under a modified X11 licence, see documentation or authors website for more details */ function sack(file) { this.xmlhttp = null; this.resetData = function() { this.method = "POST"; this.queryStringSeparator = "?"; this.argumentSeparator = "&"; this.URLString = ""; this.encodeURIString = true; this.execute = false; this.element = null; this.elementObj = null; this.requestFile = file; this.vars = new Object(); this.responseStatus = new Array(2); }; this.resetFunctions = function() { this.onLoading = function() { }; this.onLoaded = function() { }; this.onInteractive = function() { }; this.onCompletion = function() { }; this.onError = function() { }; this.onFail = function() { }; }; this.reset = function() { this.resetFunctions(); this.resetData(); }; this.createAJAX = function() { try { this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { this.xmlhttp = null; } } if (! this.xmlhttp) { if (typeof XMLHttpRequest != "undefined") { this.xmlhttp = new XMLHttpRequest(); } else { this.failed = true; } } }; this.setVar = function(name, value){ this.vars[name] = Array(value, false); }; this.encVar = function(name, value, returnvars) { if (true == returnvars) { return Array(encodeURIComponent(name), encodeURIComponent(value)); } else { this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true); } } this.processURLString = function(string, encode) { encoded = encodeURIComponent(this.argumentSeparator); regexp = new RegExp(this.argumentSeparator + "|" + encoded); varArray = string.split(regexp); for (i = 0; i < varArray.length; i++){ urlVars = varArray[i].split("="); if (true == encode){ this.encVar(urlVars[0], urlVars[1]); } else { this.setVar(urlVars[0], urlVars[1]); } } } this.createURLString = function(urlstring) { if (this.encodeURIString && this.URLString.length) { this.processURLString(this.URLString, true); } if (urlstring) { if (this.URLString.length) { this.URLString += this.argumentSeparator + urlstring; } else { this.URLString = urlstring; } } // prevents caching of URLString this.setVar("rndval", new Date().getTime()); urlstringtemp = new Array(); for (key in this.vars) { if (false == this.vars[key][1] && true == this.encodeURIString) { encoded = this.encVar(key, this.vars[key][0], true); delete this.vars[key]; this.vars[encoded[0]] = Array(encoded[1], true); key = encoded[0]; } urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0]; } if (urlstring){ this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator); } else { this.URLString += urlstringtemp.join(this.argumentSeparator); } } this.runResponse = function() { eval(this.response); } this.runAJAX = function(urlstring) { if (this.failed) { this.onFail(); } else { this.createURLString(urlstring); if (this.element) { this.elementObj = document.getElementById(this.element); } if (this.xmlhttp) { var self = this; if (this.method == "GET") { totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString; this.xmlhttp.open(this.method, totalurlstring, true); } else { this.xmlhttp.open(this.method, this.requestFile, true); try { this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") } catch (e) { } } this.xmlhttp.onreadystatechange = function() { switch (self.xmlhttp.readyState) { case 1: self.onLoading(); break; case 2: self.onLoaded(); break; case 3: self.onInteractive(); break; case 4: self.response = self.xmlhttp.responseText; self.responseXML = self.xmlhttp.responseXML; self.responseStatus[0] = self.xmlhttp.status; self.responseStatus[1] = self.xmlhttp.statusText; if (self.execute) { self.runResponse(); } if (self.elementObj) { elemNodeName = self.elementObj.nodeName; elemNodeName.toLowerCase(); if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea") { self.elementObj.value = self.response; } else { self.elementObj.innerHTML = self.response; } } if (self.responseStatus[0] == "200") { self.onCompletion(); } else { self.onError(); } self.URLString = ""; break; } }; this.xmlhttp.send(this.URLString); } } }; this.reset(); this.createAJAX(); } ;wordpress/wp-includes/js/.svn/text-base/wp-ajax.js.svn-base"var WPAjax = Class.create(); Object.extend(WPAjax.prototype, Ajax.Request.prototype); Object.extend(WPAjax.prototype, { WPComplete: false, // onComplete function WPError: false, // onWPError function defaultUrl: '', // We get these from WPAjaxL10n permText: '', strangeText: '', whoaText: '', initialize: function(url, responseEl) { var tempObj = this; this.transport = Ajax.getTransport(); if ( !this.transport ) return false; this.setOptions( { parameters: 'cookie=' + encodeURIComponent(document.cookie), onComplete: function(transport) { // transport = XMLHttpRequest object if ( tempObj.parseAjaxResponse() ) { if ( 'function' == typeof tempObj.WPComplete ) tempObj.WPComplete(transport); } else if ( 'function' == typeof tempObj.WPError ) // if response corresponds to an error (bad data, say, not 404) tempObj.WPError(transport); } }); this.url = url ? url : this.defaultUrl; this.getResponseElement(responseEl); }, addArg: function(key, value) { var a = $H(); a[encodeURIComponent(key)] = encodeURIComponent(value); this.options.parameters = $H(this.options.parameters).merge(a); }, getResponseElement: function(r) { var p = $(r + '-p'); if ( !p ) { new Insertion.Bottom(r, ""); var p = $(r + '-p'); } this.myResponseElement = p; }, parseAjaxResponse: function() { // 1 = good, 0 = strange (bad data?), -1 = you lack permission if ( this.transport.responseXML && typeof this.transport.responseXML == 'object' && ( this.transport.responseXML.xml || 'undefined' == typeof this.transport.responseXML.xml ) ) { var err = this.transport.responseXML.getElementsByTagName('wp_error'); if ( err[0] ) { var msg = $A(err).inject( '', function(a, b) { return a + '

    ' + b.firstChild.nodeValue + '

    '; } ); Element.update(this.myResponseElement,'
    ' + msg + '
    '); return false; } return true; } var r = this.transport.responseText; if ( isNaN(r) ) { Element.update(this.myResponseElement,'

    ' + r + '

    '); return false; } var r = parseInt(r,10); if ( -1 == r ) { Element.update(this.myResponseElement,"

    " + this.permText + "

    "); return false; } else if ( 0 == r ) { Element.update(this.myResponseElement,"

    " + this.strangeText + "

    "); return false; } return true; }, addOnComplete: function(f) { if ( 'function' == typeof f ) { var of = this.WPComplete; this.WPComplete = function(t) { if ( of ) of(t); f(t); } } }, addOnWPError: function(f) { if ( 'function' == typeof f ) { var of = this.WPError; this.WPError = function(t) { if ( of ) of(t); f(t); } } }, notInitialized: function() { return this.transport ? false : true; } }); Event.observe( window, 'load', function() { Object.extend(WPAjax.prototype, WPAjaxL10n); }, false ) Ajax.activeSendCount = 0; Ajax.Responders.register( { onCreate: function() { Ajax.activeSendCount++; if ( 1 != Ajax.activeSendCount ) return; wpBeforeUnload = window.onbeforeunload; window.onbeforeunload = function() { return WPAjax.whoaText; } }, onLoading: function() { // Can switch to onLoaded if we lose data Ajax.activeSendCount--; if ( 0 != Ajax.activeSendCount ) return; window.onbeforeunload = wpBeforeUnload; } }); //Pretty func adapted from ALA http://www.alistapart.com/articles/gettingstartedwithajax function getNodeValue(tree,el){try { var r = tree.getElementsByTagName(el)[0].firstChild.nodeValue; } catch(err) { var r = null; } return r; } *wordpress/wp-includes/js/tinymce/blank.htm blank_page ,wordpress/wp-includes/js/tinymce/langs/en.jsI// UK lang variables tinyMCE.addToLang('',{ bold_desc : 'Bold (Ctrl+B)', italic_desc : 'Italic (Ctrl+I)', underline_desc : 'Underline (Ctrl+U)', striketrough_desc : 'Strikethrough', justifyleft_desc : 'Align left', justifycenter_desc : 'Align center', justifyright_desc : 'Align right', justifyfull_desc : 'Align full', bullist_desc : 'Unordered list', numlist_desc : 'Ordered list', outdent_desc : 'Outdent', indent_desc : 'Indent', undo_desc : 'Undo (Ctrl+Z)', redo_desc : 'Redo (Ctrl+Y)', link_desc : 'Insert/edit link', unlink_desc : 'Unlink', image_desc : 'Insert/edit image', cleanup_desc : 'Cleanup messy code', focus_alert : 'A editor instance must be focused before using this command.', edit_confirm : 'Do you want to use the WYSIWYG mode for this textarea?', insert_link_title : 'Insert/edit link', insert : 'Insert', update : 'Update', cancel : 'Cancel', insert_link_url : 'Link URL', insert_link_target : 'Target', insert_link_target_same : 'Open link in the same window', insert_link_target_blank : 'Open link in a new window', insert_image_title : 'Insert/edit image', insert_image_src : 'Image URL', insert_image_alt : 'Image description', help_desc : 'Help', bold_img : "bold.gif", italic_img : "italic.gif", underline_img : "underline.gif", clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', popup_blocked : 'Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.' }); 3wordpress/wp-includes/js/tinymce/langs/.svn/entriesp8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/langs svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 en.js file 2008-11-20T16:30:30.000000Z a9c67a04e2d5c8f05b35256746c1547b 2008-10-28T18:17:06.112729Z 97 paul 2wordpress/wp-includes/js/tinymce/langs/.svn/format8 Dwordpress/wp-includes/js/tinymce/langs/.svn/text-base/en.js.svn-baseI// UK lang variables tinyMCE.addToLang('',{ bold_desc : 'Bold (Ctrl+B)', italic_desc : 'Italic (Ctrl+I)', underline_desc : 'Underline (Ctrl+U)', striketrough_desc : 'Strikethrough', justifyleft_desc : 'Align left', justifycenter_desc : 'Align center', justifyright_desc : 'Align right', justifyfull_desc : 'Align full', bullist_desc : 'Unordered list', numlist_desc : 'Ordered list', outdent_desc : 'Outdent', indent_desc : 'Indent', undo_desc : 'Undo (Ctrl+Z)', redo_desc : 'Redo (Ctrl+Y)', link_desc : 'Insert/edit link', unlink_desc : 'Unlink', image_desc : 'Insert/edit image', cleanup_desc : 'Cleanup messy code', focus_alert : 'A editor instance must be focused before using this command.', edit_confirm : 'Do you want to use the WYSIWYG mode for this textarea?', insert_link_title : 'Insert/edit link', insert : 'Insert', update : 'Update', cancel : 'Cancel', insert_link_url : 'Link URL', insert_link_target : 'Target', insert_link_target_same : 'Open link in the same window', insert_link_target_blank : 'Open link in a new window', insert_image_title : 'Insert/edit image', insert_image_src : 'Image URL', insert_image_alt : 'Image description', help_desc : 'Help', bold_img : "bold.gif", italic_img : "italic.gif", underline_img : "underline.gif", clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', popup_blocked : 'Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.' }); -wordpress/wp-includes/js/tinymce/license.html_ TinyMCE License (LGPL)

    TinyMCE License (LGPL)

    Visit the FAQ for general answers surrounding TinyMCE. Or visit http://www.fsf.org for more information about Open-Source licenses.

    		  GNU LIBRARY GENERAL PUBLIC LICENSE
    		       Version 2, June 1991
    
     Copyright (C) 1991 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.
    
    [This is the first released version of the library GPL.  It is
     numbered 2 because it goes with version 2 of the ordinary GPL.]
    
    			    Preamble
    
      The licenses for most software are designed to take away your
    freedom to share and change it.  By contrast, the GNU General Public
    Licenses are intended to guarantee your freedom to share and change
    free software--to make sure the software is free for all its users.
    
      This license, the Library General Public License, applies to some
    specially designated Free Software Foundation software, and to any
    other libraries whose authors decide to use it.  You can use it for
    your libraries, 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 library, or if you modify it.
    
      For example, if you distribute copies of the library, whether gratis
    or for a fee, you must give the recipients all the rights that we gave
    you.  You must make sure that they, too, receive or can get the source
    code.  If you link a program with the library, you must provide
    complete object files to the recipients so that they can relink them
    with the library, after making changes to the library and recompiling
    it.  And you must show them these terms so they know their rights.
    
      Our method of protecting your rights has two steps: (1) copyright
    the library, and (2) offer you this license which gives you legal
    permission to copy, distribute and/or modify the library.
    
      Also, for each distributor's protection, we want to make certain
    that everyone understands that there is no warranty for this free
    library.  If the library is modified by someone else and passed on, we
    want its recipients to know that what they have is not the original
    version, 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 companies distributing free
    software will individually obtain patent licenses, thus in effect
    transforming the program into proprietary software.  To prevent this,
    we have made it clear that any patent must be licensed for everyone's
    free use or not licensed at all.
    
      Most GNU software, including some libraries, is covered by the ordinary
    GNU General Public License, which was designed for utility programs.  This
    license, the GNU Library General Public License, applies to certain
    designated libraries.  This license is quite different from the ordinary
    one; be sure to read it in full, and don't assume that anything in it is
    the same as in the ordinary license.
    
      The reason we have a separate public license for some libraries is that
    they blur the distinction we usually make between modifying or adding to a
    program and simply using it.  Linking a program with a library, without
    changing the library, is in some sense simply using the library, and is
    analogous to running a utility program or application program.  However, in
    a textual and legal sense, the linked executable is a combined work, a
    derivative of the original library, and the ordinary General Public License
    treats it as such.
    
      Because of this blurred distinction, using the ordinary General
    Public License for libraries did not effectively promote software
    sharing, because most developers did not use the libraries.  We
    concluded that weaker conditions might promote sharing better.
    
      However, unrestricted linking of non-free programs would deprive the
    users of those programs of all benefit from the free status of the
    libraries themselves.  This Library General Public License is intended to
    permit developers of non-free programs to use free libraries, while
    preserving your freedom as a user of such programs to change the free
    libraries that are incorporated in them.  (We have not seen how to achieve
    this as regards changes in header files, but we have achieved it as regards
    changes in the actual functions of the Library.)  The hope is that this
    will lead to faster development of free libraries.
    
      The precise terms and conditions for copying, distribution and
    modification follow.  Pay close attention to the difference between a
    "work based on the library" and a "work that uses the library".  The
    former contains code derived from the library, while the latter only
    works together with the library.
    
      Note that it is possible for a library to be covered by the ordinary
    General Public License rather than by this special one.
    .
    		  GNU LIBRARY GENERAL PUBLIC LICENSE
       TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    
      0. This License Agreement applies to any software library which
    contains a notice placed by the copyright holder or other authorized
    party saying it may be distributed under the terms of this Library
    General Public License (also called "this License").  Each licensee is
    addressed as "you".
    
      A "library" means a collection of software functions and/or data
    prepared so as to be conveniently linked with application programs
    (which use some of those functions and data) to form executables.
    
      The "Library", below, refers to any such software library or work
    which has been distributed under these terms.  A "work based on the
    Library" means either the Library or any derivative work under
    copyright law: that is to say, a work containing the Library or a
    portion of it, either verbatim or with modifications and/or translated
    straightforwardly into another language.  (Hereinafter, translation is
    included without limitation in the term "modification".)
    
      "Source code" for a work means the preferred form of the work for
    making modifications to it.  For a library, 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 library.
    
      Activities other than copying, distribution and modification are not
    covered by this License; they are outside its scope.  The act of
    running a program using the Library is not restricted, and output from
    such a program is covered only if its contents constitute a work based
    on the Library (independent of the use of the Library in a tool for
    writing it).  Whether that is true depends on what the Library does
    and what the program that uses the Library does.
      
      1. You may copy and distribute verbatim copies of the Library's
    complete 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 distribute a copy of this License along with the
    Library.
    
      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 Library or any portion
    of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
    
        b) You must cause the files modified to carry prominent notices
        stating that you changed the files and the date of any change.
    
        c) You must cause the whole of the work to be licensed at no
        charge to all third parties under the terms of this License.
    
        d) If a facility in the modified Library refers to a function or a
        table of data to be supplied by an application program that uses
        the facility, other than as an argument passed when the facility
        is invoked, then you must make a good faith effort to ensure that,
        in the event an application does not supply such function or
        table, the facility still operates, and performs whatever part of
        its purpose remains meaningful.
    
        (For example, a function in a library to compute square roots has
        a purpose that is entirely well-defined independent of the
        application.  Therefore, Subsection 2d requires that any
        application-supplied function or table used by this function must
        be optional: if the application does not supply it, the square
        root function must still compute square roots.)
    
    These requirements apply to the modified work as a whole.  If
    identifiable sections of that work are not derived from the Library,
    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 Library, 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 Library.
    
    In addition, mere aggregation of another work not based on the Library
    with the Library (or with a work based on the Library) on a volume of
    a storage or distribution medium does not bring the other work under
    the scope of this License.
    
      3. You may opt to apply the terms of the ordinary GNU General Public
    License instead of this License to a given copy of the Library.  To do
    this, you must alter all the notices that refer to this License, so
    that they refer to the ordinary GNU General Public License, version 2,
    instead of to this License.  (If a newer version than version 2 of the
    ordinary GNU General Public License has appeared, then you can specify
    that version instead if you wish.)  Do not make any other change in
    these notices.
    .
      Once this change is made in a given copy, it is irreversible for
    that copy, so the ordinary GNU General Public License applies to all
    subsequent copies and derivative works made from that copy.
    
      This option is useful when you wish to copy part of the code of
    the Library into a program that is not a library.
    
      4. You may copy and distribute the Library (or a portion or
    derivative of it, under Section 2) in object code or executable form
    under the terms of Sections 1 and 2 above provided that you 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.
    
      If distribution of 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 satisfies the requirement to
    distribute the source code, even though third parties are not
    compelled to copy the source along with the object code.
    
      5. A program that contains no derivative of any portion of the
    Library, but is designed to work with the Library by being compiled or
    linked with it, is called a "work that uses the Library".  Such a
    work, in isolation, is not a derivative work of the Library, and
    therefore falls outside the scope of this License.
    
      However, linking a "work that uses the Library" with the Library
    creates an executable that is a derivative of the Library (because it
    contains portions of the Library), rather than a "work that uses the
    library".  The executable is therefore covered by this License.
    Section 6 states terms for distribution of such executables.
    
      When a "work that uses the Library" uses material from a header file
    that is part of the Library, the object code for the work may be a
    derivative work of the Library even though the source code is not.
    Whether this is true is especially significant if the work can be
    linked without the Library, or if the work is itself a library.  The
    threshold for this to be true is not precisely defined by law.
    
      If such an object file uses only numerical parameters, data
    structure layouts and accessors, and small macros and small inline
    functions (ten lines or less in length), then the use of the object
    file is unrestricted, regardless of whether it is legally a derivative
    work.  (Executables containing this object code plus portions of the
    Library will still fall under Section 6.)
    
      Otherwise, if the work is a derivative of the Library, you may
    distribute the object code for the work under the terms of Section 6.
    Any executables containing that work also fall under Section 6,
    whether or not they are linked directly with the Library itself.
    .
      6. As an exception to the Sections above, you may also compile or
    link a "work that uses the Library" with the Library to produce a
    work containing portions of the Library, and distribute that work
    under terms of your choice, provided that the terms permit
    modification of the work for the customer's own use and reverse
    engineering for debugging such modifications.
    
      You must give prominent notice with each copy of the work that the
    Library is used in it and that the Library and its use are covered by
    this License.  You must supply a copy of this License.  If the work
    during execution displays copyright notices, you must include the
    copyright notice for the Library among them, as well as a reference
    directing the user to the copy of this License.  Also, you must do one
    of these things:
    
        a) Accompany the work with the complete corresponding
        machine-readable source code for the Library including whatever
        changes were used in the work (which must be distributed under
        Sections 1 and 2 above); and, if the work is an executable linked
        with the Library, with the complete machine-readable "work that
        uses the Library", as object code and/or source code, so that the
        user can modify the Library and then relink to produce a modified
        executable containing the modified Library.  (It is understood
        that the user who changes the contents of definitions files in the
        Library will not necessarily be able to recompile the application
        to use the modified definitions.)
    
        b) Accompany the work with a written offer, valid for at
        least three years, to give the same user the materials
        specified in Subsection 6a, above, for a charge no more
        than the cost of performing this distribution.
    
        c) If distribution of the work is made by offering access to copy
        from a designated place, offer equivalent access to copy the above
        specified materials from the same place.
    
        d) Verify that the user has already received a copy of these
        materials or that you have already sent this user a copy.
    
      For an executable, the required form of the "work that uses the
    Library" must include any data and utility programs needed for
    reproducing the executable from it.  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.
    
      It may happen that this requirement contradicts the license
    restrictions of other proprietary libraries that do not normally
    accompany the operating system.  Such a contradiction means you cannot
    use both them and the Library together in an executable that you
    distribute.
    .
      7. You may place library facilities that are a work based on the
    Library side-by-side in a single library together with other library
    facilities not covered by this License, and distribute such a combined
    library, provided that the separate distribution of the work based on
    the Library and of the other library facilities is otherwise
    permitted, and provided that you do these two things:
    
        a) Accompany the combined library with a copy of the same work
        based on the Library, uncombined with any other library
        facilities.  This must be distributed under the terms of the
        Sections above.
    
        b) Give prominent notice with the combined library of the fact
        that part of it is a work based on the Library, and explaining
        where to find the accompanying uncombined form of the same work.
    
      8. You may not copy, modify, sublicense, link with, or distribute
    the Library except as expressly provided under this License.  Any
    attempt otherwise to copy, modify, sublicense, link with, or
    distribute the Library is void, and will automatically terminate your
    rights under this License.  However, parties who have received copies,
    or rights, from you under this License will not have their licenses
    terminated so long as such parties remain in full compliance.
    
      9. 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 Library or its derivative works.  These actions are
    prohibited by law if you do not accept this License.  Therefore, by
    modifying or distributing the Library (or any work based on the
    Library), you indicate your acceptance of this License to do so, and
    all its terms and conditions for copying, distributing or modifying
    the Library or works based on it.
    
      10. Each time you redistribute the Library (or any work based on the
    Library), the recipient automatically receives a license from the
    original licensor to copy, distribute, link with or modify the Library
    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.
    .
      11. 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 Library at all.  For example, if a patent
    license would not permit royalty-free redistribution of the Library 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 Library.
    
    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.
    
      12. If the distribution and/or use of the Library is restricted in
    certain countries either by patents or by copyrighted interfaces, the
    original copyright holder who places the Library 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.
    
      13. The Free Software Foundation may publish revised and/or new
    versions of the Library 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 Library
    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 Library does not specify a
    license version number, you may choose any version ever published by
    the Free Software Foundation.
    .
      14. If you wish to incorporate parts of the Library into other free
    programs whose distribution conditions are incompatible with these,
    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
    
      15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    OTHER PARTIES PROVIDE THE LIBRARY "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
    LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    
      16. 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 LIBRARY 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
    LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    DAMAGES.
    
    		     END OF TERMS AND CONDITIONS
    
    ,wordpress/wp-includes/js/tinymce/license.txti3 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! Bwordpress/wp-includes/js/tinymce/plugins/autosave/editor_plugin.jsY/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('autosave'); var TinyMCE_AutoSavePlugin = { getInfo : function() { return { longname : 'Auto save', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, // Private plugin internal methods _beforeUnloadHandler : function() { var n, inst, anyDirty = false, msg = tinyMCE.getLang("lang_autosave_unload_msg"); if (tinyMCE.getParam("fullscreen_is_enabled")) return; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; if (inst.isDirty()) return msg; } return; } }; window.onbeforeunload = TinyMCE_AutoSavePlugin._beforeUnloadHandler; tinyMCE.addPlugin("autosave", TinyMCE_AutoSavePlugin); Fwordpress/wp-includes/js/tinymce/plugins/autosave/editor_plugin_src.js1/* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('autosave', 'en,sv,cs,he,no,hu,de,da,ru,ru_KOI8-R,ru_UTF-8,fi,cy,es,is,pl'); function TinyMCE_autosave_getInfo() { return { longname : 'Auto save', author : 'Moxiecode Systems', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_autosave.html', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }; function TinyMCE_autosave_beforeUnloadHandler() { var msg = tinyMCE.getLang("lang_autosave_unload_msg"); var anyDirty = false; for (var n in tinyMCE.instances) { var inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; if (inst.isDirty()) return msg; } return; } window.onbeforeunload = TinyMCE_autosave_beforeUnloadHandler; =wordpress/wp-includes/js/tinymce/plugins/autosave/langs/en.js// EN lang variables tinyMCE.addToLang('',{ autosave_unload_msg : 'The changes you made will be lost if you navigate away from this page.' }); Dwordpress/wp-includes/js/tinymce/plugins/autosave/langs/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/autosave/langs svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 en.js file 2008-11-20T16:30:28.000000Z f005861cf489c578796a76a7278084b3 2008-10-28T18:17:06.112729Z 97 paul Cwordpress/wp-includes/js/tinymce/plugins/autosave/langs/.svn/format8 Uwordpress/wp-includes/js/tinymce/plugins/autosave/langs/.svn/text-base/en.js.svn-base// EN lang variables tinyMCE.addToLang('',{ autosave_unload_msg : 'The changes you made will be lost if you navigate away from this page.' }); wordpress/wp-includes/js/tinymce/plugins/autosave/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/autosave svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 editor_plugin.js file 2008-11-20T16:30:29.000000Z 0b28d9f27e1f3c8d817aeb31bcb352af 2008-10-28T18:17:06.112729Z 97 paul langs dir editor_plugin_src.js file 2008-11-20T16:30:29.000000Z 5693ef7bb68cb84f97cfdbcb9df64d07 2008-10-28T18:17:06.112729Z 97 paul readme.txt file 2008-11-20T16:30:29.000000Z fe81b122bcf0e8599bb841cca33f967a 2008-10-28T18:17:06.112729Z 97 paul =wordpress/wp-includes/js/tinymce/plugins/autosave/.svn/format8 Zwordpress/wp-includes/js/tinymce/plugins/autosave/.svn/text-base/editor_plugin.js.svn-baseY/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('autosave'); var TinyMCE_AutoSavePlugin = { getInfo : function() { return { longname : 'Auto save', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, // Private plugin internal methods _beforeUnloadHandler : function() { var n, inst, anyDirty = false, msg = tinyMCE.getLang("lang_autosave_unload_msg"); if (tinyMCE.getParam("fullscreen_is_enabled")) return; for (n in tinyMCE.instances) { inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; if (inst.isDirty()) return msg; } return; } }; window.onbeforeunload = TinyMCE_AutoSavePlugin._beforeUnloadHandler; tinyMCE.addPlugin("autosave", TinyMCE_AutoSavePlugin); ^wordpress/wp-includes/js/tinymce/plugins/autosave/.svn/text-base/editor_plugin_src.js.svn-base1/* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('autosave', 'en,sv,cs,he,no,hu,de,da,ru,ru_KOI8-R,ru_UTF-8,fi,cy,es,is,pl'); function TinyMCE_autosave_getInfo() { return { longname : 'Auto save', author : 'Moxiecode Systems', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_autosave.html', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }; function TinyMCE_autosave_beforeUnloadHandler() { var msg = tinyMCE.getLang("lang_autosave_unload_msg"); var anyDirty = false; for (var n in tinyMCE.instances) { var inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; if (inst.isDirty()) return msg; } return; } window.onbeforeunload = TinyMCE_autosave_beforeUnloadHandler; Twordpress/wp-includes/js/tinymce/plugins/autosave/.svn/text-base/readme.txt.svn-base=Check the TinyMCE documentation for details on this plugin. Hwordpress/wp-includes/js/tinymce/plugins/directionality/editor_plugin.js D/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('directionality'); var TinyMCE_DirectionalityPlugin = { getInfo : function() { return { longname : 'Directionality', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, getControlHTML : function(cn) { switch (cn) { case "ltr": return tinyMCE.getButtonHTML(cn, 'lang_directionality_ltr_desc', '{$pluginurl}/images/ltr.gif', 'mceDirectionLTR'); case "rtl": return tinyMCE.getButtonHTML(cn, 'lang_directionality_rtl_desc', '{$pluginurl}/images/rtl.gif', 'mceDirectionRTL'); } return ""; }, execCommand : function(editor_id, element, command, user_interface, value) { // Handle commands switch (command) { case "mceDirectionLTR": var inst = tinyMCE.getInstanceById(editor_id); var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); if (elm) elm.setAttribute("dir", "ltr"); tinyMCE.triggerNodeChange(false); return true; case "mceDirectionRTL": var inst = tinyMCE.getInstanceById(editor_id); var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); if (elm) elm.setAttribute("dir", "rtl"); tinyMCE.triggerNodeChange(false); return true; } // Pass to next handler in chain return false; }, handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { function getAttrib(elm, name) { return elm.getAttribute(name) ? elm.getAttribute(name) : ""; } if (node == null) return; var elm = tinyMCE.getParentElement(node, "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); if (!elm) { tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonDisabled'); return true; } tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonNormal'); var dir = getAttrib(elm, "dir"); if (dir == "ltr" || dir == "") tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonSelected'); else tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonSelected'); return true; } }; tinyMCE.addPlugin("directionality", TinyMCE_DirectionalityPlugin); Fwordpress/wp-includes/js/tinymce/plugins/directionality/images/ltr.gifGIF89a*LZ^[N|@=@xxxBne'/'RJR!,HI8{7^@8X1J -H<kQ00P@m veR/6D.ht;Fwordpress/wp-includes/js/tinymce/plugins/directionality/images/rtl.gifGIF89a .ROMO^Jr><>jni}7_!,FI8ͻNs %@KCq`  &Q B c$a1N jƪb׏xL.;Kwordpress/wp-includes/js/tinymce/plugins/directionality/images/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/directionality/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 ltr.gif file 2008-11-20T16:30:28.000000Z 85865a3e9b3b3be7e67906bd3b2fc46f 2008-10-28T18:17:06.112729Z 97 paul has-props rtl.gif file 2008-11-20T16:30:28.000000Z 69981824e7e2d3e2bc1e431f506e509e 2008-10-28T18:17:06.112729Z 97 paul has-props Jwordpress/wp-includes/js/tinymce/plugins/directionality/images/.svn/format8 ^wordpress/wp-includes/js/tinymce/plugins/directionality/images/.svn/prop-base/ltr.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/plugins/directionality/images/.svn/prop-base/rtl.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/plugins/directionality/images/.svn/text-base/ltr.gif.svn-baseGIF89a*LZ^[N|@=@xxxBne'/'RJR!,HI8{7^@8X1J -H<kQ00P@m veR/6D.ht;^wordpress/wp-includes/js/tinymce/plugins/directionality/images/.svn/text-base/rtl.gif.svn-baseGIF89a .ROMO^Jr><>jni}7_!,FI8ͻNs %@KCq`  &Q B c$a1N jƪb׏xL.;Cwordpress/wp-includes/js/tinymce/plugins/directionality/langs/en.js// UK lang variables tinyMCE.addToLang('',{ directionality_ltr_desc : 'Direction left to right (Alt-.)', directionality_rtl_desc : 'Direction right to left (Alt-,)' }); Jwordpress/wp-includes/js/tinymce/plugins/directionality/langs/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/directionality/langs svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 en.js file 2008-11-20T16:30:28.000000Z 368301dad33c512083c89420d46d4740 2008-10-28T18:17:06.112729Z 97 paul Iwordpress/wp-includes/js/tinymce/plugins/directionality/langs/.svn/format8 [wordpress/wp-includes/js/tinymce/plugins/directionality/langs/.svn/text-base/en.js.svn-base// UK lang variables tinyMCE.addToLang('',{ directionality_ltr_desc : 'Direction left to right (Alt-.)', directionality_rtl_desc : 'Direction right to left (Alt-,)' }); Dwordpress/wp-includes/js/tinymce/plugins/directionality/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/directionality svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 editor_plugin.js file 2008-11-20T16:30:28.000000Z 7877f482e6df41494a9e0ae82c6bd33c 2008-10-28T18:17:06.112729Z 97 paul langs dir images dir Cwordpress/wp-includes/js/tinymce/plugins/directionality/.svn/format8 `wordpress/wp-includes/js/tinymce/plugins/directionality/.svn/text-base/editor_plugin.js.svn-base D/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('directionality'); var TinyMCE_DirectionalityPlugin = { getInfo : function() { return { longname : 'Directionality', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, getControlHTML : function(cn) { switch (cn) { case "ltr": return tinyMCE.getButtonHTML(cn, 'lang_directionality_ltr_desc', '{$pluginurl}/images/ltr.gif', 'mceDirectionLTR'); case "rtl": return tinyMCE.getButtonHTML(cn, 'lang_directionality_rtl_desc', '{$pluginurl}/images/rtl.gif', 'mceDirectionRTL'); } return ""; }, execCommand : function(editor_id, element, command, user_interface, value) { // Handle commands switch (command) { case "mceDirectionLTR": var inst = tinyMCE.getInstanceById(editor_id); var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); if (elm) elm.setAttribute("dir", "ltr"); tinyMCE.triggerNodeChange(false); return true; case "mceDirectionRTL": var inst = tinyMCE.getInstanceById(editor_id); var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); if (elm) elm.setAttribute("dir", "rtl"); tinyMCE.triggerNodeChange(false); return true; } // Pass to next handler in chain return false; }, handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { function getAttrib(elm, name) { return elm.getAttribute(name) ? elm.getAttribute(name) : ""; } if (node == null) return; var elm = tinyMCE.getParentElement(node, "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); if (!elm) { tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonDisabled'); return true; } tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonNormal'); var dir = getAttrib(elm, "dir"); if (dir == "ltr" || dir == "") tinyMCE.switchClass(editor_id + '_ltr', 'mceButtonSelected'); else tinyMCE.switchClass(editor_id + '_rtl', 'mceButtonSelected'); return true; } }; tinyMCE.addPlugin("directionality", TinyMCE_DirectionalityPlugin); Iwordpress/wp-includes/js/tinymce/plugins/inlinepopups/css/inlinepopup.css/* Window classes */ .mceWindow { position: absolute; left: 0; top: 0; border: 1px solid black; background-color: #D4D0C8; } .mceWindowHead { background-color: #334F8D; width: 100%; height: 18px; cursor: move; overflow: hidden; } .mceWindowBody { clear: both; background-color: white; } .mceWindowStatusbar { background-color: #D4D0C8; height: 12px; border-top: 1px solid black; } .mceWindowTitle { float: left; font-family: "MS Sans Serif"; font-size: 9pt; font-weight: bold; line-height: 18px; color: white; margin-left: 2px; overflow: hidden; } .mceWindowHeadTools { margin-right: 2px; } .mceWindowClose, .mceWindowMinimize, .mceWindowMaximize { display: block; float: right; overflow: hidden; margin-top: 2px; } .mceWindowClose { margin-left: 2px; } .mceWindowMinimize { } .mceWindowMaximize { } .mceWindowResize { display: block; float: right; overflow: hidden; cursor: se-resize; width: 12px; height: 12px; } Fwordpress/wp-includes/js/tinymce/plugins/inlinepopups/css/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/inlinepopups/css svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 inlinepopup.css file 2008-11-20T16:30:28.000000Z 323476688c03e43d7c71f427b7d176dc 2008-10-28T18:17:06.112729Z 97 paul Ewordpress/wp-includes/js/tinymce/plugins/inlinepopups/css/.svn/format8 awordpress/wp-includes/js/tinymce/plugins/inlinepopups/css/.svn/text-base/inlinepopup.css.svn-base/* Window classes */ .mceWindow { position: absolute; left: 0; top: 0; border: 1px solid black; background-color: #D4D0C8; } .mceWindowHead { background-color: #334F8D; width: 100%; height: 18px; cursor: move; overflow: hidden; } .mceWindowBody { clear: both; background-color: white; } .mceWindowStatusbar { background-color: #D4D0C8; height: 12px; border-top: 1px solid black; } .mceWindowTitle { float: left; font-family: "MS Sans Serif"; font-size: 9pt; font-weight: bold; line-height: 18px; color: white; margin-left: 2px; overflow: hidden; } .mceWindowHeadTools { margin-right: 2px; } .mceWindowClose, .mceWindowMinimize, .mceWindowMaximize { display: block; float: right; overflow: hidden; margin-top: 2px; } .mceWindowClose { margin-left: 2px; } .mceWindowMinimize { } .mceWindowMaximize { } .mceWindowResize { display: block; float: right; overflow: hidden; cursor: se-resize; width: 12px; height: 12px; } Fwordpress/wp-includes/js/tinymce/plugins/inlinepopups/editor_plugin.jsa1/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * Moxiecode DHTML Windows script. * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ // Patch openWindow, closeWindow TinyMCE functions var TinyMCE_InlinePopupsPlugin = { getInfo : function() { return { longname : 'Inline Popups', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; } }; tinyMCE.addPlugin("inlinepopups", TinyMCE_InlinePopupsPlugin); // Patch openWindow, closeWindow TinyMCE functions TinyMCE_Engine.prototype.orgOpenWindow = TinyMCE_Engine.prototype.openWindow; TinyMCE_Engine.prototype.orgCloseWindow = TinyMCE_Engine.prototype.closeWindow; TinyMCE_Engine.prototype.openWindow = function(template, args) { // Does the caller support inline if (args['inline'] != "yes" || tinyMCE.isOpera || tinyMCE.getParam("plugins").indexOf('inlinepopups') == -1) { mcWindows.selectedWindow = null; args['mce_inside_iframe'] = false; this.orgOpenWindow(template, args); return; } var url, resizable, scrollbars; args['mce_inside_iframe'] = true; tinyMCE.windowArgs = args; if (template['file'].charAt(0) != '/' && template['file'].indexOf('://') == -1) url = tinyMCE.baseURL + "/themes/" + tinyMCE.getParam("theme") + "/" + template['file']; else url = template['file']; if (!(width = parseInt(template['width']))) width = 320; if (!(height = parseInt(template['height']))) height = 200; if (!(minWidth = parseInt(template['minWidth']))) minWidth = 100; if (!(minHeight = parseInt(template['minHeight']))) minHeight = 100; resizable = (args && args['resizable']) ? args['resizable'] : "no"; scrollbars = (args && args['scrollbars']) ? args['scrollbars'] : "no"; height += 18; // Replace all args as variables in URL for (var name in args) { if (typeof(args[name]) == 'function') continue; url = tinyMCE.replaceVar(url, name, escape(args[name])); } var elm = document.getElementById(this.selectedInstance.editorId + '_parent'); if (tinyMCE.hasPlugin('fullscreen') && this.selectedInstance.getData('fullscreen').enabled) pos = { absLeft: 0, absTop: 0 }; else pos = tinyMCE.getAbsPosition(elm); // Center div in editor area pos.absLeft += Math.round((elm.firstChild.clientWidth / 2) - (width / 2)); pos.absTop += Math.round((elm.firstChild.clientHeight / 2) - (height / 2)); url += tinyMCE.settings['imp_version'] ? (url.indexOf('?')==-1?'?':'&') + 'ver=' + tinyMCE.settings['imp_version'] : ''; // WordPress cache buster mcWindows.open(url, mcWindows.idCounter++, "modal=yes,width=" + width+ ",height=" + height + ",resizable=" + resizable + ",scrollbars=" + scrollbars + ",statusbar=" + resizable + ",left=" + pos.absLeft + ",top=" + pos.absTop + ",minWidth=" + minWidth + ",minHeight=" + minHeight ); }; TinyMCE_Engine.prototype.closeWindow = function(win) { var gotit = false, n, w; for (n in mcWindows.windows) { w = mcWindows.windows[n]; if (typeof(w) == 'function') continue; if (win.name == w.id + '_iframe') { w.close(); gotit = true; } } if (!gotit) this.orgCloseWindow(win); tinyMCE.selectedInstance.getWin().focus(); }; TinyMCE_Engine.prototype.setWindowTitle = function(win_ref, title) { for (var n in mcWindows.windows) { var win = mcWindows.windows[n]; if (typeof(win) == 'function') continue; if (win_ref.name == win.id + "_iframe") window.frames[win.id + "_iframe"].document.getElementById(win.id + '_title').innerHTML = title; } }; // * * * * * TinyMCE_Windows classes below // Windows handler function TinyMCE_Windows() { this.settings = new Array(); this.windows = new Array(); this.isMSIE = (navigator.appName == "Microsoft Internet Explorer"); this.isGecko = navigator.userAgent.indexOf('Gecko') != -1; this.isSafari = navigator.userAgent.indexOf('Safari') != -1; this.isMac = navigator.userAgent.indexOf('Mac') != -1; this.isMSIE5_0 = this.isMSIE && (navigator.userAgent.indexOf('MSIE 5.0') != -1); this.action = "none"; this.selectedWindow = null; this.lastSelectedWindow = null; this.zindex = 1001; this.mouseDownScreenX = 0; this.mouseDownScreenY = 0; this.mouseDownLayerX = 0; this.mouseDownLayerY = 0; this.mouseDownWidth = 0; this.mouseDownHeight = 0; this.idCounter = 0; }; TinyMCE_Windows.prototype.init = function(settings) { this.settings = settings; if (this.isMSIE) this.addEvent(document, "mousemove", mcWindows.eventDispatcher); else this.addEvent(window, "mousemove", mcWindows.eventDispatcher); this.addEvent(document, "mouseup", mcWindows.eventDispatcher); this.addEvent(window, "resize", mcWindows.eventDispatcher); this.addEvent(document, "scroll", mcWindows.eventDispatcher); this.doc = document; }; TinyMCE_Windows.prototype.getBounds = function() { if (!this.bounds) { var vp = tinyMCE.getViewPort(window); var top, left, bottom, right, docEl = this.doc.documentElement; top = vp.top; left = vp.left; bottom = vp.height + top - 2; right = vp.width + left - 22; // TODO this number is platform dependant // x1, y1, x2, y2 this.bounds = [left, top, right, bottom]; } return this.bounds; }; TinyMCE_Windows.prototype.clampBoxPosition = function(x, y, w, h, minW, minH) { var bounds = this.getBounds(); x = Math.max(bounds[0], Math.min(bounds[2], x + w) - w); y = Math.max(bounds[1], Math.min(bounds[3], y + h) - h); return this.clampBoxSize(x, y, w, h, minW, minH); }; TinyMCE_Windows.prototype.clampBoxSize = function(x, y, w, h, minW, minH) { var bounds = this.getBounds(); return [ x, y, Math.max(minW, Math.min(bounds[2], x + w) - x), Math.max(minH, Math.min(bounds[3], y + h) - y) ]; }; TinyMCE_Windows.prototype.getParam = function(name, default_value) { var value = null; value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name]; // Fix bool values if (value == "true" || value == "false") return (value == "true"); return value; }; TinyMCE_Windows.prototype.eventDispatcher = function(e) { e = typeof(e) == "undefined" ? window.event : e; if (mcWindows.selectedWindow == null) return; // Switch focus if (mcWindows.isGecko && e.type == "mousedown") { var elm = e.currentTarget; for (var n in mcWindows.windows) { var win = mcWindows.windows[n]; if (win.headElement == elm || win.resizeElement == elm) { win.focus(); break; } } } switch (e.type) { case "mousemove": mcWindows.selectedWindow.onMouseMove(e); break; case "mouseup": mcWindows.selectedWindow.onMouseUp(e); break; case "mousedown": mcWindows.selectedWindow.onMouseDown(e); break; case "focus": mcWindows.selectedWindow.onFocus(e); break; case "scroll": case "resize": if (mcWindows.clampUpdateTimeout) clearTimeout(mcWindows.clampUpdateTimeout); mcWindows.clampEventType = e.type; mcWindows.clampUpdateTimeout = setTimeout(function () {mcWindows.updateClamping()}, 100); break; } }; TinyMCE_Windows.prototype.updateClamping = function () { var clamp, oversize, etype = mcWindows.clampEventType; this.bounds = null; // Recalc window bounds on resize/scroll this.clampUpdateTimeout = null; for (var n in this.windows) { win = this.windows[n]; if (typeof(win) == 'function' || ! win.winElement) continue; clamp = mcWindows.clampBoxPosition( win.left, win.top, win.winElement.scrollWidth, win.winElement.scrollHeight, win.features.minWidth, win.features.minHeight ); oversize = ( clamp[2] != win.winElement.scrollWidth || clamp[3] != win.winElement.scrollHeight ) ? true : false; if (!oversize || win.features.resizable == "yes" || etype != "scroll") win.moveTo(clamp[0], clamp[1]); if (oversize && win.features.resizable == "yes") win.resizeTo(clamp[2], clamp[3]); } }; TinyMCE_Windows.prototype.addEvent = function(obj, name, handler) { if (this.isMSIE) obj.attachEvent("on" + name, handler); else obj.addEventListener(name, handler, false); }; TinyMCE_Windows.prototype.cancelEvent = function(e) { if (this.isMSIE) { e.returnValue = false; e.cancelBubble = true; } else e.preventDefault(); }; TinyMCE_Windows.prototype.parseFeatures = function(opts) { // Cleanup the options opts = opts.toLowerCase(); opts = opts.replace(/;/g, ","); opts = opts.replace(/[^0-9a-z=,]/g, ""); var optionChunks = opts.split(','); var options = new Array(); options['left'] = "10"; options['top'] = "10"; options['width'] = "300"; options['height'] = "300"; options['minwidth'] = "100"; options['minheight'] = "100"; options['resizable'] = "yes"; options['minimizable'] = "yes"; options['maximizable'] = "yes"; options['close'] = "yes"; options['movable'] = "yes"; options['statusbar'] = "yes"; options['scrollbars'] = "auto"; options['modal'] = "no"; if (opts == "") return options; for (var i=0; i'; html += ''; html += ''; html += '
    '; html += '
    '; html += '
    '; if (features['resizable'] == "yes" && features['maximizable'] == "yes") html += ' '; // html += ' '; html += '
    '; html += '
    '; html += '
    '; if (features['statusbar'] == "yes") { html += '
    '; if (features['resizable'] == "yes") { if (this.isGecko) html += '
    '; else html += '
    '; } html += '
    '; } html += '
    '; html += ''; html += ''; // Create iframe this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html); }; // Blocks the document events by placing a image over the whole document TinyMCE_Windows.prototype.setDocumentLock = function(state) { var elm = document.getElementById('mcWindowEventBlocker'); if (state) { if (elm == null) { elm = document.createElement("div"); elm.id = "mcWindowEventBlocker"; elm.style.position = "absolute"; elm.style.left = "0"; elm.style.top = "0"; document.body.appendChild(elm); } elm.style.display = "none"; var imgPath = this.getParam("images_path"); var width = document.body.clientWidth; var height = document.body.clientHeight; elm.style.width = width; elm.style.height = height; elm.innerHTML = ''; elm.style.zIndex = mcWindows.zindex-1; elm.style.display = "block"; } else if (elm != null) { if (mcWindows.windows.length == 0) elm.parentNode.removeChild(elm); else elm.style.zIndex = mcWindows.zindex-1; } }; // Gets called when wrapper iframe is initialized TinyMCE_Windows.prototype.onLoad = function(name) { var win = mcWindows.windows[name]; var id = "mcWindow_" + name; var wrapperIframe = window.frames[id + "_iframe"].frames[0]; var wrapperDoc = window.frames[id + "_iframe"].document; var doc = window.frames[id + "_iframe"].document; var winDiv = document.getElementById("mcWindow_" + name + "_div"); var realIframe = window.frames[id + "_iframe"].frames[0]; // Set window data win.id = "mcWindow_" + name; win.winElement = winDiv; win.bodyElement = doc.getElementById(id + '_body'); win.iframeElement = doc.getElementById(id + '_iframe'); win.headElement = doc.getElementById(id + '_head'); win.titleElement = doc.getElementById(id + '_title'); win.resizeElement = doc.getElementById(id + '_resize'); win.containerElement = doc.getElementById(id + '_container'); win.left = win.features['left']; win.top = win.features['top']; win.frame = window.frames[id + '_iframe'].frames[0]; win.wrapperFrame = window.frames[id + '_iframe']; win.wrapperIFrameElement = document.getElementById(id + "_iframe"); // Add event handlers mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher); if (win.resizeElement != null) mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher); if (mcWindows.isMSIE) { mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher); } else { mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher); } for (var i=0; i'; html += '
    '; html += '
    '; html += '
    '; // html += ' '; // html += ' '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += ''; html += ''; // Create iframe this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html); }; // Gets called when wrapper iframe is initialized MCWindows.prototype.onLoad = function(name) { var win = mcWindows.windows[name]; var id = "mcWindow_" + name; var wrapperIframe = window.frames[id + "_iframe"].frames[0]; var wrapperDoc = window.frames[id + "_iframe"].document; var doc = window.frames[id + "_iframe"].document; var winDiv = document.getElementById("mcWindow_" + name + "_div"); var realIframe = window.frames[id + "_iframe"].frames[0]; // Set window data win.id = "mcWindow_" + name + "_iframe"; win.winElement = winDiv; win.bodyElement = doc.getElementById(id + '_body'); win.iframeElement = doc.getElementById(id + '_iframe'); win.headElement = doc.getElementById(id + '_head'); win.titleElement = doc.getElementById(id + '_title'); win.resizeElement = doc.getElementById(id + '_resize'); win.containerElement = doc.getElementById(id + '_container'); win.left = win.features['left']; win.top = win.features['top']; win.frame = window.frames[id + '_iframe'].frames[0]; win.wrapperFrame = window.frames[id + '_iframe']; win.wrapperIFrameElement = document.getElementById(id + "_iframe"); // Add event handlers mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher); mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher); if (mcWindows.isMSIE) { mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher); } else { mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher); } for (var i=0; i'; html += '
    '; html += '
    '; html += '
    '; // html += ' '; // html += ' '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += '
    '; html += ''; html += ''; // Create iframe this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html); }; // Gets called when wrapper iframe is initialized MCWindows.prototype.onLoad = function(name) { var win = mcWindows.windows[name]; var id = "mcWindow_" + name; var wrapperIframe = window.frames[id + "_iframe"].frames[0]; var wrapperDoc = window.frames[id + "_iframe"].document; var doc = window.frames[id + "_iframe"].document; var winDiv = document.getElementById("mcWindow_" + name + "_div"); var realIframe = window.frames[id + "_iframe"].frames[0]; // Set window data win.id = "mcWindow_" + name + "_iframe"; win.winElement = winDiv; win.bodyElement = doc.getElementById(id + '_body'); win.iframeElement = doc.getElementById(id + '_iframe'); win.headElement = doc.getElementById(id + '_head'); win.titleElement = doc.getElementById(id + '_title'); win.resizeElement = doc.getElementById(id + '_resize'); win.containerElement = doc.getElementById(id + '_container'); win.left = win.features['left']; win.top = win.features['top']; win.frame = window.frames[id + '_iframe'].frames[0]; win.wrapperFrame = window.frames[id + '_iframe']; win.wrapperIFrameElement = document.getElementById(id + "_iframe"); // Add event handlers mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher); mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher); if (mcWindows.isMSIE) { mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher); } else { mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher); } for (var i=0; i'; html += ''; html += ''; html += '
    '; html += '
    '; html += '
    '; if (features['resizable'] == "yes" && features['maximizable'] == "yes") html += ' '; // html += ' '; html += '
    '; html += '
    '; html += '
    '; if (features['statusbar'] == "yes") { html += '
    '; if (features['resizable'] == "yes") { if (this.isGecko) html += '
    '; else html += '
    '; } html += '
    '; } html += '
    '; html += ''; html += ''; // Create iframe this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html); }; // Blocks the document events by placing a image over the whole document TinyMCE_Windows.prototype.setDocumentLock = function(state) { var elm = document.getElementById('mcWindowEventBlocker'); if (state) { if (elm == null) { elm = document.createElement("div"); elm.id = "mcWindowEventBlocker"; elm.style.position = "absolute"; elm.style.left = "0"; elm.style.top = "0"; document.body.appendChild(elm); } elm.style.display = "none"; var imgPath = this.getParam("images_path"); var width = document.body.clientWidth; var height = document.body.clientHeight; elm.style.width = width; elm.style.height = height; elm.innerHTML = ''; elm.style.zIndex = mcWindows.zindex-1; elm.style.display = "block"; } else if (elm != null) { if (mcWindows.windows.length == 0) elm.parentNode.removeChild(elm); else elm.style.zIndex = mcWindows.zindex-1; } }; // Gets called when wrapper iframe is initialized TinyMCE_Windows.prototype.onLoad = function(name) { var win = mcWindows.windows[name]; var id = "mcWindow_" + name; var wrapperIframe = window.frames[id + "_iframe"].frames[0]; var wrapperDoc = window.frames[id + "_iframe"].document; var doc = window.frames[id + "_iframe"].document; var winDiv = document.getElementById("mcWindow_" + name + "_div"); var realIframe = window.frames[id + "_iframe"].frames[0]; // Set window data win.id = "mcWindow_" + name; win.winElement = winDiv; win.bodyElement = doc.getElementById(id + '_body'); win.iframeElement = doc.getElementById(id + '_iframe'); win.headElement = doc.getElementById(id + '_head'); win.titleElement = doc.getElementById(id + '_title'); win.resizeElement = doc.getElementById(id + '_resize'); win.containerElement = doc.getElementById(id + '_container'); win.left = win.features['left']; win.top = win.features['top']; win.frame = window.frames[id + '_iframe'].frames[0]; win.wrapperFrame = window.frames[id + '_iframe']; win.wrapperIFrameElement = document.getElementById(id + "_iframe"); // Add event handlers mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher); if (win.resizeElement != null) mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher); if (mcWindows.isMSIE) { mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher); } else { mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher); mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher); } for (var i=0; i blank_page wordpress/wp-includes/js/tinymce/plugins/paste/css/.svn/format8 Twordpress/wp-includes/js/tinymce/plugins/paste/css/.svn/text-base/blank.css.svn-basebody { background-color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; } Xwordpress/wp-includes/js/tinymce/plugins/paste/css/.svn/text-base/pasteword.css.svn-base1.sourceIframe { border: 1px solid #808080; } ?wordpress/wp-includes/js/tinymce/plugins/paste/editor_plugin.js4/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('paste'); var TinyMCE_PastePlugin = { getInfo : function() { return { longname : 'Paste text/word', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, initInstance : function(inst) { if (tinyMCE.isMSIE && tinyMCE.getParam("paste_auto_cleanup_on_paste", false)) tinyMCE.addEvent(inst.getBody(), "paste", TinyMCE_PastePlugin._handlePasteEvent); }, handleEvent : function(e) { // Force paste dialog if non IE browser if (!tinyMCE.isRealIE && tinyMCE.getParam("paste_auto_cleanup_on_paste", false) && e.ctrlKey && e.keyCode == 86 && e.type == "keydown") { window.setTimeout('tinyMCE.selectedInstance.execCommand("mcePasteText",true)', 1); return tinyMCE.cancelEvent(e); } return true; }, getControlHTML : function(cn) { switch (cn) { case "pastetext": return tinyMCE.getButtonHTML(cn, 'lang_paste_text_desc', '{$pluginurl}/images/pastetext.gif', 'mcePasteText', true); case "pasteword": return tinyMCE.getButtonHTML(cn, 'lang_paste_word_desc', '{$pluginurl}/images/pasteword.gif', 'mcePasteWord', true); case "selectall": return tinyMCE.getButtonHTML(cn, 'lang_selectall_desc', '{$pluginurl}/images/selectall.gif', 'mceSelectAll', true); } return ''; }, execCommand : function(editor_id, element, command, user_interface, value) { switch (command) { case "mcePasteText": if (user_interface) { if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && !tinyMCE.getParam('paste_use_dialog', false)) TinyMCE_PastePlugin._insertText(clipboardData.getData("Text"), true); else { var template = new Array(); template['file'] = '../../plugins/paste/pastetext.htm'; // Relative to theme template['width'] = 450; template['height'] = 400; var plain_text = ""; tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", inline : "yes", mceDo : 'insert'}); } } else TinyMCE_PastePlugin._insertText(value['html'], value['linebreaks']); return true; case "mcePasteWord": if (user_interface) { if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && !tinyMCE.getParam('paste_use_dialog', false)) { TinyMCE_PastePlugin._insertWordContent(TinyMCE_PastePlugin._clipboardHTML()); } else { var template = new Array(); template['file'] = '../../plugins/paste/pasteword.htm'; // Relative to theme template['width'] = 450; template['height'] = 400; var plain_text = ""; tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", inline : "yes", mceDo : 'insert'}); } } else TinyMCE_PastePlugin._insertWordContent(value); return true; case "mceSelectAll": tinyMCE.execInstanceCommand(editor_id, 'selectall'); return true; } // Pass to next handler in chain return false; }, // Private plugin internal methods _handlePasteEvent : function(e) { switch (e.type) { case "paste": var html = TinyMCE_PastePlugin._clipboardHTML(); var r, inst = tinyMCE.selectedInstance; // Removes italic, strong etc, the if was needed due to bug #1437114 if (inst && (r = inst.getRng()) && r.text.length > 0) tinyMCE.execCommand('delete'); if (html && html.length > 0) tinyMCE.execCommand('mcePasteWord', false, html); tinyMCE.cancelEvent(e); return false; } return true; }, _insertText : function(content, bLinebreaks) { if (content && content.length > 0) { if (bLinebreaks) { // Special paragraph treatment if (tinyMCE.getParam("paste_create_paragraphs", true)) { var rl = tinyMCE.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); for (var i=0; i

    ", "gi"); content = tinyMCE.regexpReplace(content, "\r\r", "

    ", "gi"); content = tinyMCE.regexpReplace(content, "\n\n", "

    ", "gi"); // Has paragraphs if ((pos = content.indexOf('

    ')) != -1) { tinyMCE.execCommand("Delete"); var node = tinyMCE.selectedInstance.getFocusElement(); // Get list of elements to break var breakElms = new Array(); do { if (node.nodeType == 1) { // Don't break tables and break at body if (node.nodeName == "TD" || node.nodeName == "BODY") break; breakElms[breakElms.length] = node; } } while(node = node.parentNode); var before = "", after = "

    "; before += content.substring(0, pos); for (var i=0; i"; after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; } before += "

    "; content = before + content.substring(pos+7) + after; } } if (tinyMCE.getParam("paste_create_linebreaks", true)) { content = tinyMCE.regexpReplace(content, "\r\n", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\r", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\n", "
    ", "gi"); } } tinyMCE.execCommand("mceInsertRawHTML", false, content); } }, _insertWordContent : function(content) { if (content && content.length > 0) { // Cleanup Word content var bull = String.fromCharCode(8226); var middot = String.fromCharCode(183); var cb; if ((cb = tinyMCE.getParam("paste_insert_word_content_callback", "")) != "") content = eval(cb + "('before', content)"); var rl = tinyMCE.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); for (var i=0; i(.*?)<\/p>', 'gi'), '

    $1

    '); } content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--"); content = content.replace(new RegExp(bull + "(.*?)
    ", "gi"), "

    " + middot + "$1

    "); content = content.replace(new RegExp('', 'gi'), "" + bull); // Covert to bull list content = content.replace(/<\/o:p>/gi, ""); content = content.replace(new RegExp('
    ]*>/gi, ""); if (tinyMCE.getParam("paste_remove_styles", true)) content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3"); content = content.replace(/<\/?font[^>]*>/gi, ""); // Strips class attributes. switch (tinyMCE.getParam("paste_strip_class_attributes", "all")) { case "all": content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); break; case "mso": content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3"); break; } content = content.replace(new RegExp('href="?' + TinyMCE_PastePlugin._reEscape("" + document.location) + '', 'gi'), 'href="' + tinyMCE.settings['document_base_url']); content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); content = content.replace(/<\\?\?xml[^>]*>/gi, ""); content = content.replace(/<\/?\w+:[^>]*>/gi, ""); content = content.replace(/-- page break --\s*

     <\/p>/gi, ""); // Remove pagebreaks content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks // content = content.replace(/\/? */gi, "");   // content = content.replace(/

     <\/p>/gi, ''); if (!tinyMCE.settings['force_p_newlines']) { content = content.replace('', '' ,'gi'); content = content.replace('

    ', '

    ' ,'gi'); } if (!tinyMCE.isMSIE && !tinyMCE.settings['force_p_newlines']) { content = content.replace(/<\/?p[^>]*>/gi, ""); } content = content.replace(/<\/?div[^>]*>/gi, ""); // Convert all middlot lists to UL lists if (tinyMCE.getParam("paste_convert_middot_lists", true)) { var div = document.createElement("div"); div.innerHTML = content; // Convert all middot paragraphs to li elements var className = tinyMCE.getParam("paste_unindented_list_class", "unIndentedList"); while (TinyMCE_PastePlugin._convertMiddots(div, "--list--")) ; // bull while (TinyMCE_PastePlugin._convertMiddots(div, middot, className)) ; // Middot while (TinyMCE_PastePlugin._convertMiddots(div, bull)) ; // bull content = div.innerHTML; } // Replace all headers with strong and fix some other issues if (tinyMCE.getParam("paste_convert_headers_to_strong", false)) { content = content.replace(/ <\/h[1-6]>/gi, '

      

    '); content = content.replace(//gi, '

    '); content = content.replace(/<\/h[1-6]>/gi, '

    '); content = content.replace(/ <\/b>/gi, '  '); content = content.replace(/^( )*/gi, ''); } content = content.replace(/--list--/gi, ""); // Remove --list-- if ((cb = tinyMCE.getParam("paste_insert_word_content_callback", "")) != "") content = eval(cb + "('after', content)"); // Insert cleaned content tinyMCE.execCommand("mceInsertContent", false, content); if (tinyMCE.getParam('paste_force_cleanup_wordpaste', true)) window.setTimeout('tinyMCE.execCommand("mceCleanup");', 1); // Do normal cleanup detached from this thread } }, _reEscape : function(s) { var l = "?.\\*[](){}+^$:"; var o = ""; for (var i=0; i {$lang_paste_text_desc}
    {$lang_paste_text_desc}

    {$lang_paste_text_title}
    {$lang_paste_word_desc}
    {$lang_paste_word_desc}
    {$lang_paste_word_title}
    ;wordpress/wp-includes/js/tinymce/plugins/paste/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/paste svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 editor_plugin.js file 2008-11-20T16:30:29.000000Z 01d4facd6dac7390c24b0fc432123111 2008-10-28T18:17:06.112729Z 97 paul pasteword.htm file 2008-11-20T16:30:29.000000Z c5e287e22909f9945c1bf65ceb7e66aa 2008-10-28T18:17:06.112729Z 97 paul jscripts dir langs dir images dir css dir pastetext.htm file 2008-11-20T16:30:29.000000Z 4895645731e0148b7e730eff6b78a4e0 2008-10-28T18:17:06.112729Z 97 paul blank.htm file 2008-11-20T16:30:29.000000Z c071fad481334f6b06d4bb55bc76c2fe 2008-10-28T18:17:06.112729Z 97 paul :wordpress/wp-includes/js/tinymce/plugins/paste/.svn/format8 Pwordpress/wp-includes/js/tinymce/plugins/paste/.svn/text-base/blank.htm.svn-base blank_page Wwordpress/wp-includes/js/tinymce/plugins/paste/.svn/text-base/editor_plugin.js.svn-base4/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('paste'); var TinyMCE_PastePlugin = { getInfo : function() { return { longname : 'Paste text/word', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste', version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion }; }, initInstance : function(inst) { if (tinyMCE.isMSIE && tinyMCE.getParam("paste_auto_cleanup_on_paste", false)) tinyMCE.addEvent(inst.getBody(), "paste", TinyMCE_PastePlugin._handlePasteEvent); }, handleEvent : function(e) { // Force paste dialog if non IE browser if (!tinyMCE.isRealIE && tinyMCE.getParam("paste_auto_cleanup_on_paste", false) && e.ctrlKey && e.keyCode == 86 && e.type == "keydown") { window.setTimeout('tinyMCE.selectedInstance.execCommand("mcePasteText",true)', 1); return tinyMCE.cancelEvent(e); } return true; }, getControlHTML : function(cn) { switch (cn) { case "pastetext": return tinyMCE.getButtonHTML(cn, 'lang_paste_text_desc', '{$pluginurl}/images/pastetext.gif', 'mcePasteText', true); case "pasteword": return tinyMCE.getButtonHTML(cn, 'lang_paste_word_desc', '{$pluginurl}/images/pasteword.gif', 'mcePasteWord', true); case "selectall": return tinyMCE.getButtonHTML(cn, 'lang_selectall_desc', '{$pluginurl}/images/selectall.gif', 'mceSelectAll', true); } return ''; }, execCommand : function(editor_id, element, command, user_interface, value) { switch (command) { case "mcePasteText": if (user_interface) { if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && !tinyMCE.getParam('paste_use_dialog', false)) TinyMCE_PastePlugin._insertText(clipboardData.getData("Text"), true); else { var template = new Array(); template['file'] = '../../plugins/paste/pastetext.htm'; // Relative to theme template['width'] = 450; template['height'] = 400; var plain_text = ""; tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", inline : "yes", mceDo : 'insert'}); } } else TinyMCE_PastePlugin._insertText(value['html'], value['linebreaks']); return true; case "mcePasteWord": if (user_interface) { if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && !tinyMCE.getParam('paste_use_dialog', false)) { TinyMCE_PastePlugin._insertWordContent(TinyMCE_PastePlugin._clipboardHTML()); } else { var template = new Array(); template['file'] = '../../plugins/paste/pasteword.htm'; // Relative to theme template['width'] = 450; template['height'] = 400; var plain_text = ""; tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", inline : "yes", mceDo : 'insert'}); } } else TinyMCE_PastePlugin._insertWordContent(value); return true; case "mceSelectAll": tinyMCE.execInstanceCommand(editor_id, 'selectall'); return true; } // Pass to next handler in chain return false; }, // Private plugin internal methods _handlePasteEvent : function(e) { switch (e.type) { case "paste": var html = TinyMCE_PastePlugin._clipboardHTML(); var r, inst = tinyMCE.selectedInstance; // Removes italic, strong etc, the if was needed due to bug #1437114 if (inst && (r = inst.getRng()) && r.text.length > 0) tinyMCE.execCommand('delete'); if (html && html.length > 0) tinyMCE.execCommand('mcePasteWord', false, html); tinyMCE.cancelEvent(e); return false; } return true; }, _insertText : function(content, bLinebreaks) { if (content && content.length > 0) { if (bLinebreaks) { // Special paragraph treatment if (tinyMCE.getParam("paste_create_paragraphs", true)) { var rl = tinyMCE.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); for (var i=0; i

    ", "gi"); content = tinyMCE.regexpReplace(content, "\r\r", "

    ", "gi"); content = tinyMCE.regexpReplace(content, "\n\n", "

    ", "gi"); // Has paragraphs if ((pos = content.indexOf('

    ')) != -1) { tinyMCE.execCommand("Delete"); var node = tinyMCE.selectedInstance.getFocusElement(); // Get list of elements to break var breakElms = new Array(); do { if (node.nodeType == 1) { // Don't break tables and break at body if (node.nodeName == "TD" || node.nodeName == "BODY") break; breakElms[breakElms.length] = node; } } while(node = node.parentNode); var before = "", after = "

    "; before += content.substring(0, pos); for (var i=0; i"; after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; } before += "

    "; content = before + content.substring(pos+7) + after; } } if (tinyMCE.getParam("paste_create_linebreaks", true)) { content = tinyMCE.regexpReplace(content, "\r\n", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\r", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\n", "
    ", "gi"); } } tinyMCE.execCommand("mceInsertRawHTML", false, content); } }, _insertWordContent : function(content) { if (content && content.length > 0) { // Cleanup Word content var bull = String.fromCharCode(8226); var middot = String.fromCharCode(183); var cb; if ((cb = tinyMCE.getParam("paste_insert_word_content_callback", "")) != "") content = eval(cb + "('before', content)"); var rl = tinyMCE.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); for (var i=0; i(.*?)<\/p>', 'gi'), '

    $1

    '); } content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--"); content = content.replace(new RegExp(bull + "(.*?)
    ", "gi"), "

    " + middot + "$1

    "); content = content.replace(new RegExp('', 'gi'), "" + bull); // Covert to bull list content = content.replace(/<\/o:p>/gi, ""); content = content.replace(new RegExp('
    ]*>/gi, ""); if (tinyMCE.getParam("paste_remove_styles", true)) content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3"); content = content.replace(/<\/?font[^>]*>/gi, ""); // Strips class attributes. switch (tinyMCE.getParam("paste_strip_class_attributes", "all")) { case "all": content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); break; case "mso": content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3"); break; } content = content.replace(new RegExp('href="?' + TinyMCE_PastePlugin._reEscape("" + document.location) + '', 'gi'), 'href="' + tinyMCE.settings['document_base_url']); content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); content = content.replace(/<\\?\?xml[^>]*>/gi, ""); content = content.replace(/<\/?\w+:[^>]*>/gi, ""); content = content.replace(/-- page break --\s*

     <\/p>/gi, ""); // Remove pagebreaks content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks // content = content.replace(/\/? */gi, "");   // content = content.replace(/

     <\/p>/gi, ''); if (!tinyMCE.settings['force_p_newlines']) { content = content.replace('', '' ,'gi'); content = content.replace('

    ', '

    ' ,'gi'); } if (!tinyMCE.isMSIE && !tinyMCE.settings['force_p_newlines']) { content = content.replace(/<\/?p[^>]*>/gi, ""); } content = content.replace(/<\/?div[^>]*>/gi, ""); // Convert all middlot lists to UL lists if (tinyMCE.getParam("paste_convert_middot_lists", true)) { var div = document.createElement("div"); div.innerHTML = content; // Convert all middot paragraphs to li elements var className = tinyMCE.getParam("paste_unindented_list_class", "unIndentedList"); while (TinyMCE_PastePlugin._convertMiddots(div, "--list--")) ; // bull while (TinyMCE_PastePlugin._convertMiddots(div, middot, className)) ; // Middot while (TinyMCE_PastePlugin._convertMiddots(div, bull)) ; // bull content = div.innerHTML; } // Replace all headers with strong and fix some other issues if (tinyMCE.getParam("paste_convert_headers_to_strong", false)) { content = content.replace(/ <\/h[1-6]>/gi, '

      

    '); content = content.replace(//gi, '

    '); content = content.replace(/<\/h[1-6]>/gi, '

    '); content = content.replace(/ <\/b>/gi, '  '); content = content.replace(/^( )*/gi, ''); } content = content.replace(/--list--/gi, ""); // Remove --list-- if ((cb = tinyMCE.getParam("paste_insert_word_content_callback", "")) != "") content = eval(cb + "('after', content)"); // Insert cleaned content tinyMCE.execCommand("mceInsertContent", false, content); if (tinyMCE.getParam('paste_force_cleanup_wordpaste', true)) window.setTimeout('tinyMCE.execCommand("mceCleanup");', 1); // Do normal cleanup detached from this thread } }, _reEscape : function(s) { var l = "?.\\*[](){}+^$:"; var o = ""; for (var i=0; i {$lang_paste_text_desc}
    {$lang_paste_text_desc}

    {$lang_paste_text_title}
    Twordpress/wp-includes/js/tinymce/plugins/paste/.svn/text-base/pasteword.htm.svn-baseo {$lang_paste_word_desc}
    {$lang_paste_word_desc}
    {$lang_paste_word_title}
    Rwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/HttpClient.class.php/scookies array ready for the next request // Note: This currently ignores the cookie path (and time) completely. Time is not important, // but path could possibly lead to security problems. var $persist_referers = true; // For each request, sends path of last request as referer var $debug = false; var $handle_redirects = true; // Auaomtically redirect if Location or URI header is found var $max_redirects = 5; var $headers_only = false; // If true, stops receiving once headers have been read. // Basic authorization variables var $username; var $password; // Response vars var $status; var $headers = array(); var $content = ''; var $errormsg; // Tracker variables var $redirect_count = 0; var $cookie_host = ''; function HttpClient($host, $port=80) { $this->host = $host; $this->port = $port; } function get($path, $data = false) { $this->path = $path; $this->method = 'GET'; if ($data) { $this->path .= '?'.$this->buildQueryString($data); } return $this->doRequest(); } function post($path, $data) { $this->path = $path; $this->method = 'POST'; $this->postdata = $this->buildQueryString($data); return $this->doRequest(); } function buildQueryString($data) { $querystring = ''; if (is_array($data)) { // Change data in to postable data foreach ($data as $key => $val) { if (is_array($val)) { foreach ($val as $val2) { $querystring .= urlencode($key).'='.urlencode($val2).'&'; } } else { $querystring .= urlencode($key).'='.urlencode($val).'&'; } } $querystring = substr($querystring, 0, -1); // Eliminate unnecessary & } else { $querystring = $data; } return $querystring; } function doRequest() { // Performs the actual HTTP request, returning true or false depending on outcome if (!$fp = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout)) { // Set error message switch($errno) { case -3: $this->errormsg = 'Socket creation failed (-3)'; case -4: $this->errormsg = 'DNS lookup failure (-4)'; case -5: $this->errormsg = 'Connection refused or timed out (-5)'; default: $this->errormsg = 'Connection failed ('.$errno.')'; $this->errormsg .= ' '.$errstr; $this->debug($this->errormsg); } return false; } socket_set_timeout($fp, $this->timeout); $request = $this->buildRequest(); $this->debug('Request', $request); fwrite($fp, $request); // Reset all the variables that should not persist between requests $this->headers = array(); $this->content = ''; $this->errormsg = ''; // Set a couple of flags $inHeaders = true; $atStart = true; // Now start reading back the response while (!feof($fp)) { $line = fgets($fp, 4096); if ($atStart) { // Deal with first line of returned data $atStart = false; if (!preg_match('/HTTP\/(\\d\\.\\d)\\s*(\\d+)\\s*(.*)/', $line, $m)) { $this->errormsg = "Status code line invalid: ".htmlentities($line); $this->debug($this->errormsg); return false; } $http_version = $m[1]; // not used $this->status = $m[2]; $status_string = $m[3]; // not used $this->debug(trim($line)); continue; } if ($inHeaders) { if (trim($line) == '') { $inHeaders = false; $this->debug('Received Headers', $this->headers); if ($this->headers_only) { break; // Skip the rest of the input } continue; } if (!preg_match('/([^:]+):\\s*(.*)/', $line, $m)) { // Skip to the next header continue; } $key = strtolower(trim($m[1])); $val = trim($m[2]); // Deal with the possibility of multiple headers of same name if (isset($this->headers[$key])) { if (is_array($this->headers[$key])) { $this->headers[$key][] = $val; } else { $this->headers[$key] = array($this->headers[$key], $val); } } else { $this->headers[$key] = $val; } continue; } // We're not in the headers, so append the line to the contents $this->content .= $line; } fclose($fp); // If data is compressed, uncompress it if (isset($this->headers['content-encoding']) && $this->headers['content-encoding'] == 'gzip') { $this->debug('Content is gzip encoded, unzipping it'); $this->content = substr($this->content, 10); // See http://www.php.net/manual/en/function.gzencode.php $this->content = gzinflate($this->content); } // If $persist_cookies, deal with any cookies if ($this->persist_cookies && isset($this->headers['set-cookie']) && $this->host == $this->cookie_host) { $cookies = $this->headers['set-cookie']; if (!is_array($cookies)) { $cookies = array($cookies); } foreach ($cookies as $cookie) { if (preg_match('/([^=]+)=([^;]+);/', $cookie, $m)) { $this->cookies[$m[1]] = $m[2]; } } // Record domain of cookies for security reasons $this->cookie_host = $this->host; } // If $persist_referers, set the referer ready for the next request if ($this->persist_referers) { $this->debug('Persisting referer: '.$this->getRequestURL()); $this->referer = $this->getRequestURL(); } // Finally, if handle_redirects and a redirect is sent, do that if ($this->handle_redirects) { if (++$this->redirect_count >= $this->max_redirects) { $this->errormsg = 'Number of redirects exceeded maximum ('.$this->max_redirects.')'; $this->debug($this->errormsg); $this->redirect_count = 0; return false; } $location = isset($this->headers['location']) ? $this->headers['location'] : ''; $uri = isset($this->headers['uri']) ? $this->headers['uri'] : ''; if ($location || $uri) { $url = parse_url($location.$uri); // This will FAIL if redirect is to a different site return $this->get($url['path']); } } return true; } function buildRequest() { $headers = array(); $headers[] = "{$this->method} {$this->path} HTTP/1.0"; // Using 1.1 leads to all manner of problems, such as "chunked" encoding $headers[] = "Host: {$this->host}"; $headers[] = "User-Agent: {$this->user_agent}"; $headers[] = "Accept: {$this->accept}"; if ($this->use_gzip) { $headers[] = "Accept-encoding: {$this->accept_encoding}"; } $headers[] = "Accept-language: {$this->accept_language}"; if ($this->referer) { $headers[] = "Referer: {$this->referer}"; } // Cookies if ($this->cookies) { $cookie = 'Cookie: '; foreach ($this->cookies as $key => $value) { $cookie .= "$key=$value; "; } $headers[] = $cookie; } // Basic authentication if ($this->username && $this->password) { $headers[] = 'Authorization: BASIC '.base64_encode($this->username.':'.$this->password); } // If this is a POST, set the content type and length if ($this->postdata) { $headers[] = 'Content-Type: application/x-www-form-urlencoded'; $headers[] = 'Content-Length: '.strlen($this->postdata); } $request = implode("\r\n", $headers)."\r\n\r\n".$this->postdata; return $request; } function getStatus() { return $this->status; } function getContent() { return $this->content; } function getHeaders() { return $this->headers; } function getHeader($header) { $header = strtolower($header); if (isset($this->headers[$header])) { return $this->headers[$header]; } else { return false; } } function getError() { return $this->errormsg; } function getCookies() { return $this->cookies; } function getRequestURL() { $url = 'http://'.$this->host; if ($this->port != 80) { $url .= ':'.$this->port; } $url .= $this->path; return $url; } // Setter methods function setUserAgent($string) { $this->user_agent = $string; } function setAuthorization($username, $password) { $this->username = $username; $this->password = $password; } function setCookies($array) { $this->cookies = $array; } // Option setting methods function useGzip($boolean) { $this->use_gzip = $boolean; } function setPersistCookies($boolean) { $this->persist_cookies = $boolean; } function setPersistReferers($boolean) { $this->persist_referers = $boolean; } function setHandleRedirects($boolean) { $this->handle_redirects = $boolean; } function setMaxRedirects($num) { $this->max_redirects = $num; } function setHeadersOnly($boolean) { $this->headers_only = $boolean; } function setDebug($boolean) { $this->debug = $boolean; } // "Quick" static methods function quickGet($url) { $bits = parse_url($url); $host = $bits['host']; $port = isset($bits['port']) ? $bits['port'] : 80; $path = isset($bits['path']) ? $bits['path'] : '/'; if (isset($bits['query'])) { $path .= '?'.$bits['query']; } $client = new HttpClient($host, $port); if (!$client->get($path)) { return false; } else { return $client->getContent(); } } function quickPost($url, $data) { $bits = parse_url($url); $host = $bits['host']; $port = isset($bits['port']) ? $bits['port'] : 80; $path = isset($bits['path']) ? $bits['path'] : '/'; $client = new HttpClient($host, $port); if (!$client->post($path, $data)) { return false; } else { return $client->getContent(); } } function debug($msg, $object = false) { if ($this->debug) { print '
    HttpClient Debug: '.$msg; if ($object) { ob_start(); print_r($object); $content = htmlentities(ob_get_contents()); ob_end_clean(); print '
    '.$content.'
    '; } print '
    '; } } } ?>Jwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/entriesK8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 TinyPspellShell.class.php file 2008-11-20T16:30:28.000000Z e0314fd0d12c7cb455b0a1be8fdd7fe4 2008-10-28T18:17:06.112729Z 97 paul has-props HttpClient.class.php file 2008-11-20T16:30:28.000000Z a76d00eacf8f07be342b41df83f0f062 2008-10-28T18:17:06.112729Z 97 paul has-props TinyGoogleSpell.class.php file 2008-11-20T16:30:28.000000Z 12006907577d72fe047d8bac3a2be73f 2008-10-28T18:17:06.112729Z 97 paul has-props TinyPspell.class.php file 2008-11-20T16:30:28.000000Z a405d27e7d85f7feac8acc831f79ada1 2008-10-28T18:17:06.112729Z 97 paul has-props Iwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/format8 jwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/prop-base/HttpClient.class.php.svn-baseK 14 svn:executable V 1 * END owordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/prop-base/TinyGoogleSpell.class.php.svn-baseK 14 svn:executable V 1 * END jwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/prop-base/TinyPspell.class.php.svn-baseK 14 svn:executable V 1 * END owordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/prop-base/TinyPspellShell.class.php.svn-baseK 14 svn:executable V 1 * END jwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/text-base/HttpClient.class.php.svn-base/scookies array ready for the next request // Note: This currently ignores the cookie path (and time) completely. Time is not important, // but path could possibly lead to security problems. var $persist_referers = true; // For each request, sends path of last request as referer var $debug = false; var $handle_redirects = true; // Auaomtically redirect if Location or URI header is found var $max_redirects = 5; var $headers_only = false; // If true, stops receiving once headers have been read. // Basic authorization variables var $username; var $password; // Response vars var $status; var $headers = array(); var $content = ''; var $errormsg; // Tracker variables var $redirect_count = 0; var $cookie_host = ''; function HttpClient($host, $port=80) { $this->host = $host; $this->port = $port; } function get($path, $data = false) { $this->path = $path; $this->method = 'GET'; if ($data) { $this->path .= '?'.$this->buildQueryString($data); } return $this->doRequest(); } function post($path, $data) { $this->path = $path; $this->method = 'POST'; $this->postdata = $this->buildQueryString($data); return $this->doRequest(); } function buildQueryString($data) { $querystring = ''; if (is_array($data)) { // Change data in to postable data foreach ($data as $key => $val) { if (is_array($val)) { foreach ($val as $val2) { $querystring .= urlencode($key).'='.urlencode($val2).'&'; } } else { $querystring .= urlencode($key).'='.urlencode($val).'&'; } } $querystring = substr($querystring, 0, -1); // Eliminate unnecessary & } else { $querystring = $data; } return $querystring; } function doRequest() { // Performs the actual HTTP request, returning true or false depending on outcome if (!$fp = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout)) { // Set error message switch($errno) { case -3: $this->errormsg = 'Socket creation failed (-3)'; case -4: $this->errormsg = 'DNS lookup failure (-4)'; case -5: $this->errormsg = 'Connection refused or timed out (-5)'; default: $this->errormsg = 'Connection failed ('.$errno.')'; $this->errormsg .= ' '.$errstr; $this->debug($this->errormsg); } return false; } socket_set_timeout($fp, $this->timeout); $request = $this->buildRequest(); $this->debug('Request', $request); fwrite($fp, $request); // Reset all the variables that should not persist between requests $this->headers = array(); $this->content = ''; $this->errormsg = ''; // Set a couple of flags $inHeaders = true; $atStart = true; // Now start reading back the response while (!feof($fp)) { $line = fgets($fp, 4096); if ($atStart) { // Deal with first line of returned data $atStart = false; if (!preg_match('/HTTP\/(\\d\\.\\d)\\s*(\\d+)\\s*(.*)/', $line, $m)) { $this->errormsg = "Status code line invalid: ".htmlentities($line); $this->debug($this->errormsg); return false; } $http_version = $m[1]; // not used $this->status = $m[2]; $status_string = $m[3]; // not used $this->debug(trim($line)); continue; } if ($inHeaders) { if (trim($line) == '') { $inHeaders = false; $this->debug('Received Headers', $this->headers); if ($this->headers_only) { break; // Skip the rest of the input } continue; } if (!preg_match('/([^:]+):\\s*(.*)/', $line, $m)) { // Skip to the next header continue; } $key = strtolower(trim($m[1])); $val = trim($m[2]); // Deal with the possibility of multiple headers of same name if (isset($this->headers[$key])) { if (is_array($this->headers[$key])) { $this->headers[$key][] = $val; } else { $this->headers[$key] = array($this->headers[$key], $val); } } else { $this->headers[$key] = $val; } continue; } // We're not in the headers, so append the line to the contents $this->content .= $line; } fclose($fp); // If data is compressed, uncompress it if (isset($this->headers['content-encoding']) && $this->headers['content-encoding'] == 'gzip') { $this->debug('Content is gzip encoded, unzipping it'); $this->content = substr($this->content, 10); // See http://www.php.net/manual/en/function.gzencode.php $this->content = gzinflate($this->content); } // If $persist_cookies, deal with any cookies if ($this->persist_cookies && isset($this->headers['set-cookie']) && $this->host == $this->cookie_host) { $cookies = $this->headers['set-cookie']; if (!is_array($cookies)) { $cookies = array($cookies); } foreach ($cookies as $cookie) { if (preg_match('/([^=]+)=([^;]+);/', $cookie, $m)) { $this->cookies[$m[1]] = $m[2]; } } // Record domain of cookies for security reasons $this->cookie_host = $this->host; } // If $persist_referers, set the referer ready for the next request if ($this->persist_referers) { $this->debug('Persisting referer: '.$this->getRequestURL()); $this->referer = $this->getRequestURL(); } // Finally, if handle_redirects and a redirect is sent, do that if ($this->handle_redirects) { if (++$this->redirect_count >= $this->max_redirects) { $this->errormsg = 'Number of redirects exceeded maximum ('.$this->max_redirects.')'; $this->debug($this->errormsg); $this->redirect_count = 0; return false; } $location = isset($this->headers['location']) ? $this->headers['location'] : ''; $uri = isset($this->headers['uri']) ? $this->headers['uri'] : ''; if ($location || $uri) { $url = parse_url($location.$uri); // This will FAIL if redirect is to a different site return $this->get($url['path']); } } return true; } function buildRequest() { $headers = array(); $headers[] = "{$this->method} {$this->path} HTTP/1.0"; // Using 1.1 leads to all manner of problems, such as "chunked" encoding $headers[] = "Host: {$this->host}"; $headers[] = "User-Agent: {$this->user_agent}"; $headers[] = "Accept: {$this->accept}"; if ($this->use_gzip) { $headers[] = "Accept-encoding: {$this->accept_encoding}"; } $headers[] = "Accept-language: {$this->accept_language}"; if ($this->referer) { $headers[] = "Referer: {$this->referer}"; } // Cookies if ($this->cookies) { $cookie = 'Cookie: '; foreach ($this->cookies as $key => $value) { $cookie .= "$key=$value; "; } $headers[] = $cookie; } // Basic authentication if ($this->username && $this->password) { $headers[] = 'Authorization: BASIC '.base64_encode($this->username.':'.$this->password); } // If this is a POST, set the content type and length if ($this->postdata) { $headers[] = 'Content-Type: application/x-www-form-urlencoded'; $headers[] = 'Content-Length: '.strlen($this->postdata); } $request = implode("\r\n", $headers)."\r\n\r\n".$this->postdata; return $request; } function getStatus() { return $this->status; } function getContent() { return $this->content; } function getHeaders() { return $this->headers; } function getHeader($header) { $header = strtolower($header); if (isset($this->headers[$header])) { return $this->headers[$header]; } else { return false; } } function getError() { return $this->errormsg; } function getCookies() { return $this->cookies; } function getRequestURL() { $url = 'http://'.$this->host; if ($this->port != 80) { $url .= ':'.$this->port; } $url .= $this->path; return $url; } // Setter methods function setUserAgent($string) { $this->user_agent = $string; } function setAuthorization($username, $password) { $this->username = $username; $this->password = $password; } function setCookies($array) { $this->cookies = $array; } // Option setting methods function useGzip($boolean) { $this->use_gzip = $boolean; } function setPersistCookies($boolean) { $this->persist_cookies = $boolean; } function setPersistReferers($boolean) { $this->persist_referers = $boolean; } function setHandleRedirects($boolean) { $this->handle_redirects = $boolean; } function setMaxRedirects($num) { $this->max_redirects = $num; } function setHeadersOnly($boolean) { $this->headers_only = $boolean; } function setDebug($boolean) { $this->debug = $boolean; } // "Quick" static methods function quickGet($url) { $bits = parse_url($url); $host = $bits['host']; $port = isset($bits['port']) ? $bits['port'] : 80; $path = isset($bits['path']) ? $bits['path'] : '/'; if (isset($bits['query'])) { $path .= '?'.$bits['query']; } $client = new HttpClient($host, $port); if (!$client->get($path)) { return false; } else { return $client->getContent(); } } function quickPost($url, $data) { $bits = parse_url($url); $host = $bits['host']; $port = isset($bits['port']) ? $bits['port'] : 80; $path = isset($bits['path']) ? $bits['path'] : '/'; $client = new HttpClient($host, $port); if (!$client->post($path, $data)) { return false; } else { return $client->getContent(); } } function debug($msg, $object = false) { if ($this->debug) { print '
    HttpClient Debug: '.$msg; if ($object) { ob_start(); print_r($object); $content = htmlentities(ob_get_contents()); ob_end_clean(); print '
    '.$content.'
    '; } print '
    '; } } } ?>owordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/text-base/TinyGoogleSpell.class.php.svn-base lang = $lang; } // Returns array with bad words or false if failed. function checkWords($word_array) { $words = array(); $wordstr = implode(' ', $word_array); $matches = $this->_getMatches($wordstr); for ($i=0; $iunhtmlentities(mb_substr($wordstr, $matches[$i][1], $matches[$i][2], "UTF-8")); return $words; } function unhtmlentities($string) { $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string); $string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string); $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } // Returns array with suggestions or false if failed. function getSuggestion($word) { $sug = array(); $matches = $this->_getMatches($word); if (count($matches) > 0) $sug = explode("\t", utf8_encode($this->unhtmlentities($matches[0][4]))); return $sug; } function _xmlChars($string) { $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); foreach ($trans as $k => $v) $trans[$k] = "&#".ord($k).";"; return strtr($string, $trans); } function _getMatches($word_list) { $server = "www.google.com"; $port = 443; $path = "/tbproxy/spell?lang=" . $this->lang . "&hl=en"; $host = "www.google.com"; $url = "https://" . $server; // Setup XML request $xml = '' . $word_list . ''; $header = "POST ".$path." HTTP/1.0 \r\n"; $header .= "MIME-Version: 1.0 \r\n"; $header .= "Content-type: application/PTI26 \r\n"; $header .= "Content-length: ".strlen($xml)." \r\n"; $header .= "Content-transfer-encoding: text \r\n"; $header .= "Request-number: 1 \r\n"; $header .= "Document-type: Request \r\n"; $header .= "Interface-Version: Test 1.4 \r\n"; $header .= "Connection: close \r\n\r\n"; $header .= $xml; //$this->_debugData($xml); // Use curl if it exists if (function_exists('curl_init')) { // Use curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $xml = curl_exec($ch); curl_close($ch); } else { // Use raw sockets $fp = fsockopen("ssl://" . $server, $port, $errno, $errstr, 30); if ($fp) { // Send request fwrite($fp, $header); // Read response $xml = ""; while (!feof($fp)) $xml .= fgets($fp, 128); fclose($fp); } else echo "Could not open SSL connection to google."; } //$this->_debugData($xml); // Grab and parse content preg_match_all('/([^<]*)<\/c>/', $xml, $matches, PREG_SET_ORDER); return $matches; } function _debugData($data) { $fh = @fopen("debug.log", 'a+'); @fwrite($fh, $data); @fclose($fh); } } // Setup classname, should be the same as the name of the spellchecker class $spellCheckerConfig['class'] = "TinyGoogleSpell"; ?> jwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/text-base/TinyPspell.class.php.svn-base`lang = $lang; $this->mode = $mode; $this->plink = false; $this->errorMsg = array(); if (!function_exists("pspell_new")) { $this->errorMsg[] = "PSpell not found."; return; } $this->plink = pspell_new($this->lang, $this->spelling, $this->jargon, $this->encoding, $this->mode); } // Returns array with bad words or false if failed. function checkWords($wordArray) { if (!$this->plink) { $this->errorMsg[] = "No PSpell link found for checkWords."; return array(); } $wordError = array(); foreach($wordArray as $word) { if(!pspell_check($this->plink, trim($word))) $wordError[] = $word; } return $wordError; } // Returns array with suggestions or false if failed. function getSuggestion($word) { if (!$this->plink) { $this->errorMsg[] = "No PSpell link found for getSuggestion."; return array(); } return pspell_suggest($this->plink, $word); } } // Setup classname, should be the same as the name of the spellchecker class $spellCheckerConfig['class'] = "TinyPspell"; ?>owordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/.svn/text-base/TinyPspellShell.class.php.svn-base lang = $lang; $this->mode = $mode; $this->error = false; $this->errorMsg = array(); $this->tmpfile = tempnam($config['tinypspellshell.tmp'], "tinyspell"); if(preg_match("#win#i",php_uname())) $this->cmd = $config['tinypspellshell.aspell'] . " -a --lang=". $this->lang." --encoding=utf-8 -H < $this->tmpfile 2>&1"; else $this->cmd = "cat ". $this->tmpfile ." | " . $config['tinypspellshell.aspell'] . " -a --encoding=utf-8 -H --lang=". $this->lang; } // Returns array with bad words or false if failed. function checkWords($wordArray) { if ($fh = fopen($this->tmpfile, "w")) { fwrite($fh, "!\n"); foreach($wordArray as $key => $value) fwrite($fh, "^" . $value . "\n"); fclose($fh); } else { $this->errorMsg[] = "PSpell not found."; return array(); } $data = shell_exec($this->cmd); @unlink($this->tmpfile); $returnData = array(); $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY); foreach($dataArr as $dstr) { $matches = array(); // Skip this line. if (strpos($dstr, "@") == 0) continue; preg_match("/\& (.*) .* .*: .*/i", $dstr, $matches); if (!empty($matches[1])) $returnData[] = $matches[1]; } return $returnData; } // Returns array with suggestions or false if failed. function getSuggestion($word) { if (function_exists("mb_convert_encoding")) $word = mb_convert_encoding($word, "ISO-8859-1", mb_detect_encoding($word, "UTF-8")); else $word = utf8_encode($word); if ($fh = fopen($this->tmpfile, "w")) { fwrite($fh, "!\n"); fwrite($fh, "^$word\n"); fclose($fh); } else die("Error opening tmp file."); $data = shell_exec($this->cmd); @unlink($this->tmpfile); $returnData = array(); $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY); foreach($dataArr as $dstr) { $matches = array(); // Skip this line. if (strpos($dstr, "@") == 0) continue; preg_match("/\& .* .* .*: (.*)/i", $dstr, $matches); if (!empty($matches[1])) { // For some reason, the exec version seems to add commas? $returnData[] = str_replace(",", "", $matches[1]); } } return $returnData; } function _debugData($data) { $fh = @fopen("debug.log", 'a+'); @fwrite($fh, $data); @fclose($fh); } } // Setup classname, should be the same as the name of the spellchecker class $spellCheckerConfig['class'] = "TinyPspellShell"; ?>Wwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyGoogleSpell.class.php lang = $lang; } // Returns array with bad words or false if failed. function checkWords($word_array) { $words = array(); $wordstr = implode(' ', $word_array); $matches = $this->_getMatches($wordstr); for ($i=0; $iunhtmlentities(mb_substr($wordstr, $matches[$i][1], $matches[$i][2], "UTF-8")); return $words; } function unhtmlentities($string) { $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string); $string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string); $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); } // Returns array with suggestions or false if failed. function getSuggestion($word) { $sug = array(); $matches = $this->_getMatches($word); if (count($matches) > 0) $sug = explode("\t", utf8_encode($this->unhtmlentities($matches[0][4]))); return $sug; } function _xmlChars($string) { $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); foreach ($trans as $k => $v) $trans[$k] = "&#".ord($k).";"; return strtr($string, $trans); } function _getMatches($word_list) { $server = "www.google.com"; $port = 443; $path = "/tbproxy/spell?lang=" . $this->lang . "&hl=en"; $host = "www.google.com"; $url = "https://" . $server; // Setup XML request $xml = '' . $word_list . ''; $header = "POST ".$path." HTTP/1.0 \r\n"; $header .= "MIME-Version: 1.0 \r\n"; $header .= "Content-type: application/PTI26 \r\n"; $header .= "Content-length: ".strlen($xml)." \r\n"; $header .= "Content-transfer-encoding: text \r\n"; $header .= "Request-number: 1 \r\n"; $header .= "Document-type: Request \r\n"; $header .= "Interface-Version: Test 1.4 \r\n"; $header .= "Connection: close \r\n\r\n"; $header .= $xml; //$this->_debugData($xml); // Use curl if it exists if (function_exists('curl_init')) { // Use curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $xml = curl_exec($ch); curl_close($ch); } else { // Use raw sockets $fp = fsockopen("ssl://" . $server, $port, $errno, $errstr, 30); if ($fp) { // Send request fwrite($fp, $header); // Read response $xml = ""; while (!feof($fp)) $xml .= fgets($fp, 128); fclose($fp); } else echo "Could not open SSL connection to google."; } //$this->_debugData($xml); // Grab and parse content preg_match_all('/([^<]*)<\/c>/', $xml, $matches, PREG_SET_ORDER); return $matches; } function _debugData($data) { $fh = @fopen("debug.log", 'a+'); @fwrite($fh, $data); @fclose($fh); } } // Setup classname, should be the same as the name of the spellchecker class $spellCheckerConfig['class'] = "TinyGoogleSpell"; ?> Rwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspell.class.php`lang = $lang; $this->mode = $mode; $this->plink = false; $this->errorMsg = array(); if (!function_exists("pspell_new")) { $this->errorMsg[] = "PSpell not found."; return; } $this->plink = pspell_new($this->lang, $this->spelling, $this->jargon, $this->encoding, $this->mode); } // Returns array with bad words or false if failed. function checkWords($wordArray) { if (!$this->plink) { $this->errorMsg[] = "No PSpell link found for checkWords."; return array(); } $wordError = array(); foreach($wordArray as $word) { if(!pspell_check($this->plink, trim($word))) $wordError[] = $word; } return $wordError; } // Returns array with suggestions or false if failed. function getSuggestion($word) { if (!$this->plink) { $this->errorMsg[] = "No PSpell link found for getSuggestion."; return array(); } return pspell_suggest($this->plink, $word); } } // Setup classname, should be the same as the name of the spellchecker class $spellCheckerConfig['class'] = "TinyPspell"; ?>Wwordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/TinyPspellShell.class.php lang = $lang; $this->mode = $mode; $this->error = false; $this->errorMsg = array(); $this->tmpfile = tempnam($config['tinypspellshell.tmp'], "tinyspell"); if(preg_match("#win#i",php_uname())) $this->cmd = $config['tinypspellshell.aspell'] . " -a --lang=". $this->lang." --encoding=utf-8 -H < $this->tmpfile 2>&1"; else $this->cmd = "cat ". $this->tmpfile ." | " . $config['tinypspellshell.aspell'] . " -a --encoding=utf-8 -H --lang=". $this->lang; } // Returns array with bad words or false if failed. function checkWords($wordArray) { if ($fh = fopen($this->tmpfile, "w")) { fwrite($fh, "!\n"); foreach($wordArray as $key => $value) fwrite($fh, "^" . $value . "\n"); fclose($fh); } else { $this->errorMsg[] = "PSpell not found."; return array(); } $data = shell_exec($this->cmd); @unlink($this->tmpfile); $returnData = array(); $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY); foreach($dataArr as $dstr) { $matches = array(); // Skip this line. if (strpos($dstr, "@") == 0) continue; preg_match("/\& (.*) .* .*: .*/i", $dstr, $matches); if (!empty($matches[1])) $returnData[] = $matches[1]; } return $returnData; } // Returns array with suggestions or false if failed. function getSuggestion($word) { if (function_exists("mb_convert_encoding")) $word = mb_convert_encoding($word, "ISO-8859-1", mb_detect_encoding($word, "UTF-8")); else $word = utf8_encode($word); if ($fh = fopen($this->tmpfile, "w")) { fwrite($fh, "!\n"); fwrite($fh, "^$word\n"); fclose($fh); } else die("Error opening tmp file."); $data = shell_exec($this->cmd); @unlink($this->tmpfile); $returnData = array(); $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY); foreach($dataArr as $dstr) { $matches = array(); // Skip this line. if (strpos($dstr, "@") == 0) continue; preg_match("/\& .* .* .*: (.*)/i", $dstr, $matches); if (!empty($matches[1])) { // For some reason, the exec version seems to add commas? $returnData[] = str_replace(",", "", $matches[1]); } } return $returnData; } function _debugData($data) { $fh = @fopen("debug.log", 'a+'); @fwrite($fh, $data); @fclose($fh); } } // Setup classname, should be the same as the name of the spellchecker class $spellCheckerConfig['class'] = "TinyPspellShell"; ?>@wordpress/wp-includes/js/tinymce/plugins/spellchecker/config.php0 Ewordpress/wp-includes/js/tinymce/plugins/spellchecker/css/content.cssp.mceItemHiddenSpellWord { background: url('../images/wline.gif') repeat-x bottom left; cursor: default; } Jwordpress/wp-includes/js/tinymce/plugins/spellchecker/css/spellchecker.cssD.mceMsgBox { border: 1px solid gray; padding: 8px; } .mceMsgBox span { vertical-align: top; color: #555555; } /* Misc */ .mceBlockBox { display: none; position: absolute; left: 0; top: 0; z-index: 100; filter:progid:DXImageTransform.Microsoft.Alpha(style=0, opacity=60); -moz-opacity:0.6; opacity: 0.6; background-color: white; } .mceMsgBox { display: none; z-index: 101; position: absolute; left: 0; top: 0; font-family: Arial, Verdana, Tahoma, Helvetica; font-weight: bold; font-size: 11px; background-color: #FFF; } Fwordpress/wp-includes/js/tinymce/plugins/spellchecker/css/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/spellchecker/css svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 content.css file 2008-11-20T16:30:28.000000Z 8d6e330ef6a597e6e4cbd34dd1142d55 2008-10-28T18:17:06.112729Z 97 paul has-props spellchecker.css file 2008-11-20T16:30:28.000000Z 6a3879ddf4a1422a4d297f884272b231 2008-10-28T18:17:06.112729Z 97 paul has-props Ewordpress/wp-includes/js/tinymce/plugins/spellchecker/css/.svn/format8 ]wordpress/wp-includes/js/tinymce/plugins/spellchecker/css/.svn/prop-base/content.css.svn-baseK 14 svn:executable V 1 * END bwordpress/wp-includes/js/tinymce/plugins/spellchecker/css/.svn/prop-base/spellchecker.css.svn-baseK 14 svn:executable V 1 * END ]wordpress/wp-includes/js/tinymce/plugins/spellchecker/css/.svn/text-base/content.css.svn-basep.mceItemHiddenSpellWord { background: url('../images/wline.gif') repeat-x bottom left; cursor: default; } bwordpress/wp-includes/js/tinymce/plugins/spellchecker/css/.svn/text-base/spellchecker.css.svn-baseD.mceMsgBox { border: 1px solid gray; padding: 8px; } .mceMsgBox span { vertical-align: top; color: #555555; } /* Misc */ .mceBlockBox { display: none; position: absolute; left: 0; top: 0; z-index: 100; filter:progid:DXImageTransform.Microsoft.Alpha(style=0, opacity=60); -moz-opacity:0.6; opacity: 0.6; background-color: white; } .mceMsgBox { display: none; z-index: 101; position: absolute; left: 0; top: 0; font-family: Arial, Verdana, Tahoma, Helvetica; font-weight: bold; font-size: 11px; background-color: #FFF; } Fwordpress/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js6rtinyMCE.importPluginLanguagePack('spellchecker','en,fr,sv,nn,nb');var TinyMCE_SpellCheckerPlugin={_contextMenu:new TinyMCE_Menu(),_menu:new TinyMCE_Menu(),_counter:0,_ajaxPage:'/tinyspell.php',getInfo:function(){return{longname:'Spellchecker PHP',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',version:"1.0.3"};},handleEvent:function(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var inst=tinyMCE.selectedInstance,args='';var self=TinyMCE_SpellCheckerPlugin;var cm=self._contextMenu;var p,p2,x,y,sx,sy,h,elm;if((e.type=="click"||e.type=="contextmenu")&&elm){do{if(tinyMCE.getAttrib(elm,'class')=="mceItemHiddenSpellWord"){inst.spellCheckerElm=elm;args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=suggest&check='+encodeURIComponent(elm.innerHTML);args+='&lang='+escape(inst.spellCheckerLang);elm=inst.spellCheckerElm;p=tinyMCE.getAbsPosition(inst.iframeElement);p2=tinyMCE.getAbsPosition(elm);h=parseInt(elm.offsetHeight);sx=inst.getBody().scrollLeft;sy=inst.getBody().scrollTop;x=p.absLeft+p2.absLeft-sx;y=p.absTop+p2.absTop-sy+h;cm.clear();cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait','',true));cm.show();cm.moveTo(x,y);inst.selection.selectNode(elm,false,false);self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);tinyMCE.cancelEvent(e);return false;}}while((elm=elm.parentNode));}return true;},initInstance:function(inst){var self=TinyMCE_SpellCheckerPlugin,m=self._menu,cm=self._contextMenu,e;tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/spellchecker/css/content.css");if(!tinyMCE.hasMenu('spellcheckercontextmenu')){tinyMCE.importCSS(document,tinyMCE.baseURL+"/plugins/spellchecker/css/spellchecker.css");cm.init({drop_menu:false});tinyMCE.addMenu('spellcheckercontextmenu',cm);}if(!tinyMCE.hasMenu('spellcheckermenu')){m.init({});tinyMCE.addMenu('spellcheckermenu',m);}inst.spellCheckerLang='en';self._buildSettingsMenu(inst,null);e=self._getBlockBoxLayer(inst).create('div','mceBlockBox',document.getElementById(inst.editorId+'_parent'));self._getMsgBoxLayer(inst).create('div','mceMsgBox',document.getElementById(inst.editorId+'_parent'));},_getMsgBoxLayer:function(inst){if(!inst.spellCheckerMsgBoxL)inst.spellCheckerMsgBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerMsgBox',false);return inst.spellCheckerMsgBoxL;},_getBlockBoxLayer:function(inst){if(!inst.spellCheckerBoxL)inst.spellCheckerBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerBlockBox',false);return inst.spellCheckerBoxL;},_buildSettingsMenu:function(inst,lang){var i,ar=tinyMCE.getParam('spellchecker_languages','+English=en').split(','),p;var self=TinyMCE_SpellCheckerPlugin,m=self._menu,c;m.clear();m.addTitle(tinyMCE.getLang('lang_spellchecker_langs','',true));for(i=0;i';h+='';h+='';h+='';}else{if(tinyMCE.isMSIE&&!tinyMCE.isOpera)h+='';else h+='';h+='';h+='';h+='';h+='';}return h;},_menuButtonEvent:function(e,o){var t=this;window.setTimeout(function(){t._menuButtonEvent2(e,o);},1);},_menuButtonEvent2:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'');},_toggleMenu:function(editor_id,id){var self=TinyMCE_SpellCheckerPlugin;var e=document.getElementById(editor_id+'_spellchecker');var inst=tinyMCE.getInstanceById(editor_id);if(self._menu.isVisible()){tinyMCE.hideMenus();return;}tinyMCE.lastMenuBtnClass=e.className.replace(/\s.*$/,'');tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonFocus');self._menu.moveRelativeTo(e,'bl');self._menu.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?0:1,-1);if(tinyMCE.isOpera)self._menu.moveBy(0,-2);self._onMenuEvent(inst,self._menu,'show');self._menu.show();tinyMCE.lastSelectedMenuBtn=editor_id+'_spellchecker';},_onMenuEvent:function(inst,m,n){TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst,inst.spellCheckerLang);},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),self=TinyMCE_SpellCheckerPlugin,args='',co,bb,mb,nl,i,e,mbs;switch(command){case"mceSpellCheck":if(!inst.spellcheckerOn){inst.spellCheckerBookmark=inst.selection.getBookmark();if(tinyMCE.isRealIE)tinyMCE.setInnerHTML(inst.getBody(),inst.getBody().innerHTML);args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=spell&check='+encodeURIComponent(self._getWordList(inst.getBody())).replace(/\'/g,'%27');args+='&lang='+escape(inst.spellCheckerLang);co=document.getElementById(inst.editorId+'_parent').firstChild;bb=self._getBlockBoxLayer(inst);bb.moveRelativeTo(co,'tl');bb.resizeTo(co.offsetWidth,co.offsetHeight);bb.show();mb=self._getMsgBoxLayer(inst);e=mb.getElement();if(e.childNodes[0])e.removeChild(e.childNodes[0]);mbs=document.createElement("span");mbs.innerHTML=''+tinyMCE.getLang('lang_spellchecker_swait','',true)+'';e.appendChild(mbs);mb.show();mb.moveRelativeTo(co,'cc');if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i?@[\]^_{|}\u201d\u201c');for(i=0;i0)wl[wl.length]=nl[i];}return wl.join(' ');},_removeWords:function(doc,word,cleanup){var i,c,nl=doc.getElementsByTagName("span");var self=TinyMCE_SpellCheckerPlugin;var inst=tinyMCE.selectedInstance,b=inst?inst.selection.getBookmark():null;word=typeof(word)=='undefined'?null:word;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if((c=='mceItemHiddenSpellWord'||c=='mceItemHidden')&&(word==null||nl[i].innerHTML==word))self._removeWord(nl[i]);}if(b&&!cleanup)inst.selection.moveToBookmark(b);},_checkDone:function(inst){var self=TinyMCE_SpellCheckerPlugin;var w=self._countWords(inst);if(w==0){self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');}},_countWords:function(inst){var i,w=0,nl=inst.getDoc().getElementsByTagName("span"),c;var self=TinyMCE_SpellCheckerPlugin;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if(c=='mceItemHiddenSpellWord')w++;}return w;},_removeWord:function(e){if(e!=null)tinyMCE.setOuterHTML(e,e.innerHTML);},_markWords:function(doc,n,wl){var i,nv,nn,nl=tinyMCE.getNodeTree(n,new Array(),3);var r1,r2,r3,r4,r5,w='';var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i0)w+=wl[i]+((i==wl.length-1)?'':'|');}for(i=0;i$1$2');nv=nv.replace(r3,'$1$2');nn=doc.createElement('span');nn.className="mceItemHidden";nn.innerHTML=nv;nl[i].parentNode.replaceChild(nn,nl[i]);}}},_buildMenu:function(sg,max){var i,self=TinyMCE_SpellCheckerPlugin,cm=self._contextMenu;cm.clear();if(sg!=null){cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug','',true));for(i=0;i,D`+OQA))*B.)$~('p%t丑 H܀aQЋ =:IP ;Iwordpress/wp-includes/js/tinymce/plugins/spellchecker/images/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/spellchecker/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 wline.gif file 2008-11-20T16:30:28.000000Z c136c9f8e00718a98947a21d8adbcc56 2008-10-28T18:17:06.112729Z 97 paul has-props spellchecker.gif file 2008-11-20T16:30:28.000000Z a190764ce4e0f7a227b89a9ce267abcd 2008-10-28T18:17:06.112729Z 97 paul has-props Hwordpress/wp-includes/js/tinymce/plugins/spellchecker/images/.svn/format8 ewordpress/wp-includes/js/tinymce/plugins/spellchecker/images/.svn/prop-base/spellchecker.gif.svn-baseOK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/plugins/spellchecker/images/.svn/prop-base/wline.gif.svn-baseOK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END ewordpress/wp-includes/js/tinymce/plugins/spellchecker/images/.svn/text-base/spellchecker.gif.svn-baseOGIF89aVNWHCMUPZb]g!"&fiu./38:Az|qu0HoݐůկѭCFN|ғOR[adm0P@`Pp`p]vxރjszՙŭݣɭZ^h0X7]@hPxHj`a}ߐѯհӺQpUdoqu@ACxy{@hQvp7ePVЖxmt| (0PX` CKNNVWppp000!`,`LEI!UKTJT[` \`6 Y`XZ ] @ `W `"HS-^Z  _M;4P:F2؃GRF׈CV<;݇3>,D`+OQA))*B.)$~('p%t丑 H܀aQЋ =:IP ;^wordpress/wp-includes/js/tinymce/plugins/spellchecker/images/.svn/text-base/wline.gif.svn-base.GIF89a**!,Df;Fwordpress/wp-includes/js/tinymce/plugins/spellchecker/images/wline.gif.GIF89a**!,Df;Awordpress/wp-includes/js/tinymce/plugins/spellchecker/langs/en.js// UK lang variables tinyMCE.addToLang('spellchecker',{ desc : 'Toggle spellchecker', menu : 'Spellchecker settings', ignore_word : 'Ignore word', ignore_words : 'Ignore all', langs : 'Languages', wait : 'Please wait...', swait : 'Spellchecking, please wait...', sug : 'Suggestions', no_sug : 'No suggestions', no_mpell : 'No misspellings found.', mpell_found : 'Found {$words} misspellings.' }); Hwordpress/wp-includes/js/tinymce/plugins/spellchecker/langs/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/spellchecker/langs svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 en.js file 2008-11-20T16:30:28.000000Z 391dfb5bc08361e0aaf6acc83d1b9e9c 2008-10-28T18:17:06.112729Z 97 paul has-props Gwordpress/wp-includes/js/tinymce/plugins/spellchecker/langs/.svn/format8 Ywordpress/wp-includes/js/tinymce/plugins/spellchecker/langs/.svn/prop-base/en.js.svn-baseK 14 svn:executable V 1 * END Ywordpress/wp-includes/js/tinymce/plugins/spellchecker/langs/.svn/text-base/en.js.svn-base// UK lang variables tinyMCE.addToLang('spellchecker',{ desc : 'Toggle spellchecker', menu : 'Spellchecker settings', ignore_word : 'Ignore word', ignore_words : 'Ignore all', langs : 'Languages', wait : 'Please wait...', swait : 'Spellchecking, please wait...', sug : 'Suggestions', no_sug : 'No suggestions', no_mpell : 'No misspellings found.', mpell_found : 'Found {$words} misspellings.' }); Bwordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/spellchecker svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 editor_plugin.js file 2008-11-20T16:30:28.000000Z 7184878c54ac0ad03d1c3991e53fc48e 2008-10-28T18:17:06.112729Z 97 paul has-props langs dir images dir css dir tinyspell.php file 2008-11-20T16:30:28.000000Z e17be72c22f535cc55c342378e57b447 2008-10-28T18:17:06.112729Z 97 paul has-props config.php file 2008-11-20T16:30:28.000000Z 313994aed7e58e99088a8d05a3025b69 2008-10-28T18:17:06.112729Z 97 paul has-props classes dir Awordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/format8 Xwordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/prop-base/config.php.svn-baseK 14 svn:executable V 1 * END ^wordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/prop-base/editor_plugin.js.svn-baseK 14 svn:executable V 1 * END [wordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/prop-base/tinyspell.php.svn-baseK 14 svn:executable V 1 * END Xwordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/text-base/config.php.svn-base0 ^wordpress/wp-includes/js/tinymce/plugins/spellchecker/.svn/text-base/editor_plugin.js.svn-base6rtinyMCE.importPluginLanguagePack('spellchecker','en,fr,sv,nn,nb');var TinyMCE_SpellCheckerPlugin={_contextMenu:new TinyMCE_Menu(),_menu:new TinyMCE_Menu(),_counter:0,_ajaxPage:'/tinyspell.php',getInfo:function(){return{longname:'Spellchecker PHP',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',version:"1.0.3"};},handleEvent:function(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var inst=tinyMCE.selectedInstance,args='';var self=TinyMCE_SpellCheckerPlugin;var cm=self._contextMenu;var p,p2,x,y,sx,sy,h,elm;if((e.type=="click"||e.type=="contextmenu")&&elm){do{if(tinyMCE.getAttrib(elm,'class')=="mceItemHiddenSpellWord"){inst.spellCheckerElm=elm;args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=suggest&check='+encodeURIComponent(elm.innerHTML);args+='&lang='+escape(inst.spellCheckerLang);elm=inst.spellCheckerElm;p=tinyMCE.getAbsPosition(inst.iframeElement);p2=tinyMCE.getAbsPosition(elm);h=parseInt(elm.offsetHeight);sx=inst.getBody().scrollLeft;sy=inst.getBody().scrollTop;x=p.absLeft+p2.absLeft-sx;y=p.absTop+p2.absTop-sy+h;cm.clear();cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait','',true));cm.show();cm.moveTo(x,y);inst.selection.selectNode(elm,false,false);self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);tinyMCE.cancelEvent(e);return false;}}while((elm=elm.parentNode));}return true;},initInstance:function(inst){var self=TinyMCE_SpellCheckerPlugin,m=self._menu,cm=self._contextMenu,e;tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/spellchecker/css/content.css");if(!tinyMCE.hasMenu('spellcheckercontextmenu')){tinyMCE.importCSS(document,tinyMCE.baseURL+"/plugins/spellchecker/css/spellchecker.css");cm.init({drop_menu:false});tinyMCE.addMenu('spellcheckercontextmenu',cm);}if(!tinyMCE.hasMenu('spellcheckermenu')){m.init({});tinyMCE.addMenu('spellcheckermenu',m);}inst.spellCheckerLang='en';self._buildSettingsMenu(inst,null);e=self._getBlockBoxLayer(inst).create('div','mceBlockBox',document.getElementById(inst.editorId+'_parent'));self._getMsgBoxLayer(inst).create('div','mceMsgBox',document.getElementById(inst.editorId+'_parent'));},_getMsgBoxLayer:function(inst){if(!inst.spellCheckerMsgBoxL)inst.spellCheckerMsgBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerMsgBox',false);return inst.spellCheckerMsgBoxL;},_getBlockBoxLayer:function(inst){if(!inst.spellCheckerBoxL)inst.spellCheckerBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerBlockBox',false);return inst.spellCheckerBoxL;},_buildSettingsMenu:function(inst,lang){var i,ar=tinyMCE.getParam('spellchecker_languages','+English=en').split(','),p;var self=TinyMCE_SpellCheckerPlugin,m=self._menu,c;m.clear();m.addTitle(tinyMCE.getLang('lang_spellchecker_langs','',true));for(i=0;i';h+='';h+='';h+='';}else{if(tinyMCE.isMSIE&&!tinyMCE.isOpera)h+='';else h+='';h+='';h+='';h+='';h+='';}return h;},_menuButtonEvent:function(e,o){var t=this;window.setTimeout(function(){t._menuButtonEvent2(e,o);},1);},_menuButtonEvent2:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'');},_toggleMenu:function(editor_id,id){var self=TinyMCE_SpellCheckerPlugin;var e=document.getElementById(editor_id+'_spellchecker');var inst=tinyMCE.getInstanceById(editor_id);if(self._menu.isVisible()){tinyMCE.hideMenus();return;}tinyMCE.lastMenuBtnClass=e.className.replace(/\s.*$/,'');tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonFocus');self._menu.moveRelativeTo(e,'bl');self._menu.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?0:1,-1);if(tinyMCE.isOpera)self._menu.moveBy(0,-2);self._onMenuEvent(inst,self._menu,'show');self._menu.show();tinyMCE.lastSelectedMenuBtn=editor_id+'_spellchecker';},_onMenuEvent:function(inst,m,n){TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst,inst.spellCheckerLang);},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),self=TinyMCE_SpellCheckerPlugin,args='',co,bb,mb,nl,i,e,mbs;switch(command){case"mceSpellCheck":if(!inst.spellcheckerOn){inst.spellCheckerBookmark=inst.selection.getBookmark();if(tinyMCE.isRealIE)tinyMCE.setInnerHTML(inst.getBody(),inst.getBody().innerHTML);args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=spell&check='+encodeURIComponent(self._getWordList(inst.getBody())).replace(/\'/g,'%27');args+='&lang='+escape(inst.spellCheckerLang);co=document.getElementById(inst.editorId+'_parent').firstChild;bb=self._getBlockBoxLayer(inst);bb.moveRelativeTo(co,'tl');bb.resizeTo(co.offsetWidth,co.offsetHeight);bb.show();mb=self._getMsgBoxLayer(inst);e=mb.getElement();if(e.childNodes[0])e.removeChild(e.childNodes[0]);mbs=document.createElement("span");mbs.innerHTML=''+tinyMCE.getLang('lang_spellchecker_swait','',true)+'';e.appendChild(mbs);mb.show();mb.moveRelativeTo(co,'cc');if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i?@[\]^_{|}\u201d\u201c');for(i=0;i0)wl[wl.length]=nl[i];}return wl.join(' ');},_removeWords:function(doc,word,cleanup){var i,c,nl=doc.getElementsByTagName("span");var self=TinyMCE_SpellCheckerPlugin;var inst=tinyMCE.selectedInstance,b=inst?inst.selection.getBookmark():null;word=typeof(word)=='undefined'?null:word;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if((c=='mceItemHiddenSpellWord'||c=='mceItemHidden')&&(word==null||nl[i].innerHTML==word))self._removeWord(nl[i]);}if(b&&!cleanup)inst.selection.moveToBookmark(b);},_checkDone:function(inst){var self=TinyMCE_SpellCheckerPlugin;var w=self._countWords(inst);if(w==0){self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');}},_countWords:function(inst){var i,w=0,nl=inst.getDoc().getElementsByTagName("span"),c;var self=TinyMCE_SpellCheckerPlugin;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if(c=='mceItemHiddenSpellWord')w++;}return w;},_removeWord:function(e){if(e!=null)tinyMCE.setOuterHTML(e,e.innerHTML);},_markWords:function(doc,n,wl){var i,nv,nn,nl=tinyMCE.getNodeTree(n,new Array(),3);var r1,r2,r3,r4,r5,w='';var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i0)w+=wl[i]+((i==wl.length-1)?'':'|');}for(i=0;i$1$2');nv=nv.replace(r3,'$1$2');nn=doc.createElement('span');nn.className="mceItemHidden";nn.innerHTML=nv;nl[i].parentNode.replaceChild(nn,nl[i]);}}},_buildMenu:function(sg,max){var i,self=TinyMCE_SpellCheckerPlugin,cm=self._contextMenu;cm.clear();if(sg!=null){cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug','',true));for(i=0;i'; die; } // Basic config $defaultLanguage = $spellCheckerConfig['default.language']; $defaultMode = $spellCheckerConfig['default.mode']; // Normaly not required to configure $defaultSpelling = $spellCheckerConfig['default.spelling']; $defaultJargon = $spellCheckerConfig['default.jargon']; $defaultEncoding = $spellCheckerConfig['default.encoding']; $outputType = "xml"; // Do not change // Get input parameters. $check = urldecode($_REQUEST['check']); $cmd = sanitize($_REQUEST['cmd']); $lang = sanitize($_REQUEST['lang'], "strict"); $mode = sanitize($_REQUEST['mode'], "strict"); $spelling = sanitize($_REQUEST['spelling'], "strict"); $jargon = sanitize($_REQUEST['jargon'], "strict"); $encoding = sanitize($_REQUEST['encoding'], "strict"); $sg = sanitize($_REQUEST['sg'], "bool"); $words = array(); $validRequest = true; if (empty($check)) $validRequest = false; if (empty($lang)) $lang = $defaultLanguage; if (empty($mode)) $mode = $defaultMode; if (empty($spelling)) $spelling = $defaultSpelling; if (empty($jargon)) $jargon = $defaultJargon; if (empty($encoding)) $encoding = $defaultEncoding; function sanitize($str, $type="strict") { switch ($type) { case "strict": $str = preg_replace("/[^a-zA-Z0-9_\-]/i", "", $str); break; case "loose": $str = preg_replace("//i", "<", $str); break; case "bool": if ($str == "true" || $str == true) $str = true; else $str = false; break; } return $str; } $result = array(); $tinyspell = new $spellCheckerConfig['class']($spellCheckerConfig, $lang, $mode, $spelling, $jargon, $encoding); if (count($tinyspell->errorMsg) == 0) { switch($cmd) { case "spell": // Space for non-exec version and \n for the exec version. $words = preg_split("/ |\n/", $check, -1, PREG_SPLIT_NO_EMPTY); $result = $tinyspell->checkWords($words); break; case "suggest": $result = $tinyspell->getSuggestion($check); break; default: // Just use this for now. $tinyspell->errorMsg[] = "No command."; $outputType = $outputType . "error"; break; } } else $outputType = $outputType . "error"; if (!$result) $result = array(); // Output data switch($outputType) { case "xml": header('Content-type: text/xml; charset=utf-8'); $body = ''; $body .= "\n"; if (count($result) == 0) $body .= ''; else $body .= ''. urlencode(implode(" ", $result)) .''; echo $body; break; case "xmlerror"; header('Content-type: text/xml; charset=utf-8'); $body = ''; $body .= "\n"; $body .= 'errorMsg) .'" />'; echo $body; break; case "html": var_dump($result); break; case "htmlerror": echo "Error"; break; } ?> Cwordpress/wp-includes/js/tinymce/plugins/spellchecker/tinyspell.php:'; die; } // Basic config $defaultLanguage = $spellCheckerConfig['default.language']; $defaultMode = $spellCheckerConfig['default.mode']; // Normaly not required to configure $defaultSpelling = $spellCheckerConfig['default.spelling']; $defaultJargon = $spellCheckerConfig['default.jargon']; $defaultEncoding = $spellCheckerConfig['default.encoding']; $outputType = "xml"; // Do not change // Get input parameters. $check = urldecode($_REQUEST['check']); $cmd = sanitize($_REQUEST['cmd']); $lang = sanitize($_REQUEST['lang'], "strict"); $mode = sanitize($_REQUEST['mode'], "strict"); $spelling = sanitize($_REQUEST['spelling'], "strict"); $jargon = sanitize($_REQUEST['jargon'], "strict"); $encoding = sanitize($_REQUEST['encoding'], "strict"); $sg = sanitize($_REQUEST['sg'], "bool"); $words = array(); $validRequest = true; if (empty($check)) $validRequest = false; if (empty($lang)) $lang = $defaultLanguage; if (empty($mode)) $mode = $defaultMode; if (empty($spelling)) $spelling = $defaultSpelling; if (empty($jargon)) $jargon = $defaultJargon; if (empty($encoding)) $encoding = $defaultEncoding; function sanitize($str, $type="strict") { switch ($type) { case "strict": $str = preg_replace("/[^a-zA-Z0-9_\-]/i", "", $str); break; case "loose": $str = preg_replace("//i", "<", $str); break; case "bool": if ($str == "true" || $str == true) $str = true; else $str = false; break; } return $str; } $result = array(); $tinyspell = new $spellCheckerConfig['class']($spellCheckerConfig, $lang, $mode, $spelling, $jargon, $encoding); if (count($tinyspell->errorMsg) == 0) { switch($cmd) { case "spell": // Space for non-exec version and \n for the exec version. $words = preg_split("/ |\n/", $check, -1, PREG_SPLIT_NO_EMPTY); $result = $tinyspell->checkWords($words); break; case "suggest": $result = $tinyspell->getSuggestion($check); break; default: // Just use this for now. $tinyspell->errorMsg[] = "No command."; $outputType = $outputType . "error"; break; } } else $outputType = $outputType . "error"; if (!$result) $result = array(); // Output data switch($outputType) { case "xml": header('Content-type: text/xml; charset=utf-8'); $body = ''; $body .= "\n"; if (count($result) == 0) $body .= ''; else $body .= ''. urlencode(implode(" ", $result)) .''; echo $body; break; case "xmlerror"; header('Content-type: text/xml; charset=utf-8'); $body = ''; $body .= "\n"; $body .= 'errorMsg) .'" />'; echo $body; break; case "html": var_dump($result); break; case "htmlerror": echo "Error"; break; } ?> 5wordpress/wp-includes/js/tinymce/plugins/.svn/entriess8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 wphelp dir directionality dir spellchecker dir inlinepopups dir autosave dir wordpress dir paste dir 4wordpress/wp-includes/js/tinymce/plugins/.svn/format8 Cwordpress/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.jsZ/* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('wordpress', 'en'); var TinyMCE_wordpressPlugin = { getInfo : function() { return { longname : 'WordPress Plugin', author : 'WordPress', authorurl : 'http://wordpress.org', infourl : 'http://wordpress.org', version : '1' }; }, getControlHTML : function(control_name) { switch (control_name) { case "wp_more": return tinyMCE.getButtonHTML(control_name, 'lang_wordpress_more_button', '{$pluginurl}/images/more.gif', 'wpMore'); case "wp_page": return tinyMCE.getButtonHTML(control_name, 'lang_wordpress_page_button', '{$pluginurl}/images/page.gif', 'wpPage'); case "wp_help": var buttons = tinyMCE.getButtonHTML(control_name, 'lang_help_button_title', '{$pluginurl}/images/help.gif', 'wpHelp'); var hiddenControls = '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    '; return buttons+hiddenControls; case "wp_adv": return tinyMCE.getButtonHTML(control_name, 'lang_wordpress_adv_button', '{$pluginurl}/images/toolbars.gif', 'wpAdv'); case "wp_adv_start": return ''; } return ''; }, execCommand : function(editor_id, element, command, user_interface, value) { var inst = tinyMCE.getInstanceById(editor_id); var focusElm = inst.getFocusElement(); var doc = inst.getDoc(); function getAttrib(elm, name) { return elm.getAttribute(name) ? elm.getAttribute(name) : ""; } // Handle commands switch (command) { case "wpMore": var flag = ""; var template = new Array(); var altMore = tinyMCE.getLang('lang_wordpress_more_alt'); // Is selection a image if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") { flag = getAttrib(focusElm, 'class'); if (flag != 'mce_plugin_wordpress_more') // Not a wordpress return true; action = "update"; } html = '' + ''; tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, html); tinyMCE.selectedInstance.repaint(); return true; case "wpPage": var flag = ""; var template = new Array(); var altPage = tinyMCE.getLang('lang_wordpress_more_alt'); // Is selection a image if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") { flag = getAttrib(focusElm, 'name'); if (flag != 'mce_plugin_wordpress_page') // Not a wordpress return true; action = "update"; } html = '' + ''; tinyMCE.execCommand("mceInsertContent",true,html); tinyMCE.selectedInstance.repaint(); return true; case "wpHelp": var template = new Array(); template['file'] = tinyMCE.baseURL + '/wp-mce-help.php'; template['width'] = 480; template['height'] = 380; args = { resizable : 'yes', scrollbars : 'yes' }; tinyMCE.openWindow(template, args); return true; case "wpAdv": var adv = document.getElementById('wpadvbar'); if ( adv.style.display == 'none' ) { adv.style.display = 'block'; tinyMCE.switchClass(editor_id + '_wp_adv', 'mceButtonSelected'); } else { adv.style.display = 'none'; tinyMCE.switchClass(editor_id + '_wp_adv', 'mceButtonNormal'); } return true; } // Pass to next handler in chain return false; }, cleanup : function(type, content) { switch (type) { case "insert_to_editor": var startPos = 0; var altMore = tinyMCE.getLang('lang_wordpress_more_alt'); var altPage = tinyMCE.getLang('lang_wordpress_page_alt'); // Parse all tags and replace them with images while ((startPos = content.indexOf('', startPos) + 3; // Insert image var moreText = content.substring(startPos + 8, endPos - 3); var contentAfter = content.substring(endPos); content = content.substring(0, startPos); content += ''; content += contentAfter; startPos++; } var startPos = 0; // Parse all tags and replace them with images while ((startPos = content.indexOf('', startPos)) != -1) { // Insert image var contentAfter = content.substring(startPos + 15); content = content.substring(0, startPos); content += ''; content += contentAfter; startPos++; } // Look for \n in
    , replace with 
    var startPos = -1; while ((startPos = content.indexOf('', startPos+1); var innerPos = content.indexOf('>', startPos+1); var chunkBefore = content.substring(0, innerPos); var chunkAfter = content.substring(endPos); var innards = content.substring(innerPos, endPos); innards = innards.replace(/\n/g, '
    '); content = chunkBefore + innards + chunkAfter; } break; case "get_from_editor": // Parse all img tags and replace them with var startPos = -1; while ((startPos = content.indexOf('', startPos); var attribs = this._parseAttributes(content.substring(startPos + 4, endPos)); if (attribs['class'] == "mce_plugin_wordpress_more" || attribs['name'] == "mce_plugin_wordpress_more") { endPos += 2; var moreText = attribs['moretext'] ? attribs['moretext'] : ''; var embedHTML = ''; // Insert embed/object chunk chunkBefore = content.substring(0, startPos); chunkAfter = content.substring(endPos); content = chunkBefore + embedHTML + chunkAfter; } if (attribs['class'] == "mce_plugin_wordpress_page" || attribs['name'] == "mce_plugin_wordpress_page") { endPos += 2; var embedHTML = ''; // Insert embed/object chunk chunkBefore = content.substring(0, startPos); chunkAfter = content.substring(endPos); content = chunkBefore + embedHTML + chunkAfter; } } // Remove normal line breaks content = content.replace(/\n|\r/g, ' '); // Look for
    in
    , replace with \n
    				var startPos = -1;
    				while ((startPos = content.indexOf('', startPos+1);
    					var innerPos = content.indexOf('>', startPos+1);
    					var chunkBefore = content.substring(0, innerPos);
    					var chunkAfter = content.substring(endPos);
    					
    					var innards = content.substring(innerPos, endPos);
    					innards = innards.replace(new RegExp('', 'g'), '\n');
    					innards = innards.replace(new RegExp('\\s$', ''), '');
    					content = chunkBefore + innards + chunkAfter;
    				}
    
    				// Remove anonymous, empty paragraphs.
    				content = content.replace(new RegExp('

    (\\s| )*

    ', 'mg'), ''); // Handle table badness. content = content.replace(new RegExp('<(table( [^>]*)?)>.*?<((tr|thead)( [^>]*)?)>', 'mg'), '<$1><$3>'); content = content.replace(new RegExp('<(tr|thead|tfoot)>.*?<((td|th)( [^>]*)?)>', 'mg'), '<$1><$2>'); content = content.replace(new RegExp('.*?<(td( [^>]*)?|th( [^>]*)?|/tr|/thead|/tfoot)>', 'mg'), '<$2>'); content = content.replace(new RegExp('.*?<(tr|/table)>', 'mg'), '<$1>'); content = content.replace(new RegExp('<(/?(table|tbody|tr|th|td)[^>]*)>(\\s*|(
    )*)*', 'g'), '<$1>'); // Pretty it up for the source editor. var blocklist = 'blockquote|ul|ol|li|table|thead|tr|th|td|div|h\\d|pre|p'; content = content.replace(new RegExp('\\s*\\s*', 'mg'), '\n'); content = content.replace(new RegExp('\\s*<(('+blocklist+')[^>]*)>', 'mg'), '\n<$1>'); content = content.replace(new RegExp('<((li|/?tr|/?thead|/?tfoot)( [^>]*)?)>', 'g'), '\t<$1>'); content = content.replace(new RegExp('<((td|th)( [^>]*)?)>', 'g'), '\t\t<$1>'); content = content.replace(new RegExp('\\s*
    \\s*', 'mg'), '
    \n'); content = content.replace(new RegExp('^\\s*', ''), ''); content = content.replace(new RegExp('\\s*$', ''), ''); break; } // Pass through to next handler in chain return content; }, handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { tinyMCE.switchClass(editor_id + '_wp_more', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_wp_page', 'mceButtonNormal'); if (node == null) return; do { if (node.nodeName.toLowerCase() == "img" && tinyMCE.getAttrib(node, 'class').indexOf('mce_plugin_wordpress_more') == 0) tinyMCE.switchClass(editor_id + '_wp_more', 'mceButtonSelected'); if (node.nodeName.toLowerCase() == "img" && tinyMCE.getAttrib(node, 'class').indexOf('mce_plugin_wordpress_page') == 0) tinyMCE.switchClass(editor_id + '_wp_page', 'mceButtonSelected'); } while ((node = node.parentNode)); return true; }, saveCallback : function(el, content, body) { // We have a TON of cleanup to do. // Mark

    if it has any attributes. content = content.replace(new RegExp('(]+>.*?)

    ', 'mg'), '$1'); // Decode the ampersands of time. // content = content.replace(new RegExp('&', 'g'), '&'); // Get it ready for wpautop. content = content.replace(new RegExp('\\s*

    ', 'mgi'), ''); content = content.replace(new RegExp('\\s*

    \\s*', 'mgi'), '\n\n'); content = content.replace(new RegExp('\\n\\s*\\n', 'mgi'), '\n\n'); content = content.replace(new RegExp('\\s*
    \\s*', 'gi'), '\n'); // Fix some block element newline issues var blocklist = 'blockquote|ul|ol|li|table|thead|tr|th|td|div|h\\d|pre'; content = content.replace(new RegExp('\\s*<(('+blocklist+') ?[^>]*)\\s*>', 'mg'), '\n<$1>'); content = content.replace(new RegExp('\\s*\\s*', 'mg'), '\n'); content = content.replace(new RegExp('
  • ', 'g'), '\t
  • '); // Unmark special paragraph closing tags content = content.replace(new RegExp('', 'g'), '

    \n'); content = content.replace(new RegExp('\\s*(]+>.*

    )', 'mg'), '\n$1'); // Trim trailing whitespace content = content.replace(new RegExp('\\s*$', ''), ''); // Hope. return content; }, _parseAttributes : function(attribute_string) { var attributeName = ""; var attributeValue = ""; var withInName; var withInValue; var attributes = new Array(); var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g'); var titleText = tinyMCE.getLang('lang_wordpress_more'); var titleTextPage = tinyMCE.getLang('lang_wordpress_page'); if (attribute_string == null || attribute_string.length < 2) return null; withInName = withInValue = false; for (var i=0; i
  • !ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '
    ' "); // Hmm... return pee; } Bwordpress/wp-includes/js/tinymce/plugins/wordpress/images/help.gif'GIF89aO^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g!,'dihHY_fUNTFfD"TX$b1pLJ%px$G“a It%qH d8&bmz^~%u & & ' }( Q* 44!;Fwordpress/wp-includes/js/tinymce/plugins/wordpress/images/more_bug.gifGIF89a !, cڋB"U@`n։ $z] ؂ALz~V*nʪ5>8d'' Z.ns}R;Bwordpress/wp-includes/js/tinymce/plugins/wordpress/images/more.giflGIF89afff!,={塸Wmp2cW7Enċ 4m9~rMV!9"C@TFS;Fwordpress/wp-includes/js/tinymce/plugins/wordpress/images/page_bug.gifGIF89a !, -ڋHY['rLfk< 5̭Jndiêx1EL܎={,ª'0l=ŧbvHȨri @Yiy) *P;Bwordpress/wp-includes/js/tinymce/plugins/wordpress/images/page.giflGIF89afff!,=`L*R=xiʶ ǂ0smp tYH% d"R@R$FQL;Fwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/wordpress/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 page.gif file 2008-11-20T16:30:29.000000Z ec8d1ed1b0fd137cacdda9e316ebed31 2008-10-28T18:17:06.112729Z 97 paul has-props more_bug.gif file 2008-11-20T16:30:29.000000Z c38cc928b95c0be49ec083648084d190 2008-10-28T18:17:06.112729Z 97 paul has-props more.gif file 2008-11-20T16:30:29.000000Z dff3bc0a01a614b601b7826415bfe4ca 2008-10-28T18:17:06.112729Z 97 paul has-props toolbars.gif file 2008-11-20T16:30:29.000000Z 33e46a907572061c981e459ae022b40d 2008-10-28T18:17:06.112729Z 97 paul has-props help.gif file 2008-11-20T16:30:29.000000Z 4cd4a5d2cdcd74c8aeced17813afd6ea 2008-10-28T18:17:06.112729Z 97 paul has-props page_bug.gif file 2008-11-20T16:30:29.000000Z 32a68c86a6beffdd042abf0b0c595328 2008-10-28T18:17:06.112729Z 97 paul has-props Ewordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/format8 Zwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/prop-base/help.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/prop-base/more_bug.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/prop-base/more.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/prop-base/page_bug.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/prop-base/page.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/prop-base/toolbars.gif.svn-baseOK 14 svn:executable V 1 * K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/text-base/help.gif.svn-base'GIF89aO^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g!,'dihHY_fUNTFfD"TX$b1pLJ%px$G“a It%qH d8&bmz^~%u & & ' }( Q* 44!;^wordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/text-base/more_bug.gif.svn-baseGIF89a !, cڋB"U@`n։ $z] ؂ALz~V*nʪ5>8d'' Z.ns}R;Zwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/text-base/more.gif.svn-baselGIF89afff!,={塸Wmp2cW7Enċ 4m9~rMV!9"C@TFS;^wordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/text-base/page_bug.gif.svn-baseGIF89a !, -ڋHY['rLfk< 5̭Jndiêx1EL܎={,ª'0l=ŧbvHȨri @Yiy) *P;Zwordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/text-base/page.gif.svn-baselGIF89afff!,=`L*R=xiʶ ǂ0smp tYH% d"R@R$FQL;^wordpress/wp-includes/js/tinymce/plugins/wordpress/images/.svn/text-base/toolbars.gif.svn-baseGIF89a6|iIUXjxm,.79zBER79Dfj~JM[̙c:vzaޢrLr*nS%@BOPqyR[@I~ck!,'dih٬lbtm3M@X Iq90"N`$ Gq0Gvr C Rx z`HJVXzo]q  > C:  :61+eli%!;Fwordpress/wp-includes/js/tinymce/plugins/wordpress/images/toolbars.gifGIF89a6|iIUXjxm,.79zBER79Dfj~JM[̙c:vzaޢrLr*nS%@BOPqyR[@I~ck!,'dih٬lbtm3M@X Iq90"N`$ Gq0Gvr C Rx z`HJVXzo]q  > C:  :61+eli%!;>wordpress/wp-includes/js/tinymce/plugins/wordpress/langs/en.js// EN lang variables if (navigator.userAgent.indexOf('Mac OS') != -1) { // Mac OS browsers use Ctrl to hit accesskeys var metaKey = 'Ctrl'; } else { var metaKey = 'Alt'; } tinyMCE.addToLang('',{ wordpress_more_button : 'Split post with More tag (' + metaKey + '+t)', wordpress_page_button : 'Split post with Page tag', wordpress_adv_button : 'Show/Hide Advanced Toolbar (' + metaKey + '+b)', wordpress_more_alt : 'More...', wordpress_page_alt : '...page...', help_button_title : 'Help (' + metaKey + '+h)', bold_desc : 'Bold (Ctrl+B)', italic_desc : 'Italic (Ctrl+I)', underline_desc : 'Underline (Ctrl+U)', link_desc : 'Insert/edit link (' + metaKey + '+a)', unlink_desc : 'Unlink (' + metaKey + '+s)', image_desc : 'Insert/edit image (' + metaKey + '+m)', striketrough_desc : 'Strikethrough (' + metaKey + '+k)', justifyleft_desc : 'Align left (' + metaKey + '+f)', justifycenter_desc : 'Align center (' + metaKey + '+c)', justifyright_desc : 'Align right (' + metaKey + '+r)', justifyfull_desc : 'Align full (' + metaKey + '+j)', bullist_desc : 'Unordered list (' + metaKey + '+l)', numlist_desc : 'Ordered list (' + metaKey + '+o)', outdent_desc : 'Outdent (' + metaKey + '+w)', indent_desc : 'Indent list/blockquote (' + metaKey + '+q)' }); Ewordpress/wp-includes/js/tinymce/plugins/wordpress/langs/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/wordpress/langs svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 en.js file 2008-11-20T16:30:29.000000Z 1b2855b206fa83e79b040809db339eb3 2008-10-28T18:17:06.112729Z 97 paul Dwordpress/wp-includes/js/tinymce/plugins/wordpress/langs/.svn/format8 Vwordpress/wp-includes/js/tinymce/plugins/wordpress/langs/.svn/text-base/en.js.svn-base// EN lang variables if (navigator.userAgent.indexOf('Mac OS') != -1) { // Mac OS browsers use Ctrl to hit accesskeys var metaKey = 'Ctrl'; } else { var metaKey = 'Alt'; } tinyMCE.addToLang('',{ wordpress_more_button : 'Split post with More tag (' + metaKey + '+t)', wordpress_page_button : 'Split post with Page tag', wordpress_adv_button : 'Show/Hide Advanced Toolbar (' + metaKey + '+b)', wordpress_more_alt : 'More...', wordpress_page_alt : '...page...', help_button_title : 'Help (' + metaKey + '+h)', bold_desc : 'Bold (Ctrl+B)', italic_desc : 'Italic (Ctrl+I)', underline_desc : 'Underline (Ctrl+U)', link_desc : 'Insert/edit link (' + metaKey + '+a)', unlink_desc : 'Unlink (' + metaKey + '+s)', image_desc : 'Insert/edit image (' + metaKey + '+m)', striketrough_desc : 'Strikethrough (' + metaKey + '+k)', justifyleft_desc : 'Align left (' + metaKey + '+f)', justifycenter_desc : 'Align center (' + metaKey + '+c)', justifyright_desc : 'Align right (' + metaKey + '+r)', justifyfull_desc : 'Align full (' + metaKey + '+j)', bullist_desc : 'Unordered list (' + metaKey + '+l)', numlist_desc : 'Ordered list (' + metaKey + '+o)', outdent_desc : 'Outdent (' + metaKey + '+w)', indent_desc : 'Indent list/blockquote (' + metaKey + '+q)' }); =wordpress/wp-includes/js/tinymce/plugins/wordpress/popups.css/* This file contains the CSS data for all popups in TinyMCE */ body { background-color: #F0F0EE; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; margin: 8px; } td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; } input { background: #FFFFFF; border: 1px solid #cccccc; } td, input, select, textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } input, select, textarea { border: 1px solid #808080; } .input_noborder { border: 0; } #insert, .updateButton { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/insert_button_bg.gif'); cursor: pointer; } #cancel { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/cancel_button_bg.gif'); cursor: pointer; } /* Mozilla only style */ html>body #insert, html>body #cancel { padding-bottom: 2px; } .title { display: block; padding-top: 5px; padding-bottom: 5px; padding-left: 15px; font-size: 15px; } table.charmap { border-style: solid; border-width: 1px; border-color: #AAAAAA; } td.charmap, td.charmapOver { color: #000000; border-color: #AAAAAA; border-style: solid; border-width: 1px; text-align: center; font-size: 12px; } td.charmapOver { background-color: #CCCCCC; cursor: default; } a.charmap { color: #000000; text-decoration: none } .wordWrapCode { vertical-align: middle; border: 1px none #000000; background-color: transparent; } input.radio { border: 1px none #000000; background-color: transparent; vertical-align: middle; } input.checkbox { border: 1px none #000000; background-color: transparent; vertical-align: middle; } .mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { margin-left: 1px; } .mceButtonNormal { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceButtonOver { border: 1px solid #0A246A; cursor: default; background-color: #B6BDD2; } .mceButtonDown { cursor: default; border: 1px solid #0A246A; background-color: #8592B5; } .mceButtonDisabled { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); -moz-opacity:0.3; opacity: 0.3; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceActionPanel { margin-top: 5px; } /* Tabs classes */ .tabs { float: left; width: 100%; line-height: normal; background-image: url("../images/xp/tabs_bg.gif"); } .tabs ul { margin: 0; padding: 0 0 0; list-style: none; } .tabs li { float: left; background: url("../images/xp/tab_bg.gif") no-repeat left top; margin: 0; margin-left: 0; margin-right: 2px; padding: 0 0 0 10px; line-height: 18px; } .tabs li.current { background: url("../images/xp/tab_sel_bg.gif") no-repeat left top; margin-right: 2px; } .tabs span { float: left; display: block; background: url("../images/xp/tab_end.gif") no-repeat right top; padding: 0px 10px 0 0; } .tabs .current span { background: url("../images/xp/tab_sel_end.gif") no-repeat right top; } .tabs a { text-decoration: none; font-family: Verdana, Arial; font-size: 10px; } .tabs a:link, .tabs a:visited, .tabs a:hover { color: black; } .tabs a:hover { } .tabs .current { } .tabs .current a, .tabs .current a:link, .tabs .current a:visited { } .panel_wrapper div.panel { display: none; } .panel_wrapper div.current { display: block; width: 100%; height: 300px; overflow: visible; /* Should be auto but that breaks Safari */ } .panel_wrapper { border: 1px solid #919B9C; border-top: 0px; padding: 10px; padding-top: 5px; clear: both; background-color: white; } fieldset { border: 1px solid #919B9C; font-family: Verdana, Arial; font-size: 10px; padding: 0; margin: 0; padding: 4px; } legend { color: #2B6FB6; font-weight: bold; } .properties { width: 100%; } .properties .column1 { } .properties .column2 { text-align: left; } a:link, a:visited { color: black; } a:hover { color: #2B6FB6; } #plugintable thead { font-weight: bold; background-color: #DDDDDD; } #plugintable, #about #plugintable td { border: 1px solid #919B9C; } #plugintable { width: 99%; margin-top: 10px; } #pluginscontainer { height: 290px; overflow: auto; } /* MSIE Specific styles */ * html .panel_wrapper { width: 100%; } .column { float: left; } h1, h2, h3, h4 { color: #2B6FB6; margin: 0; padding: 0; padding-top: 5px; } h3 { font-size: 14px; } #link .panel_wrapper, #link div.current { height: 125px; } #image .panel_wrapper, #image div.current { height: 190px; } /* Disables the advanced tab in the table plugin. */ /* #table #advanced_tab { display: none; } */ /* Disables the border input field and label in the table plugin. */ /* #table #border, #table #borderlabel { display: none; } */ #insert, #cancel, .submitbutton { font: 13px Verdana, Arial, Helvetica, sans-serif; height: auto; width: auto; background-color: transparent; background-image: url(../../../../../wp-admin/images/fade-butt.png); background-repeat: repeat; border: 3px double; border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(204, 204, 204); border-top-color: rgb(204, 204, 204); color: rgb(51, 51, 51); padding: 0.25em 0.75em; } #insert:active, #cancel:active, .submitbutton:active { background: #f4f4f4; border-left-color: #999; border-top-color: #999; } ?wordpress/wp-includes/js/tinymce/plugins/wordpress/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/wordpress svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 editor_plugin.js file 2008-11-20T16:30:29.000000Z 8caa3a7ba57a57088a1ac11cff852966 2008-10-28T18:17:06.112729Z 97 paul wordpress.css file 2008-11-20T16:30:29.000000Z 327263b7922359d6456d38a3dbdb33fe 2008-10-28T18:17:06.112729Z 97 paul langs dir images dir popups.css file 2008-11-20T16:30:29.000000Z b548e47b5fef91f0a2ac405e0d2bde23 2008-10-28T18:17:06.112729Z 97 paul >wordpress/wp-includes/js/tinymce/plugins/wordpress/.svn/format8 [wordpress/wp-includes/js/tinymce/plugins/wordpress/.svn/text-base/editor_plugin.js.svn-baseZ/* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('wordpress', 'en'); var TinyMCE_wordpressPlugin = { getInfo : function() { return { longname : 'WordPress Plugin', author : 'WordPress', authorurl : 'http://wordpress.org', infourl : 'http://wordpress.org', version : '1' }; }, getControlHTML : function(control_name) { switch (control_name) { case "wp_more": return tinyMCE.getButtonHTML(control_name, 'lang_wordpress_more_button', '{$pluginurl}/images/more.gif', 'wpMore'); case "wp_page": return tinyMCE.getButtonHTML(control_name, 'lang_wordpress_page_button', '{$pluginurl}/images/page.gif', 'wpPage'); case "wp_help": var buttons = tinyMCE.getButtonHTML(control_name, 'lang_help_button_title', '{$pluginurl}/images/help.gif', 'wpHelp'); var hiddenControls = '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    '; return buttons+hiddenControls; case "wp_adv": return tinyMCE.getButtonHTML(control_name, 'lang_wordpress_adv_button', '{$pluginurl}/images/toolbars.gif', 'wpAdv'); case "wp_adv_start": return ''; } return ''; }, execCommand : function(editor_id, element, command, user_interface, value) { var inst = tinyMCE.getInstanceById(editor_id); var focusElm = inst.getFocusElement(); var doc = inst.getDoc(); function getAttrib(elm, name) { return elm.getAttribute(name) ? elm.getAttribute(name) : ""; } // Handle commands switch (command) { case "wpMore": var flag = ""; var template = new Array(); var altMore = tinyMCE.getLang('lang_wordpress_more_alt'); // Is selection a image if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") { flag = getAttrib(focusElm, 'class'); if (flag != 'mce_plugin_wordpress_more') // Not a wordpress return true; action = "update"; } html = '' + ''; tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, html); tinyMCE.selectedInstance.repaint(); return true; case "wpPage": var flag = ""; var template = new Array(); var altPage = tinyMCE.getLang('lang_wordpress_more_alt'); // Is selection a image if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") { flag = getAttrib(focusElm, 'name'); if (flag != 'mce_plugin_wordpress_page') // Not a wordpress return true; action = "update"; } html = '' + ''; tinyMCE.execCommand("mceInsertContent",true,html); tinyMCE.selectedInstance.repaint(); return true; case "wpHelp": var template = new Array(); template['file'] = tinyMCE.baseURL + '/wp-mce-help.php'; template['width'] = 480; template['height'] = 380; args = { resizable : 'yes', scrollbars : 'yes' }; tinyMCE.openWindow(template, args); return true; case "wpAdv": var adv = document.getElementById('wpadvbar'); if ( adv.style.display == 'none' ) { adv.style.display = 'block'; tinyMCE.switchClass(editor_id + '_wp_adv', 'mceButtonSelected'); } else { adv.style.display = 'none'; tinyMCE.switchClass(editor_id + '_wp_adv', 'mceButtonNormal'); } return true; } // Pass to next handler in chain return false; }, cleanup : function(type, content) { switch (type) { case "insert_to_editor": var startPos = 0; var altMore = tinyMCE.getLang('lang_wordpress_more_alt'); var altPage = tinyMCE.getLang('lang_wordpress_page_alt'); // Parse all tags and replace them with images while ((startPos = content.indexOf('', startPos) + 3; // Insert image var moreText = content.substring(startPos + 8, endPos - 3); var contentAfter = content.substring(endPos); content = content.substring(0, startPos); content += ''; content += contentAfter; startPos++; } var startPos = 0; // Parse all tags and replace them with images while ((startPos = content.indexOf('', startPos)) != -1) { // Insert image var contentAfter = content.substring(startPos + 15); content = content.substring(0, startPos); content += ''; content += contentAfter; startPos++; } // Look for \n in
    , replace with 
    var startPos = -1; while ((startPos = content.indexOf('', startPos+1); var innerPos = content.indexOf('>', startPos+1); var chunkBefore = content.substring(0, innerPos); var chunkAfter = content.substring(endPos); var innards = content.substring(innerPos, endPos); innards = innards.replace(/\n/g, '
    '); content = chunkBefore + innards + chunkAfter; } break; case "get_from_editor": // Parse all img tags and replace them with var startPos = -1; while ((startPos = content.indexOf('', startPos); var attribs = this._parseAttributes(content.substring(startPos + 4, endPos)); if (attribs['class'] == "mce_plugin_wordpress_more" || attribs['name'] == "mce_plugin_wordpress_more") { endPos += 2; var moreText = attribs['moretext'] ? attribs['moretext'] : ''; var embedHTML = ''; // Insert embed/object chunk chunkBefore = content.substring(0, startPos); chunkAfter = content.substring(endPos); content = chunkBefore + embedHTML + chunkAfter; } if (attribs['class'] == "mce_plugin_wordpress_page" || attribs['name'] == "mce_plugin_wordpress_page") { endPos += 2; var embedHTML = ''; // Insert embed/object chunk chunkBefore = content.substring(0, startPos); chunkAfter = content.substring(endPos); content = chunkBefore + embedHTML + chunkAfter; } } // Remove normal line breaks content = content.replace(/\n|\r/g, ' '); // Look for
    in
    , replace with \n
    				var startPos = -1;
    				while ((startPos = content.indexOf('', startPos+1);
    					var innerPos = content.indexOf('>', startPos+1);
    					var chunkBefore = content.substring(0, innerPos);
    					var chunkAfter = content.substring(endPos);
    					
    					var innards = content.substring(innerPos, endPos);
    					innards = innards.replace(new RegExp('', 'g'), '\n');
    					innards = innards.replace(new RegExp('\\s$', ''), '');
    					content = chunkBefore + innards + chunkAfter;
    				}
    
    				// Remove anonymous, empty paragraphs.
    				content = content.replace(new RegExp('

    (\\s| )*

    ', 'mg'), ''); // Handle table badness. content = content.replace(new RegExp('<(table( [^>]*)?)>.*?<((tr|thead)( [^>]*)?)>', 'mg'), '<$1><$3>'); content = content.replace(new RegExp('<(tr|thead|tfoot)>.*?<((td|th)( [^>]*)?)>', 'mg'), '<$1><$2>'); content = content.replace(new RegExp('.*?<(td( [^>]*)?|th( [^>]*)?|/tr|/thead|/tfoot)>', 'mg'), '<$2>'); content = content.replace(new RegExp('.*?<(tr|/table)>', 'mg'), '<$1>'); content = content.replace(new RegExp('<(/?(table|tbody|tr|th|td)[^>]*)>(\\s*|(
    )*)*', 'g'), '<$1>'); // Pretty it up for the source editor. var blocklist = 'blockquote|ul|ol|li|table|thead|tr|th|td|div|h\\d|pre|p'; content = content.replace(new RegExp('\\s*\\s*', 'mg'), '\n'); content = content.replace(new RegExp('\\s*<(('+blocklist+')[^>]*)>', 'mg'), '\n<$1>'); content = content.replace(new RegExp('<((li|/?tr|/?thead|/?tfoot)( [^>]*)?)>', 'g'), '\t<$1>'); content = content.replace(new RegExp('<((td|th)( [^>]*)?)>', 'g'), '\t\t<$1>'); content = content.replace(new RegExp('\\s*
    \\s*', 'mg'), '
    \n'); content = content.replace(new RegExp('^\\s*', ''), ''); content = content.replace(new RegExp('\\s*$', ''), ''); break; } // Pass through to next handler in chain return content; }, handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { tinyMCE.switchClass(editor_id + '_wp_more', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_wp_page', 'mceButtonNormal'); if (node == null) return; do { if (node.nodeName.toLowerCase() == "img" && tinyMCE.getAttrib(node, 'class').indexOf('mce_plugin_wordpress_more') == 0) tinyMCE.switchClass(editor_id + '_wp_more', 'mceButtonSelected'); if (node.nodeName.toLowerCase() == "img" && tinyMCE.getAttrib(node, 'class').indexOf('mce_plugin_wordpress_page') == 0) tinyMCE.switchClass(editor_id + '_wp_page', 'mceButtonSelected'); } while ((node = node.parentNode)); return true; }, saveCallback : function(el, content, body) { // We have a TON of cleanup to do. // Mark

    if it has any attributes. content = content.replace(new RegExp('(]+>.*?)

    ', 'mg'), '$1'); // Decode the ampersands of time. // content = content.replace(new RegExp('&', 'g'), '&'); // Get it ready for wpautop. content = content.replace(new RegExp('\\s*

    ', 'mgi'), ''); content = content.replace(new RegExp('\\s*

    \\s*', 'mgi'), '\n\n'); content = content.replace(new RegExp('\\n\\s*\\n', 'mgi'), '\n\n'); content = content.replace(new RegExp('\\s*
    \\s*', 'gi'), '\n'); // Fix some block element newline issues var blocklist = 'blockquote|ul|ol|li|table|thead|tr|th|td|div|h\\d|pre'; content = content.replace(new RegExp('\\s*<(('+blocklist+') ?[^>]*)\\s*>', 'mg'), '\n<$1>'); content = content.replace(new RegExp('\\s*\\s*', 'mg'), '\n'); content = content.replace(new RegExp('
  • ', 'g'), '\t
  • '); // Unmark special paragraph closing tags content = content.replace(new RegExp('', 'g'), '

    \n'); content = content.replace(new RegExp('\\s*(]+>.*

    )', 'mg'), '\n$1'); // Trim trailing whitespace content = content.replace(new RegExp('\\s*$', ''), ''); // Hope. return content; }, _parseAttributes : function(attribute_string) { var attributeName = ""; var attributeValue = ""; var withInName; var withInValue; var attributes = new Array(); var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g'); var titleText = tinyMCE.getLang('lang_wordpress_more'); var titleTextPage = tinyMCE.getLang('lang_wordpress_page'); if (attribute_string == null || attribute_string.length < 2) return null; withInName = withInValue = false; for (var i=0; i
  • !ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '
    ' "); // Hmm... return pee; } Uwordpress/wp-includes/js/tinymce/plugins/wordpress/.svn/text-base/popups.css.svn-base/* This file contains the CSS data for all popups in TinyMCE */ body { background-color: #F0F0EE; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; margin: 8px; } td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; } input { background: #FFFFFF; border: 1px solid #cccccc; } td, input, select, textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } input, select, textarea { border: 1px solid #808080; } .input_noborder { border: 0; } #insert, .updateButton { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/insert_button_bg.gif'); cursor: pointer; } #cancel { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/cancel_button_bg.gif'); cursor: pointer; } /* Mozilla only style */ html>body #insert, html>body #cancel { padding-bottom: 2px; } .title { display: block; padding-top: 5px; padding-bottom: 5px; padding-left: 15px; font-size: 15px; } table.charmap { border-style: solid; border-width: 1px; border-color: #AAAAAA; } td.charmap, td.charmapOver { color: #000000; border-color: #AAAAAA; border-style: solid; border-width: 1px; text-align: center; font-size: 12px; } td.charmapOver { background-color: #CCCCCC; cursor: default; } a.charmap { color: #000000; text-decoration: none } .wordWrapCode { vertical-align: middle; border: 1px none #000000; background-color: transparent; } input.radio { border: 1px none #000000; background-color: transparent; vertical-align: middle; } input.checkbox { border: 1px none #000000; background-color: transparent; vertical-align: middle; } .mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { margin-left: 1px; } .mceButtonNormal { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceButtonOver { border: 1px solid #0A246A; cursor: default; background-color: #B6BDD2; } .mceButtonDown { cursor: default; border: 1px solid #0A246A; background-color: #8592B5; } .mceButtonDisabled { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); -moz-opacity:0.3; opacity: 0.3; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceActionPanel { margin-top: 5px; } /* Tabs classes */ .tabs { float: left; width: 100%; line-height: normal; background-image: url("../images/xp/tabs_bg.gif"); } .tabs ul { margin: 0; padding: 0 0 0; list-style: none; } .tabs li { float: left; background: url("../images/xp/tab_bg.gif") no-repeat left top; margin: 0; margin-left: 0; margin-right: 2px; padding: 0 0 0 10px; line-height: 18px; } .tabs li.current { background: url("../images/xp/tab_sel_bg.gif") no-repeat left top; margin-right: 2px; } .tabs span { float: left; display: block; background: url("../images/xp/tab_end.gif") no-repeat right top; padding: 0px 10px 0 0; } .tabs .current span { background: url("../images/xp/tab_sel_end.gif") no-repeat right top; } .tabs a { text-decoration: none; font-family: Verdana, Arial; font-size: 10px; } .tabs a:link, .tabs a:visited, .tabs a:hover { color: black; } .tabs a:hover { } .tabs .current { } .tabs .current a, .tabs .current a:link, .tabs .current a:visited { } .panel_wrapper div.panel { display: none; } .panel_wrapper div.current { display: block; width: 100%; height: 300px; overflow: visible; /* Should be auto but that breaks Safari */ } .panel_wrapper { border: 1px solid #919B9C; border-top: 0px; padding: 10px; padding-top: 5px; clear: both; background-color: white; } fieldset { border: 1px solid #919B9C; font-family: Verdana, Arial; font-size: 10px; padding: 0; margin: 0; padding: 4px; } legend { color: #2B6FB6; font-weight: bold; } .properties { width: 100%; } .properties .column1 { } .properties .column2 { text-align: left; } a:link, a:visited { color: black; } a:hover { color: #2B6FB6; } #plugintable thead { font-weight: bold; background-color: #DDDDDD; } #plugintable, #about #plugintable td { border: 1px solid #919B9C; } #plugintable { width: 99%; margin-top: 10px; } #pluginscontainer { height: 290px; overflow: auto; } /* MSIE Specific styles */ * html .panel_wrapper { width: 100%; } .column { float: left; } h1, h2, h3, h4 { color: #2B6FB6; margin: 0; padding: 0; padding-top: 5px; } h3 { font-size: 14px; } #link .panel_wrapper, #link div.current { height: 125px; } #image .panel_wrapper, #image div.current { height: 190px; } /* Disables the advanced tab in the table plugin. */ /* #table #advanced_tab { display: none; } */ /* Disables the border input field and label in the table plugin. */ /* #table #border, #table #borderlabel { display: none; } */ #insert, #cancel, .submitbutton { font: 13px Verdana, Arial, Helvetica, sans-serif; height: auto; width: auto; background-color: transparent; background-image: url(../../../../../wp-admin/images/fade-butt.png); background-repeat: repeat; border: 3px double; border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(204, 204, 204); border-top-color: rgb(204, 204, 204); color: rgb(51, 51, 51); padding: 0.25em 0.75em; } #insert:active, #cancel:active, .submitbutton:active { background: #f4f4f4; border-left-color: #999; border-top-color: #999; } Xwordpress/wp-includes/js/tinymce/plugins/wordpress/.svn/text-base/wordpress.css.svn-base.mce_plugin_wordpress_more { border: 0px; border-top: 1px dotted #cccccc; display:block; background-color: #ffffff; margin-top:15px; background-image: url(images/more_bug.gif); background-repeat: no-repeat; background-position: right top; } .mce_plugin_wordpress_page { border: 0px; border-top: 1px dotted #cccccc; display:block; background-color: #ffffff; margin-top:15px; background-image: url(images/page_bug.gif); background-repeat: no-repeat; background-position: right top; } /* This file contains the CSS data for the editable area(iframe) of TinyMCE */ /* You can extend this CSS by adding your own CSS file with the the content_css option */ body { background: #fff; font: 1em/1.3em Georgia, "Times New Roman", Times, serif; padding: .5em; } td { font-size: 10px; } pre { font-family: "Courier New", fixed; font-size: 11px; line-height: 13px; } .mceVisualAid { border: 1px dashed #BBBBBB !important; } .mceItemAnchor { width: 12px; line-height: 6px; overflow: hidden; padding-left: 12px; background-position: bottom; background-repeat: no-repeat; } /* Important is needed in Gecko browsers inorder to style links */ /* a { color: green !important; } */ /* Style selection range colors in Gecko browsers */ /* ::-moz-selection { background-color: red; color: green; } */ /* MSIE specific */ * html body { scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; }@wordpress/wp-includes/js/tinymce/plugins/wordpress/wordpress.css.mce_plugin_wordpress_more { border: 0px; border-top: 1px dotted #cccccc; display:block; background-color: #ffffff; margin-top:15px; background-image: url(images/more_bug.gif); background-repeat: no-repeat; background-position: right top; } .mce_plugin_wordpress_page { border: 0px; border-top: 1px dotted #cccccc; display:block; background-color: #ffffff; margin-top:15px; background-image: url(images/page_bug.gif); background-repeat: no-repeat; background-position: right top; } /* This file contains the CSS data for the editable area(iframe) of TinyMCE */ /* You can extend this CSS by adding your own CSS file with the the content_css option */ body { background: #fff; font: 1em/1.3em Georgia, "Times New Roman", Times, serif; padding: .5em; } td { font-size: 10px; } pre { font-family: "Courier New", fixed; font-size: 11px; line-height: 13px; } .mceVisualAid { border: 1px dashed #BBBBBB !important; } .mceItemAnchor { width: 12px; line-height: 6px; overflow: hidden; padding-left: 12px; background-position: bottom; background-repeat: no-repeat; } /* Important is needed in Gecko browsers inorder to style links */ /* a { color: green !important; } */ /* Style selection range colors in Gecko browsers */ /* ::-moz-selection { background-color: red; color: green; } */ /* MSIE specific */ * html body { scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; }@wordpress/wp-includes/js/tinymce/plugins/wphelp/editor_plugin.js/* Import plugin specific language pack */ tinyMCE.importPluginLanguagePack('wphelp', ''); function TinyMCE_wphelp_getControlHTML(control_name) { switch (control_name) { case "wphelp": var titleHelp = tinyMCE.getLang('lang_help_button_title'); var buttons = ''; var hiddenControls = '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    '; return buttons+hiddenControls; } return ""; } function TinyMCE_wphelp_execCommand(editor_id, element, command, user_interface, value) { // Handle commands switch (command) { case "mceWordPressHelp": var template = new Array(); template['file'] = tinyMCE.baseURL + '/wp-mce-help.php'; template['width'] = 480; template['height'] = 380; args = { resizable : 'yes', scrollbars : 'yes' }; tinyMCE.openWindow(template, args); return true; } // Pass to next handler in chain return false; } ?wordpress/wp-includes/js/tinymce/plugins/wphelp/images/help.gif'GIF89aO^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g!,'dihHY_fUNTFfD"TX$b1pLJ%px$G“a It%qH d8&bmz^~%u & & ' }( Q* 44!;Cwordpress/wp-includes/js/tinymce/plugins/wphelp/images/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/wphelp/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 help.gif file 2008-11-20T16:30:28.000000Z 4cd4a5d2cdcd74c8aeced17813afd6ea 2008-10-28T18:17:06.112729Z 97 paul has-props Bwordpress/wp-includes/js/tinymce/plugins/wphelp/images/.svn/format8 Wwordpress/wp-includes/js/tinymce/plugins/wphelp/images/.svn/prop-base/help.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Wwordpress/wp-includes/js/tinymce/plugins/wphelp/images/.svn/text-base/help.gif.svn-base'GIF89aO^u"Zr9ZBzrýP5nSVMp_ܑ̰"X"g!,'dihHY_fUNTFfD"TX$b1pLJ%px$G“a It%qH d8&bmz^~%u & & ' }( Q* 44!;;wordpress/wp-includes/js/tinymce/plugins/wphelp/langs/en.jsT// EN lang variables tinyMCE.addToLang('',{ help_button_title : 'Help (Alt+h)' }); Bwordpress/wp-includes/js/tinymce/plugins/wphelp/langs/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/plugins/wphelp/langs svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 en.js file 2008-11-20T16:30:27.000000Z 487b329696681dcf9ea87ec093da28ad 2008-10-28T18:17:06.112729Z 97 paul Awordpress/wp-includes/js/tinymce/plugins/wphelp/langs/.svn/format8 Swordpress/wp-includes/js/tinymce/plugins/wphelp/langs/.svn/text-base/en.js.svn-baseT// EN lang variables tinyMCE.addToLang('',{ help_button_title : 'Help (Alt+h)' }); '; var hiddenControls = '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
    '; return buttons+hiddenControls; } return ""; } function TinyMCE_wphelp_execCommand(editor_id, element, command, user_interface, value) { // Handle commands switch (command) { case "mceWordPressHelp": var template = new Array(); template['file'] = tinyMCE.baseURL + '/wp-mce-help.php'; template['width'] = 480; template['height'] = 380; args = { resizable : 'yes', scrollbars : 'yes' }; tinyMCE.openWindow(template, args); return true; } // Pass to next handler in chain return false; } -wordpress/wp-includes/js/tinymce/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 utils dir license.txt file 2008-11-20T16:30:33.000000Z 0571cf371683742c14f1735079a78e38 2008-10-28T18:17:06.112729Z 97 paul plugins dir tiny_mce.js file 2008-11-20T16:30:33.000000Z 25e1e78d5b0c221e98e14c6e8c62084f 2008-10-28T18:17:06.112729Z 97 paul tiny_mce_config.php file 2008-11-20T16:30:33.000000Z 57d7a6e1a9378dc2c15c009b09a62abe 2008-10-28T18:17:06.112729Z 97 paul langs dir wp-mce-help.php file 2008-11-20T16:30:33.000000Z a86837cc2d94f0b8109a5c1f9fa3a2b6 2008-10-28T18:17:06.112729Z 97 paul themes dir license.html file 2008-11-20T16:30:33.000000Z 46c1f90a66583219a5f60451a3f3244e 2008-10-28T18:17:06.112729Z 97 paul tiny_mce_popup.js file 2008-11-20T16:30:33.000000Z 2e1d0f50dc25586e43e6609f2ef9cc0e 2008-10-28T18:17:06.112729Z 97 paul tiny_mce_gzip.php file 2008-11-20T16:30:33.000000Z 7d27e3f0d0388f671090f2f43f7839d4 2008-10-28T18:17:06.112729Z 97 paul blank.htm file 2008-11-20T16:30:33.000000Z a35859a0902cbc290d6638823d50df88 2008-10-28T18:17:06.112729Z 97 paul ,wordpress/wp-includes/js/tinymce/.svn/format8 Bwordpress/wp-includes/js/tinymce/.svn/text-base/blank.htm.svn-base blank_page Ewordpress/wp-includes/js/tinymce/.svn/text-base/license.html.svn-base_ TinyMCE License (LGPL)

    TinyMCE License (LGPL)

    Visit the FAQ for general answers surrounding TinyMCE. Or visit http://www.fsf.org for more information about Open-Source licenses.

    		  GNU LIBRARY GENERAL PUBLIC LICENSE
    		       Version 2, June 1991
    
     Copyright (C) 1991 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.
    
    [This is the first released version of the library GPL.  It is
     numbered 2 because it goes with version 2 of the ordinary GPL.]
    
    			    Preamble
    
      The licenses for most software are designed to take away your
    freedom to share and change it.  By contrast, the GNU General Public
    Licenses are intended to guarantee your freedom to share and change
    free software--to make sure the software is free for all its users.
    
      This license, the Library General Public License, applies to some
    specially designated Free Software Foundation software, and to any
    other libraries whose authors decide to use it.  You can use it for
    your libraries, 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 library, or if you modify it.
    
      For example, if you distribute copies of the library, whether gratis
    or for a fee, you must give the recipients all the rights that we gave
    you.  You must make sure that they, too, receive or can get the source
    code.  If you link a program with the library, you must provide
    complete object files to the recipients so that they can relink them
    with the library, after making changes to the library and recompiling
    it.  And you must show them these terms so they know their rights.
    
      Our method of protecting your rights has two steps: (1) copyright
    the library, and (2) offer you this license which gives you legal
    permission to copy, distribute and/or modify the library.
    
      Also, for each distributor's protection, we want to make certain
    that everyone understands that there is no warranty for this free
    library.  If the library is modified by someone else and passed on, we
    want its recipients to know that what they have is not the original
    version, 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 companies distributing free
    software will individually obtain patent licenses, thus in effect
    transforming the program into proprietary software.  To prevent this,
    we have made it clear that any patent must be licensed for everyone's
    free use or not licensed at all.
    
      Most GNU software, including some libraries, is covered by the ordinary
    GNU General Public License, which was designed for utility programs.  This
    license, the GNU Library General Public License, applies to certain
    designated libraries.  This license is quite different from the ordinary
    one; be sure to read it in full, and don't assume that anything in it is
    the same as in the ordinary license.
    
      The reason we have a separate public license for some libraries is that
    they blur the distinction we usually make between modifying or adding to a
    program and simply using it.  Linking a program with a library, without
    changing the library, is in some sense simply using the library, and is
    analogous to running a utility program or application program.  However, in
    a textual and legal sense, the linked executable is a combined work, a
    derivative of the original library, and the ordinary General Public License
    treats it as such.
    
      Because of this blurred distinction, using the ordinary General
    Public License for libraries did not effectively promote software
    sharing, because most developers did not use the libraries.  We
    concluded that weaker conditions might promote sharing better.
    
      However, unrestricted linking of non-free programs would deprive the
    users of those programs of all benefit from the free status of the
    libraries themselves.  This Library General Public License is intended to
    permit developers of non-free programs to use free libraries, while
    preserving your freedom as a user of such programs to change the free
    libraries that are incorporated in them.  (We have not seen how to achieve
    this as regards changes in header files, but we have achieved it as regards
    changes in the actual functions of the Library.)  The hope is that this
    will lead to faster development of free libraries.
    
      The precise terms and conditions for copying, distribution and
    modification follow.  Pay close attention to the difference between a
    "work based on the library" and a "work that uses the library".  The
    former contains code derived from the library, while the latter only
    works together with the library.
    
      Note that it is possible for a library to be covered by the ordinary
    General Public License rather than by this special one.
    .
    		  GNU LIBRARY GENERAL PUBLIC LICENSE
       TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    
      0. This License Agreement applies to any software library which
    contains a notice placed by the copyright holder or other authorized
    party saying it may be distributed under the terms of this Library
    General Public License (also called "this License").  Each licensee is
    addressed as "you".
    
      A "library" means a collection of software functions and/or data
    prepared so as to be conveniently linked with application programs
    (which use some of those functions and data) to form executables.
    
      The "Library", below, refers to any such software library or work
    which has been distributed under these terms.  A "work based on the
    Library" means either the Library or any derivative work under
    copyright law: that is to say, a work containing the Library or a
    portion of it, either verbatim or with modifications and/or translated
    straightforwardly into another language.  (Hereinafter, translation is
    included without limitation in the term "modification".)
    
      "Source code" for a work means the preferred form of the work for
    making modifications to it.  For a library, 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 library.
    
      Activities other than copying, distribution and modification are not
    covered by this License; they are outside its scope.  The act of
    running a program using the Library is not restricted, and output from
    such a program is covered only if its contents constitute a work based
    on the Library (independent of the use of the Library in a tool for
    writing it).  Whether that is true depends on what the Library does
    and what the program that uses the Library does.
      
      1. You may copy and distribute verbatim copies of the Library's
    complete 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 distribute a copy of this License along with the
    Library.
    
      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 Library or any portion
    of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
    
        b) You must cause the files modified to carry prominent notices
        stating that you changed the files and the date of any change.
    
        c) You must cause the whole of the work to be licensed at no
        charge to all third parties under the terms of this License.
    
        d) If a facility in the modified Library refers to a function or a
        table of data to be supplied by an application program that uses
        the facility, other than as an argument passed when the facility
        is invoked, then you must make a good faith effort to ensure that,
        in the event an application does not supply such function or
        table, the facility still operates, and performs whatever part of
        its purpose remains meaningful.
    
        (For example, a function in a library to compute square roots has
        a purpose that is entirely well-defined independent of the
        application.  Therefore, Subsection 2d requires that any
        application-supplied function or table used by this function must
        be optional: if the application does not supply it, the square
        root function must still compute square roots.)
    
    These requirements apply to the modified work as a whole.  If
    identifiable sections of that work are not derived from the Library,
    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 Library, 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 Library.
    
    In addition, mere aggregation of another work not based on the Library
    with the Library (or with a work based on the Library) on a volume of
    a storage or distribution medium does not bring the other work under
    the scope of this License.
    
      3. You may opt to apply the terms of the ordinary GNU General Public
    License instead of this License to a given copy of the Library.  To do
    this, you must alter all the notices that refer to this License, so
    that they refer to the ordinary GNU General Public License, version 2,
    instead of to this License.  (If a newer version than version 2 of the
    ordinary GNU General Public License has appeared, then you can specify
    that version instead if you wish.)  Do not make any other change in
    these notices.
    .
      Once this change is made in a given copy, it is irreversible for
    that copy, so the ordinary GNU General Public License applies to all
    subsequent copies and derivative works made from that copy.
    
      This option is useful when you wish to copy part of the code of
    the Library into a program that is not a library.
    
      4. You may copy and distribute the Library (or a portion or
    derivative of it, under Section 2) in object code or executable form
    under the terms of Sections 1 and 2 above provided that you 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.
    
      If distribution of 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 satisfies the requirement to
    distribute the source code, even though third parties are not
    compelled to copy the source along with the object code.
    
      5. A program that contains no derivative of any portion of the
    Library, but is designed to work with the Library by being compiled or
    linked with it, is called a "work that uses the Library".  Such a
    work, in isolation, is not a derivative work of the Library, and
    therefore falls outside the scope of this License.
    
      However, linking a "work that uses the Library" with the Library
    creates an executable that is a derivative of the Library (because it
    contains portions of the Library), rather than a "work that uses the
    library".  The executable is therefore covered by this License.
    Section 6 states terms for distribution of such executables.
    
      When a "work that uses the Library" uses material from a header file
    that is part of the Library, the object code for the work may be a
    derivative work of the Library even though the source code is not.
    Whether this is true is especially significant if the work can be
    linked without the Library, or if the work is itself a library.  The
    threshold for this to be true is not precisely defined by law.
    
      If such an object file uses only numerical parameters, data
    structure layouts and accessors, and small macros and small inline
    functions (ten lines or less in length), then the use of the object
    file is unrestricted, regardless of whether it is legally a derivative
    work.  (Executables containing this object code plus portions of the
    Library will still fall under Section 6.)
    
      Otherwise, if the work is a derivative of the Library, you may
    distribute the object code for the work under the terms of Section 6.
    Any executables containing that work also fall under Section 6,
    whether or not they are linked directly with the Library itself.
    .
      6. As an exception to the Sections above, you may also compile or
    link a "work that uses the Library" with the Library to produce a
    work containing portions of the Library, and distribute that work
    under terms of your choice, provided that the terms permit
    modification of the work for the customer's own use and reverse
    engineering for debugging such modifications.
    
      You must give prominent notice with each copy of the work that the
    Library is used in it and that the Library and its use are covered by
    this License.  You must supply a copy of this License.  If the work
    during execution displays copyright notices, you must include the
    copyright notice for the Library among them, as well as a reference
    directing the user to the copy of this License.  Also, you must do one
    of these things:
    
        a) Accompany the work with the complete corresponding
        machine-readable source code for the Library including whatever
        changes were used in the work (which must be distributed under
        Sections 1 and 2 above); and, if the work is an executable linked
        with the Library, with the complete machine-readable "work that
        uses the Library", as object code and/or source code, so that the
        user can modify the Library and then relink to produce a modified
        executable containing the modified Library.  (It is understood
        that the user who changes the contents of definitions files in the
        Library will not necessarily be able to recompile the application
        to use the modified definitions.)
    
        b) Accompany the work with a written offer, valid for at
        least three years, to give the same user the materials
        specified in Subsection 6a, above, for a charge no more
        than the cost of performing this distribution.
    
        c) If distribution of the work is made by offering access to copy
        from a designated place, offer equivalent access to copy the above
        specified materials from the same place.
    
        d) Verify that the user has already received a copy of these
        materials or that you have already sent this user a copy.
    
      For an executable, the required form of the "work that uses the
    Library" must include any data and utility programs needed for
    reproducing the executable from it.  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.
    
      It may happen that this requirement contradicts the license
    restrictions of other proprietary libraries that do not normally
    accompany the operating system.  Such a contradiction means you cannot
    use both them and the Library together in an executable that you
    distribute.
    .
      7. You may place library facilities that are a work based on the
    Library side-by-side in a single library together with other library
    facilities not covered by this License, and distribute such a combined
    library, provided that the separate distribution of the work based on
    the Library and of the other library facilities is otherwise
    permitted, and provided that you do these two things:
    
        a) Accompany the combined library with a copy of the same work
        based on the Library, uncombined with any other library
        facilities.  This must be distributed under the terms of the
        Sections above.
    
        b) Give prominent notice with the combined library of the fact
        that part of it is a work based on the Library, and explaining
        where to find the accompanying uncombined form of the same work.
    
      8. You may not copy, modify, sublicense, link with, or distribute
    the Library except as expressly provided under this License.  Any
    attempt otherwise to copy, modify, sublicense, link with, or
    distribute the Library is void, and will automatically terminate your
    rights under this License.  However, parties who have received copies,
    or rights, from you under this License will not have their licenses
    terminated so long as such parties remain in full compliance.
    
      9. 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 Library or its derivative works.  These actions are
    prohibited by law if you do not accept this License.  Therefore, by
    modifying or distributing the Library (or any work based on the
    Library), you indicate your acceptance of this License to do so, and
    all its terms and conditions for copying, distributing or modifying
    the Library or works based on it.
    
      10. Each time you redistribute the Library (or any work based on the
    Library), the recipient automatically receives a license from the
    original licensor to copy, distribute, link with or modify the Library
    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.
    .
      11. 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 Library at all.  For example, if a patent
    license would not permit royalty-free redistribution of the Library 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 Library.
    
    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.
    
      12. If the distribution and/or use of the Library is restricted in
    certain countries either by patents or by copyrighted interfaces, the
    original copyright holder who places the Library 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.
    
      13. The Free Software Foundation may publish revised and/or new
    versions of the Library 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 Library
    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 Library does not specify a
    license version number, you may choose any version ever published by
    the Free Software Foundation.
    .
      14. If you wish to incorporate parts of the Library into other free
    programs whose distribution conditions are incompatible with these,
    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
    
      15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    OTHER PARTIES PROVIDE THE LIBRARY "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
    LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    
      16. 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 LIBRARY 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
    LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    DAMAGES.
    
    		     END OF TERMS AND CONDITIONS
    
    Dwordpress/wp-includes/js/tinymce/.svn/text-base/license.txt.svn-basei3 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! Lwordpress/wp-includes/js/tinymce/.svn/text-base/tiny_mce_config.php.svn-base initArray = { mode : "specific_textareas", editor_selector : "mceEditor", width : "100%", theme : "advanced", theme_advanced_buttons1 : "", theme_advanced_buttons2 : "", theme_advanced_buttons3 : "", language : "", theme_advanced_toolbar_location : "top", theme_advanced_toolbar_align : "left", theme_advanced_path_location : "bottom", theme_advanced_resizing : true, browsers : "", dialog_type : "modal", theme_advanced_resize_horizontal : false, convert_urls : false, relative_urls : false, remove_script_host : false, force_p_newlines : true, force_br_newlines : false, convert_newlines_to_brs : false, remove_linebreaks : false, fix_list_elements : true, gecko_spellcheck : true, entities : "38,amp,60,lt,62,gt", button_tile_map : true, content_css : "", valid_elements : "", save_callback : 'TinyMCE_wordpressPlugin.saveCallback', imp_version : "", plugins : "" }; tinyMCE.init(initArray); Jwordpress/wp-includes/js/tinymce/.svn/text-base/tiny_mce_gzip.php.svn-base(} -1) { // Write main script and patch some things if ( $index == 0 ) { // Add core $content .= wp_compact_tinymce_js(getFileContents("tiny_mce" . $suffix . ".js")); $content .= 'TinyMCE.prototype.orgLoadScript = TinyMCE.prototype.loadScript;'; $content .= 'TinyMCE.prototype.loadScript = function() {};var realTinyMCE = tinyMCE;'; } else $content .= 'tinyMCE = realTinyMCE;'; // Patch loading functions //$content .= "tinyMCE_GZ.start();"; // Do init based on index $content .= "tinyMCE.init(tinyMCECompressed.configs[" . $index . "]);"; // Load external plugins if ( $index == 0 ) $content .= "tinyMCECompressed.loadPlugins();"; // Add core languages $lang_content = ''; foreach ($languages as $lang) $lang_content .= getFileContents("langs/" . $lang . ".js"); if ( empty($lang_content) ) $lang_content .= getFileContents("langs/en.js"); $content .= $lang_content; // Add themes foreach ($themes as $theme) { $content .= wp_compact_tinymce_js(getFileContents( "themes/" . $theme . "/editor_template" . $suffix . ".js")); $lang_content = ''; foreach ($languages as $lang) $lang_content .= getFileContents("themes/" . $theme . "/langs/" . $lang . ".js"); if ( empty($lang_content) ) $lang_content .= getFileContents("themes/" . $theme . "/langs/en.js"); $content .= $lang_content; } // Add plugins foreach ($plugins as $plugin) { $content .= getFileContents("plugins/" . $plugin . "/editor_plugin" . $suffix . ".js"); $lang_content = ''; foreach ($languages as $lang) $lang_content .= getFileContents("plugins/" . $plugin . "/langs/" . $lang . ".js"); if ( empty($lang_content) ) $lang_content .= getFileContents("plugins/" . $plugin . "/langs/en.js"); $content .= $lang_content; } // Add custom files foreach ($custom as $file) $content .= getFileContents($file); // Reset tinyMCE compressor engine $content .= "tinyMCE = tinyMCECompressed;"; // Restore loading functions //$content .= "tinyMCE_GZ.end();"; // Generate GZIP'd content if ($supportsGzip) { if ($compress) { header("Content-Encoding: " . $enc); $cacheData = gzencode($content, 9, FORCE_GZIP); } else $cacheData = $content; // Write gz file if ($diskCache && $cacheKey != "") putFileContents($cacheFile, $cacheData); // Stream to client echo $cacheData; } else { // Stream uncompressed content echo $content; } die; } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ function getParam($name, $def = false) { if (!isset($_GET[$name])) return $def; return preg_replace("/[^0-9a-z\-_,]+/i", "", $_GET[$name]); // Remove anything but 0-9,a-z,-_ } function getFileContents($path) { $path = realpath($path); if (!$path || !@is_file($path)) return ""; if (function_exists("file_get_contents")) return @file_get_contents($path); $content = ""; $fp = @fopen($path, "r"); if (!$fp) return ""; while (!feof($fp)) $content .= fgets($fp); fclose($fp); return $content; } function putFileContents($path, $content) { if (function_exists("file_put_contents")) return @file_put_contents($path, $content); $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); } } // WP specific function wp_compact_tinymce_js($text) { // This function was custom-made for TinyMCE 2.0, not expected to work with any other JS. // Strip comments $text = preg_replace("!(^|\s+)//.*$!m", '', $text); $text = preg_replace("!/\*.*?\*/!s", '', $text); // Strip leading tabs, carriage returns and unnecessary line breaks. $text = preg_replace("!^\t+!m", '', $text); $text = str_replace("\r", '', $text); $text = preg_replace("!(^|{|}|;|:|\))\n!m", '\\1', $text); return "$text\n"; } ?> function TinyMCECompressed() { this.configs = new Array(); this.loadedFiles = new Array(); this.externalPlugins = new Array(); this.loadAdded = false; this.isLoaded = false; } TinyMCECompressed.prototype.init = function(settings) { var elements = document.getElementsByTagName('script'); var scriptURL = ""; for (var i=0; i'); if (!this.loadAdded) { tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCECompressed.prototype.onLoad); tinyMCE.addEvent(window, "load", TinyMCECompressed.prototype.onLoad); this.loadAdded = true; } } TinyMCECompressed.prototype.onLoad = function() { if (tinyMCE.isLoaded) return true; tinyMCE = realTinyMCE; TinyMCE_Engine.prototype.onLoad(); tinyMCE._addUnloadEvents(); tinyMCE.isLoaded = true; } TinyMCECompressed.prototype.addEvent = function(o, n, h) { if (o.attachEvent) o.attachEvent("on" + n, h); else o.addEventListener(n, h, false); } TinyMCECompressed.prototype.getOnce = function(str) { var ar = str.replace(/\s+/g, '').split(','); for (var i=0; i'); this._def("font_size_classes", ''); this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true); this._def("event_elements", 'a,img', true); this._def("convert_urls", true); this._def("table_inline_editing", false); this._def("object_resizing", true); this._def("custom_shortcuts", true); this._def("convert_on_click", false); this._def("content_css", ''); this._def("fix_list_elements", true); this._def("fix_table_elements", false); this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml'); this._def("hidden_tab_class", ''); this._def("display_tab_class", ''); this._def("gecko_spellcheck", false); this._def("hide_selects_on_submit", true); // Force strict loading mode to false on non Gecko browsers if (this.isMSIE && !this.isOpera) this.settings.strict_loading_mode = false; // Browser check IE if (this.isMSIE && this.settings['browsers'].indexOf('msie') == -1) return; // Browser check Gecko if (this.isGecko && this.settings['browsers'].indexOf('gecko') == -1) return; // Browser check Safari if (this.isSafari && this.settings['browsers'].indexOf('safari') == -1) return; // Browser check Opera if (this.isOpera && this.settings['browsers'].indexOf('opera') == -1) return; // If not super absolute make it so baseHREF = tinyMCE.settings['document_base_url']; var h = document.location.href; var p = h.indexOf('://'); if (p > 0 && document.location.protocol != "file:") { p = h.indexOf('/', p + 3); h = h.substring(0, p); if (baseHREF.indexOf('://') == -1) baseHREF = h + baseHREF; tinyMCE.settings['document_base_url'] = baseHREF; tinyMCE.settings['document_base_prefix'] = h; } // Trim away query part if (baseHREF.indexOf('?') != -1) baseHREF = baseHREF.substring(0, baseHREF.indexOf('?')); this.settings['base_href'] = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/"; theme = this.settings['theme']; this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment'; this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment'; this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP'; this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i"); this.posKeyCodes = new Array(13,45,36,35,33,34,37,38,39,40); this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL this.uniqueTag = ''; this.callbacks = new Array('onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance'); // Theme url this.settings['theme_href'] = tinyMCE.baseURL + "/themes/" + theme; if (!tinyMCE.isIE || tinyMCE.isOpera) this.settings['force_br_newlines'] = false; if (tinyMCE.getParam("popups_css", false)) { var cssPath = tinyMCE.getParam("popups_css", ""); // Is relative if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') this.settings['popups_css'] = this.documentBasePath + "/" + cssPath; else this.settings['popups_css'] = cssPath; } else this.settings['popups_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css"; if (tinyMCE.getParam("editor_css", false)) { var cssPath = tinyMCE.getParam("editor_css", ""); // Is relative if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') this.settings['editor_css'] = this.documentBasePath + "/" + cssPath; else this.settings['editor_css'] = cssPath; } else { if (this.settings.editor_css != '') this.settings['editor_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css"; } if (tinyMCE.settings['debug']) { var msg = "Debug: \n"; msg += "baseURL: " + this.baseURL + "\n"; msg += "documentBasePath: " + this.documentBasePath + "\n"; msg += "content_css: " + this.settings['content_css'] + "\n"; msg += "popups_css: " + this.settings['popups_css'] + "\n"; msg += "editor_css: " + this.settings['editor_css'] + "\n"; alert(msg); } // Only do this once if (this.configs.length == 0) { if (typeof(TinyMCECompressed) == "undefined") { tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad); if (tinyMCE.isRealIE) { if (document.body) tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad); else tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad); } tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad); tinyMCE._addUnloadEvents(); } } this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings['theme'] + '/editor_template' + tinyMCE.srcMode + '.js'); this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings['language'] + '.js'); this.loadCSS(this.settings['editor_css']); // Add plugins var p = tinyMCE.getParam('plugins', '', true, ','); if (p.length > 0) { for (var i=0; i&"\']', 'g'); this.xmlEncodeRe = new RegExp('[<>&"]', 'g'); // this.xmlEncodeEnts = {'&':'&','"':'"',"'":''','<':'<','>':'>'}; }, _addUnloadEvents : function() { if (tinyMCE.isIE) { if (tinyMCE.settings['add_unload_trigger']) { tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler); tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler); } } else { if (tinyMCE.settings['add_unload_trigger']) tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);}); } }, _def : function(key, def_val, t) { var v = tinyMCE.getParam(key, def_val); v = t ? v.replace(/\s+/g, "") : v; this.settings[key] = v; }, hasPlugin : function(n) { return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; }, addPlugin : function(n, p) { var op = this.plugins[n]; // Use the previous plugin object base URL used when loading external plugins p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n; this.plugins[n] = p; this.loadNextScript(); }, setPluginBaseURL : function(n, u) { var op = this.plugins[n]; if (op) op.baseURL = u; else this.plugins[n] = {baseURL : u}; }, loadPlugin : function(n, u) { u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u; u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u; this.plugins[n] = {baseURL : u}; this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js"); }, hasTheme : function(n) { return typeof(this.themes[n]) != "undefined" && this.themes[n] != null; }, addTheme : function(n, t) { this.themes[n] = t; this.loadNextScript(); }, addMenu : function(n, m) { this.menus[n] = m; }, hasMenu : function(n) { return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; }, loadScript : function(url) { var i; for (i=0; i'); this.loadedFiles[this.loadedFiles.length] = url; }, loadNextScript : function() { var d = document, se; if (!tinyMCE.settings.strict_loading_mode) return; if (this.loadingIndex < this.pendingFiles.length) { se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script'); se.setAttribute('language', 'javascript'); se.setAttribute('type', 'text/javascript'); se.setAttribute('src', this.pendingFiles[this.loadingIndex++]); d.getElementsByTagName("head")[0].appendChild(se); } else this.loadingIndex = -1; // Done with loading }, loadCSS : function(url) { var ar = url.replace(/\s+/, '').split(','); var lflen = 0, csslen = 0; var skip = false; var x = 0, i = 0, nl, le; for (x = 0,csslen = ar.length; x 0) { /* Make sure it doesn't exist. */ for (i=0, lflen=this.loadedFiles.length; i'); this.loadedFiles[this.loadedFiles.length] = ar[x]; } } } }, importCSS : function(doc, css) { var css_ary = css.replace(/\s+/, '').split(','); var csslen, elm, headArr, x, css_file; for (x = 0, csslen = css_ary.length; x 0) { // Is relative, make absolute if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/') css_file = this.documentBasePath + "/" + css_file; if (typeof(doc.createStyleSheet) == "undefined") { elm = doc.createElement("link"); elm.rel = "stylesheet"; elm.href = css_file; if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0) headArr[0].appendChild(elm); } else doc.createStyleSheet(css_file); } } }, confirmAdd : function(e, settings) { var elm = tinyMCE.isIE ? event.srcElement : e.target; var elementId = elm.name ? elm.name : elm.id; tinyMCE.settings = settings; if (tinyMCE.settings['convert_on_click'] || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang['lang_edit_confirm']))) tinyMCE.addMCEControl(elm, elementId); elm.setAttribute('mce_noask', 'true'); }, updateContent : function(form_element_name) { // Find MCE instance linked to given form element and copy it's value var formElement = document.getElementById(form_element_name); for (var n in tinyMCE.instances) { var inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; inst.switchSettings(); if (inst.formElement == formElement) { var doc = inst.getDoc(); tinyMCE._setHTML(doc, inst.formElement.value); if (!tinyMCE.isIE) doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid); } } }, addMCEControl : function(replace_element, form_element_name, target_document) { var id = "mce_editor_" + tinyMCE.idCounter++; var inst = new TinyMCE_Control(tinyMCE.settings); inst.editorId = id; this.instances[id] = inst; inst._onAdd(replace_element, form_element_name, target_document); }, removeInstance : function(ti) { var t = [], n, i; // Remove from instances for (n in tinyMCE.instances) { i = tinyMCE.instances[n]; if (tinyMCE.isInstance(i) && ti != i) t[n] = i; } tinyMCE.instances = t; // Remove from global undo/redo n = []; t = tinyMCE.undoLevels; for (i=0; i 0) { tinyMCE.nextUndoRedoAction = 'Undo'; inst = this.undoLevels[--this.undoIndex]; inst.select(); if (!tinyMCE.nextUndoRedoInstanceId) inst.execCommand('Undo'); } } else inst.execCommand('Undo'); return true; case "Redo": if (this.getParam('custom_undo_redo_global')) { if (this.undoIndex <= this.undoLevels.length - 1) { tinyMCE.nextUndoRedoAction = 'Redo'; inst = this.undoLevels[this.undoIndex++]; inst.select(); if (!tinyMCE.nextUndoRedoInstanceId) inst.execCommand('Redo'); } } else inst.execCommand('Redo'); return true; case 'mceFocus': var inst = tinyMCE.getInstanceById(value); if (inst) inst.getWin().focus(); return; case "mceAddControl": case "mceAddEditor": tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); return; case "mceAddFrameControl": tinyMCE.addMCEControl(tinyMCE._getElementById(value['element'], value['document']), value['element'], value['document']); return; case "mceRemoveControl": case "mceRemoveEditor": tinyMCE.removeMCEControl(value); return; case "mceToggleEditor": var inst = tinyMCE.getInstanceById(value), pe, te; if (inst) { pe = document.getElementById(inst.editorId + '_parent'); te = inst.oldTargetElement; if (typeof(inst.enabled) == 'undefined') inst.enabled = true; inst.enabled = !inst.enabled; if (!inst.enabled) { pe.style.display = 'none'; te.value = inst.getHTML(); te.style.display = inst.oldTargetDisplay; tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst); } else { pe.style.display = 'block'; te.style.display = 'none'; inst.setHTML(te.value); inst.useCSS = false; tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst); } } else tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); return; case "mceResetDesignMode": // Resets the designmode state of the editors in Gecko if (!tinyMCE.isIE) { for (var n in tinyMCE.instances) { if (!tinyMCE.isInstance(tinyMCE.instances[n])) continue; try { tinyMCE.instances[n].getDoc().designMode = "on"; } catch (e) { // Ignore any errors } } } return; } if (inst) { inst.execCommand(command, user_interface, value); } else if (tinyMCE.settings['focus_alert']) alert(tinyMCELang['lang_focus_alert']); }, _createIFrame : function(replace_element, doc, win) { var iframe, id = replace_element.getAttribute("id"); var aw, ah; if (typeof(doc) == "undefined") doc = document; if (typeof(win) == "undefined") win = window; iframe = doc.createElement("iframe"); aw = "" + tinyMCE.settings['area_width']; ah = "" + tinyMCE.settings['area_height']; if (aw.indexOf('%') == -1) { aw = parseInt(aw); aw = (isNaN(aw) || aw < 0) ? 300 : aw; aw = aw + "px"; } if (ah.indexOf('%') == -1) { ah = parseInt(ah); ah = (isNaN(ah) || ah < 0) ? 240 : ah; ah = ah + "px"; } iframe.setAttribute("id", id); iframe.setAttribute("name", id); iframe.setAttribute("class", "mceEditorIframe"); iframe.setAttribute("border", "0"); iframe.setAttribute("frameBorder", "0"); iframe.setAttribute("marginWidth", "0"); iframe.setAttribute("marginHeight", "0"); iframe.setAttribute("leftMargin", "0"); iframe.setAttribute("topMargin", "0"); iframe.setAttribute("width", aw); iframe.setAttribute("height", ah); iframe.setAttribute("allowtransparency", "true"); iframe.className = 'mceEditorIframe'; if (tinyMCE.settings["auto_resize"]) iframe.setAttribute("scrolling", "no"); // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs if (tinyMCE.isRealIE) iframe.setAttribute("src", this.settings['default_document']); iframe.style.width = aw; iframe.style.height = ah; // Ugly hack for Gecko problem in strict mode if (tinyMCE.settings.strict_loading_mode) iframe.style.marginBottom = '-5px'; // MSIE 5.0 issue if (tinyMCE.isRealIE) replace_element.outerHTML = iframe.outerHTML; else replace_element.parentNode.replaceChild(iframe, replace_element); if (tinyMCE.isRealIE) return win.frames[id]; else return iframe; }, setupContent : function(editor_id) { var inst = tinyMCE.instances[editor_id], i; var doc = inst.getDoc(); var head = doc.getElementsByTagName('head').item(0); var content = inst.startContent; // HTML values get XML encoded in strict mode if (tinyMCE.settings.strict_loading_mode) { content = content.replace(/</g, '<'); content = content.replace(/>/g, '>'); content = content.replace(/"/g, '"'); content = content.replace(/&/g, '&'); } tinyMCE.selectedInstance = inst; inst.switchSettings(); // Not loaded correctly hit it again, Mozilla bug #997860 if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") { // This part will remove the designMode status // Failes first time in Firefox 1.5b2 on Mac try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {} window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000); return; } if (!head) { window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10); return; } // Import theme specific content CSS the user specific tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings['theme'] + "/css/editor_content.css"); tinyMCE.importCSS(inst.getDoc(), inst.settings['content_css']); tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst); // Setup keyboard shortcuts if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) { inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo'); inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo'); } // BlockFormat shortcuts keys for (i=1; i<=6; i++) inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, ''); inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '

    '); inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '

    '); inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '
    '); // Add default shortcuts for gecko if (tinyMCE.isGecko) { inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold'); inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic'); inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline'); } // Setup span styles if (tinyMCE.getParam("convert_fonts_to_spans")) inst.getBody().setAttribute('id', 'mceSpanFonts'); if (tinyMCE.settings['nowrap']) doc.body.style.whiteSpace = "nowrap"; doc.body.dir = this.settings['directionality']; doc.editorId = editor_id; // Add on document element in Mozilla if (!tinyMCE.isIE) doc.documentElement.editorId = editor_id; inst.setBaseHREF(tinyMCE.settings['base_href']); // Replace new line characters to BRs if (tinyMCE.settings['convert_newlines_to_brs']) { content = tinyMCE.regexpReplace(content, "\r\n", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\r", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\n", "
    ", "gi"); } // Open closed anchors // content = content.replace(new RegExp('', 'gi'), ''); // Call custom cleanup code content = tinyMCE.storeAwayURLs(content); content = tinyMCE._customCleanup(inst, "insert_to_editor", content); if (tinyMCE.isIE) { // Ugly!!! window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500); if (tinyMCE.settings["force_br_newlines"]) doc.styleSheets[0].addRule("p", "margin: 0;"); var body = inst.getBody(); body.editorId = editor_id; } content = tinyMCE.cleanupHTMLCode(content); // Fix for bug #958637 if (!tinyMCE.isIE) { var contentElement = inst.getDoc().createElement("body"); var doc = inst.getDoc(); contentElement.innerHTML = content; // Remove weridness! if (tinyMCE.isGecko && tinyMCE.settings['remove_lt_gt']) content = content.replace(new RegExp('<>', 'g'), ""); if (tinyMCE.settings['cleanup_on_startup']) tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement)); else tinyMCE.setInnerHTML(inst.getBody(), content); tinyMCE.convertAllRelativeURLs(inst.getBody()); } else { if (tinyMCE.settings['cleanup_on_startup']) { tinyMCE._setHTML(inst.getDoc(), content); // Produces permission denied error in MSIE 5.5 eval('try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}'); } else tinyMCE._setHTML(inst.getDoc(), content); } // Fix for bug #957681 //inst.getDoc().designMode = inst.getDoc().designMode; tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual'], inst); tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc()); // Re-add design mode on mozilla if (!tinyMCE.isIE) tinyMCE.addEventHandlers(inst); // Add blur handler if (tinyMCE.isIE) { tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch); tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953 // Workaround for drag drop/copy paste base href bug if (!tinyMCE.isOpera) { tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove); tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch); tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch); } } // Trigger node change, this call locks buttons for tables and so forth inst.select(); tinyMCE.selectedElement = inst.contentWindow.document.body; // Call custom DOM cleanup tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody()); tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody()); tinyMCE._setEventsEnabled(inst.getBody(), false); tinyMCE.cleanupAnchors(inst.getDoc()); if (tinyMCE.getParam("convert_fonts_to_spans")) tinyMCE.convertSpansToFonts(inst.getDoc()); inst.startContent = tinyMCE.trim(inst.getBody().innerHTML); inst.undoRedo.add({ content : inst.startContent }); // Cleanup any mess left from storyAwayURLs if (tinyMCE.isGecko) { // Remove mce_src from textnodes and comments tinyMCE.selectNodes(inst.getBody(), function(n) { if (n.nodeType == 3 || n.nodeType == 8) n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); return false; }); } // Remove Gecko spellchecking if (tinyMCE.isGecko) inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck"); // Cleanup any mess left from storyAwayURLs tinyMCE._removeInternal(inst.getBody()); inst.select(); tinyMCE.triggerNodeChange(false, true); }, storeAwayURLs : function(s) { // Remove all mce_src, mce_href and replace them with new ones // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); if (!s.match(/(mce_src|mce_href)/gi, s)) { s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"'); s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"'); } return s; }, _removeInternal : function(n) { if (tinyMCE.isGecko) { // Remove mce_src from textnodes and comments tinyMCE.selectNodes(n, function(n) { if (n.nodeType == 3 || n.nodeType == 8) n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); return false; }); } }, removeTinyMCEFormElements : function(form_obj) { var i, elementId; // Skip form element removal if (!tinyMCE.getParam('hide_selects_on_submit')) return; // Check if form is valid if (typeof(form_obj) == "undefined" || form_obj == null) return; // If not a form, find the form if (form_obj.nodeName != "FORM") { if (form_obj.form) form_obj = form_obj.form; else form_obj = tinyMCE.getParentElement(form_obj, "form"); } // Still nothing if (form_obj == null) return; // Disable all UI form elements that TinyMCE created for (i=0; i"); rng.collapse(false); rng.select(); tinyMCE.execCommand("mceAddUndoLevel"); tinyMCE.triggerNodeChange(false); return false; } } // Backspace or delete if (e.keyCode == 8 || e.keyCode == 46) { tinyMCE.selectedElement = e.target; tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a"); tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img"); tinyMCE.triggerNodeChange(false); } return false; break; case "keyup": case "keydown": tinyMCE.hideMenus(); tinyMCE.hasMouseMoved = false; if (inst && inst.handleShortcut(e)) return false; if (e.target.editorId) tinyMCE.instances[e.target.editorId].select(); if (tinyMCE.selectedInstance) tinyMCE.selectedInstance.switchSettings(); var inst = tinyMCE.selectedInstance; // Handle backspace if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) { // Insert P element instead of BR if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) { // Cancel event tinyMCE.execCommand("mceAddUndoLevel"); e.preventDefault(); return false; } } tinyMCE.selectedElement = null; tinyMCE.selectedNode = null; var elm = tinyMCE.selectedInstance.getFocusElement(); tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a"); tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img"); tinyMCE.selectedElement = elm; // Update visualaids on tabs if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9) tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings['visual'], tinyMCE.selectedInstance); // Fix empty elements on return/enter, check where enter occured if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13) tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement(); // Fix empty elements on return/enter if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) { var elm = tinyMCE.enterKeyElement; if (elm) { var re = new RegExp('^HR|IMG|BR$','g'); // Skip these var dre = new RegExp('^H[1-6]$','g'); // Add double on these if (!elm.hasChildNodes() && !re.test(elm.nodeName)) { if (dre.test(elm.nodeName)) elm.innerHTML = "  "; else elm.innerHTML = " "; } } } // Check if it's a position key var keys = tinyMCE.posKeyCodes; var posKey = false; for (var i=0; i'; h += ''; h += ''; } else { // Normal button h += ''; h += ''; h += ''; } return h; }, getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) { var h = '', m, x; mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');'; cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\''; if (typeof(ui) != "undefined" && ui != null) cmd += ',' + ui; if (typeof(val) != "undefined" && val != null) cmd += ",'" + val + "'"; cmd += ');'; // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) { x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20); if (tinyMCE.isRealIE) h += ''; else h += ''; h += ''; h += ''; h += ''; h += ''; } else { if (tinyMCE.isRealIE) h += ''; else h += ''; h += ''; h += ''; h += ''; h += ''; } return h; }, _menuButtonEvent : function(e, o) { if (o.className == 'mceMenuButtonFocus') return; if (e == 'over') o.className = o.className + ' mceMenuHover'; else o.className = o.className.replace(/\s.*$/, ''); }, addButtonMap : function(m) { var i, a = m.replace(/\s+/, '').split(','); for (i=0; i 0); if (tinyMCE.settings['custom_undo_redo']) { undoIndex = inst.undoRedo.undoIndex; undoLevels = inst.undoRedo.undoLevels.length; } tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content); } if (this.selectedInstance && (typeof(focus) == "undefined" || focus)) this.selectedInstance.contentWindow.focus(); }, _customCleanup : function(inst, type, content) { var pl, po, i; // Call custom cleanup var customCleanup = tinyMCE.settings['cleanup_callback']; if (customCleanup != "" && eval("typeof(" + customCleanup + ")") != "undefined") content = eval(customCleanup + "(type, content, inst);"); // Trigger theme cleanup po = tinyMCE.themes[tinyMCE.settings['theme']]; if (po && po.cleanup) content = po.cleanup(type, content, inst); // Trigger plugin cleanups pl = inst.plugins; for (i=0; i 0) className += " "; className += classNames[i]; } return className; }, handleVisualAid : function(el, deep, state, inst, skip_dispatch) { if (!el) return; if (!skip_dispatch) tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst); var tableElement = null; switch (el.nodeName) { case "TABLE": var oldW = el.style.width; var oldH = el.style.height; var bo = tinyMCE.getAttrib(el, "border"); bo = bo == "" || bo == "0" ? true : false; tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo)); el.style.width = oldW; el.style.height = oldH; for (var y=0; y<\/o:p>", "
    "); html = tinyMCE.regexpReplace(html, " <\/o:p>", ""); html = tinyMCE.regexpReplace(html, "", ""); html = tinyMCE.regexpReplace(html, "

    <\/p>", ""); html = tinyMCE.regexpReplace(html, "

    <\/p>\r\n

    <\/p>", ""); html = tinyMCE.regexpReplace(html, "

     <\/p>", "
    "); html = tinyMCE.regexpReplace(html, "

    \s*(

    \s*)?", "

    "); html = tinyMCE.regexpReplace(html, "<\/p>\s*(<\/p>\s*)?", "

    "); }*/ // Always set the htmlText output tinyMCE.setInnerHTML(doc.body, html); } tinyMCE.cleanupAnchors(doc); if (tinyMCE.getParam("convert_fonts_to_spans")) tinyMCE.convertSpansToFonts(doc); }, getEditorId : function(form_element) { var inst = this.getInstanceById(form_element); if (!inst) return null; return inst.editorId; }, getInstanceById : function(editor_id) { var inst = this.instances[editor_id]; if (!inst) { for (var n in tinyMCE.instances) { var instance = tinyMCE.instances[n]; if (!tinyMCE.isInstance(instance)) continue; if (instance.formTargetElementId == editor_id) { inst = instance; break; } } } return inst; }, queryInstanceCommandValue : function(editor_id, command) { var inst = tinyMCE.getInstanceById(editor_id); if (inst) return inst.queryCommandValue(command); return false; }, queryInstanceCommandState : function(editor_id, command) { var inst = tinyMCE.getInstanceById(editor_id); if (inst) return inst.queryCommandState(command); return null; }, setWindowArg : function(n, v) { this.windowArgs[n] = v; }, getWindowArg : function(n, d) { return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n]; }, getCSSClasses : function(editor_id, doc) { var inst = tinyMCE.getInstanceById(editor_id); // Is cached, use that if (inst && inst.cssClasses.length > 0) return inst.cssClasses; if (typeof(editor_id) == "undefined" && typeof(doc) == "undefined") { var instance; for (var instanceName in tinyMCE.instances) { instance = tinyMCE.instances[instanceName]; if (!tinyMCE.isInstance(instance)) continue; break; } doc = instance.getDoc(); } if (typeof(doc) == "undefined") { var instance = tinyMCE.getInstanceById(editor_id); doc = instance.getDoc(); } if (doc) { var styles = doc.styleSheets; if (styles && styles.length > 0) { for (var x=0; x' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + '
    '; return tinyMCE.replaceVar(v, "pluginurl", o.baseURL); } } o = tinyMCE.themes[tinyMCE.settings['theme']]; if (o.getControlHTML && (v = o.getControlHTML(c)) != '') { if (rtl) return '' + v + ''; return v; } return ''; }, evalFunc : function(f, idx, a, o) { o = !o ? window : o; f = typeof(f) == 'function' ? f : o[f]; return f.apply(o, Array.prototype.slice.call(a, idx)); }, dispatchCallback : function(i, p, n) { return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments); }, executeCallback : function(i, p, n) { return this.callFunc(i, p, n, 1, this.executeCallback.arguments); }, execCommandCallback : function(i, p, n) { return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments); }, callFunc : function(ins, p, n, m, a) { var l, i, on, o, s, v; s = m == 2; l = tinyMCE.getParam(p, ''); if (l != '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0) return true; if (ins != null) { for (i=0, l = ins.plugins; i 0) return true; } } l = tinyMCE.themes; for (on in l) { o = l[on]; if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0) return true; } return false; }, xmlEncode : function(s, skip_apos) { return s ? ('' + s).replace(!skip_apos ? this.xmlEncodeAposRe : this.xmlEncodeRe, function (c, b) { switch (c) { case '&': return '&'; case '"': return '"'; case '\'': return '''; // ' is not working in MSIE case '<': return '<'; case '>': return '>'; } return c; }) : s; }, extend : function(p, np) { var o = {}; o.parent = p; for (n in p) o[n] = p[n]; for (n in np) o[n] = np[n]; return o; }, hideMenus : function() { var e = tinyMCE.lastSelectedMenuBtn; if (tinyMCE.lastMenu) { tinyMCE.lastMenu.hide(); tinyMCE.lastMenu = null; } if (e) { tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass); tinyMCE.lastSelectedMenuBtn = null; } } }; // Global instances var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors var tinyMCE = new TinyMCE_Engine(); var tinyMCELang = {}; /* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */ function TinyMCE_Control(settings) { var t, i, to, fu, p, x, fn, fu, pn, s = settings; this.undoRedoLevel = true; this.isTinyMCE_Control = true; // Default settings this.settings = s; this.settings['theme'] = tinyMCE.getParam("theme", "default"); this.settings['width'] = tinyMCE.getParam("width", -1); this.settings['height'] = tinyMCE.getParam("height", -1); this.selection = new TinyMCE_Selection(this); this.undoRedo = new TinyMCE_UndoRedo(this); this.cleanup = new TinyMCE_Cleanup(); this.shortcuts = new Array(); this.hasMouseMoved = false; this.foreColor = this.backColor = "#999999"; this.data = {}; this.cssClasses = []; this.cleanup.init({ valid_elements : s.valid_elements, extended_valid_elements : s.extended_valid_elements, valid_child_elements : s.valid_child_elements, entities : s.entities, entity_encoding : s.entity_encoding, debug : s.cleanup_debug, indent : s.apply_source_formatting, invalid_elements : s.invalid_elements, verify_html : s.verify_html, fix_content_duplication : s.fix_content_duplication, convert_fonts_to_spans : s.convert_fonts_to_spans }); // Wrap old theme t = this.settings['theme']; if (!tinyMCE.hasTheme(t)) { fn = tinyMCE.callbacks; to = {}; for (i=0; i 0) { for (i=0; i 1 && tinyMCE.currentConfig != this.settings['index']) { tinyMCE.settings = this.settings; tinyMCE.currentConfig = this.settings['index']; } }, select : function() { var oldInst = tinyMCE.selectedInstance; if (oldInst != this) { if (oldInst) oldInst.execCommand('mceEndTyping'); tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst); tinyMCE.selectedInstance = this; } }, getBody : function() { return this.contentBody ? this.contentBody : this.getDoc().body; }, getDoc : function() { // return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ? return this.contentWindow.document; }, getWin : function() { return this.contentWindow; }, getContainerWin : function() { return this.containerWindow ? this.containerWindow : window; }, getViewPort : function() { return tinyMCE.getViewPort(this.getWin()); }, getParentNode : function(n, f) { return tinyMCE.getParentNode(n, f, this.getBody()); }, getParentElement : function(n, na, f) { return tinyMCE.getParentElement(n, na, f, this.getBody()); }, getParentBlockElement : function(n) { return tinyMCE.getParentBlockElement(n, this.getBody()); }, resizeToContent : function() { var d = this.getDoc(), b = d.body, de = d.documentElement; this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px'; }, addShortcut : function(m, k, d, cmd, ui, va) { var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts; if (!tinyMCE.getParam('custom_shortcuts')) return false; m = m.toLowerCase(); k = ie && !n ? k.toUpperCase() : k; c = n ? null : k.charCodeAt(0); d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d; sc = { alt : m.indexOf('alt') != -1, ctrl : m.indexOf('ctrl') != -1, shift : m.indexOf('shift') != -1, charCode : c, keyCode : n ? k : (ie ? c : null), desc : d, cmd : cmd, ui : ui, val : va }; for (i=0; i 0) rng.pasteHTML('
    ' + rng.htmlText + "
    "); tinyMCE.triggerNodeChange(); return; } } } switch (command) { case "mceRepaint": this.repaint(); return true; case "unlink": // Unlink if caret is inside link if (tinyMCE.isGecko && this.getSel().isCollapsed) { focusElm = tinyMCE.getParentElement(focusElm, 'A'); if (focusElm) this.selection.selectNode(focusElm, false); } this.getDoc().execCommand(command, user_interface, value); tinyMCE.isGecko && this.getSel().collapseToEnd(); tinyMCE.triggerNodeChange(); return true; case "InsertUnorderedList": case "InsertOrderedList": this.getDoc().execCommand(command, user_interface, value); tinyMCE.triggerNodeChange(); break; case "Strikethrough": this.getDoc().execCommand(command, user_interface, value); tinyMCE.triggerNodeChange(); break; case "mceSelectNode": this.selection.selectNode(value); tinyMCE.triggerNodeChange(); tinyMCE.selectedNode = value; break; case "FormatBlock": if (value == null || value == "") { var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp"); if (elm) this.execCommand("mceRemoveNode", false, elm); } else { if (!this.cleanup.isValid(value)) return true; if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value)) value = value.replace(/[^a-z]/gi, ''); if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) { var b = this.selection.getBookmark(); this.getDoc().execCommand("FormatBlock", false, '

    '); tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value); this.selection.moveToBookmark(b); } else this.getDoc().execCommand("FormatBlock", false, value); } tinyMCE.triggerNodeChange(); break; case "mceRemoveNode": if (!value) value = tinyMCE.getParentElement(this.getFocusElement()); if (tinyMCE.isIE) { value.outerHTML = value.innerHTML; } else { var rng = value.ownerDocument.createRange(); rng.setStartBefore(value); rng.setEndAfter(value); rng.deleteContents(); rng.insertNode(rng.createContextualFragment(value.innerHTML)); } tinyMCE.triggerNodeChange(); break; case "mceSelectNodeDepth": var parentNode = this.getFocusElement(); for (var i=0; parentNode; i++) { if (parentNode.nodeName.toLowerCase() == "body") break; if (parentNode.nodeName.toLowerCase() == "#text") { i--; parentNode = parentNode.parentNode; continue; } if (i == value) { this.selection.selectNode(parentNode, false); tinyMCE.triggerNodeChange(); tinyMCE.selectedNode = parentNode; return; } parentNode = parentNode.parentNode; } break; case "mceSetStyleInfo": case "SetStyleInfo": var rng = this.getRng(); var sel = this.getSel(); var scmd = value['command']; var sname = value['name']; var svalue = value['value'] == null ? '' : value['value']; //var svalue = value['value'] == null ? '' : value['value']; var wrapper = value['wrapper'] ? value['wrapper'] : "span"; var parentElm = null; var invalidRe = new RegExp("^BODY|HTML$", "g"); var invalidParentsRe = tinyMCE.settings['merge_styles_invalid_parents'] != '' ? new RegExp(tinyMCE.settings['merge_styles_invalid_parents'], "gi") : null; // Whole element selected check if (tinyMCE.isIE) { // Control range if (rng.item) parentElm = rng.item(0); else { var pelm = rng.parentElement(); var prng = doc.selection.createRange(); prng.moveToElementText(pelm); if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) { if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName)) parentElm = pelm; } } } else { var felm = this.getFocusElement(); if (sel.isCollapsed || (new RegExp('td|tr|tbody|table', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode)) parentElm = felm; } // Whole element selected if (parentElm && !invalidRe.test(parentElm.nodeName)) { if (scmd == "setstyle") tinyMCE.setStyleAttrib(parentElm, sname, svalue); if (scmd == "setattrib") tinyMCE.setAttrib(parentElm, sname, svalue); if (scmd == "removeformat") { parentElm.style.cssText = ''; tinyMCE.setAttrib(parentElm, 'class', ''); } // Remove style/attribs from all children var ch = tinyMCE.getNodeTree(parentElm, new Array(), 1); for (var z=0; z=0; i--) { var elm = nodes[i]; var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true"; elm.removeAttribute("mce_new"); // Is only child a element if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) { //tinyMCE.debug("merge1" + isNew); this._mergeElements(scmd, elm, elm.childNodes[0], isNew); continue; } // Is I the only child if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) { //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName); if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName)) this._mergeElements(scmd, elm.parentNode, elm, false); } } // Remove empty wrappers var nodes = doc.getElementsByTagName(wrapper); for (var i=nodes.length-1; i>=0; i--) { var elm = nodes[i]; var isEmpty = true; // Check if it has any attribs var tmp = doc.createElement("body"); tmp.appendChild(elm.cloneNode(false)); // Is empty span, remove it tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), ''); //tinyMCE.debug(tmp.innerHTML); if (new RegExp('', 'gi').test(tmp.innerHTML)) { for (var x=0; x 0) { value = tinyMCE.replaceVar(value, "selection", selectedText); tinyMCE.execCommand('mceInsertContent', false, value); } tinyMCE.triggerNodeChange(); break; case "mceSetAttribute": if (typeof(value) == 'object') { var targetElms = (typeof(value['targets']) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value['targets']; var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms); if (targetNode) { targetNode.setAttribute(value['name'], value['value']); tinyMCE.triggerNodeChange(); } } break; case "mceSetCSSClass": this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value}); break; case "mceInsertRawHTML": var key = 'tiny_mce_marker'; this.execCommand('mceBeginUndoLevel'); // Insert marker key this.execCommand('mceInsertContent', false, key); // Store away scroll pos var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft; var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop; // Find marker and replace with RAW HTML var html = this.getBody().innerHTML; if ((pos = html.indexOf(key)) != -1) tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length)); // Restore scoll pos this.contentWindow.scrollTo(scrollX, scrollY); this.execCommand('mceEndUndoLevel'); break; case "mceInsertContent": // Force empty string if (!value) value = ''; var insertHTMLFailed = false; // Removed since it produced problems in IE // this.getWin().focus(); if (tinyMCE.isGecko || tinyMCE.isOpera) { try { // Is plain text or HTML, &,   etc will be encoded wrong in FF if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) { var r = this.getRng(); var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value)); var s = this.getSel(); var r2 = r.cloneRange(); // Insert text at cursor position s.removeAllRanges(); r.deleteContents(); r.insertNode(n); // Move the cursor to the end of text r2.selectNode(n); r2.collapse(false); s.removeAllRanges(); s.addRange(r2); } else { value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value); this.getDoc().execCommand('inserthtml', false, value); tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); } } catch (ex) { insertHTMLFailed = true; } if (!insertHTMLFailed) { tinyMCE.triggerNodeChange(); return; } } if (!tinyMCE.isIE) { var isHTML = value.indexOf('<') != -1; var sel = this.getSel(); var rng = this.getRng(); if (isHTML) { if (tinyMCE.isSafari) { var tmpRng = this.getDoc().createRange(); tmpRng.setStart(this.getBody(), 0); tmpRng.setEnd(this.getBody(), 0); value = tmpRng.createContextualFragment(value); } else value = rng.createContextualFragment(value); } else { // Setup text node var el = document.createElement("div"); el.innerHTML = value; value = el.firstChild.nodeValue; value = doc.createTextNode(value); } // Insert plain text in Safari if (tinyMCE.isSafari && !isHTML) { this.execCommand('InsertText', false, value.nodeValue); tinyMCE.triggerNodeChange(); return true; } else if (tinyMCE.isSafari && isHTML) { rng.deleteContents(); rng.insertNode(value); tinyMCE.triggerNodeChange(); return true; } rng.deleteContents(); // If target node is text do special treatment, (Mozilla 1.3 fix) if (rng.startContainer.nodeType == 3) { var node = rng.startContainer.splitText(rng.startOffset); node.parentNode.insertBefore(value, node); } else rng.insertNode(value); if (!isHTML) { // Removes weird selection trails sel.selectAllChildren(doc.body); sel.removeAllRanges(); // Move cursor to end of content var rng = doc.createRange(); rng.selectNode(value); rng.collapse(false); sel.addRange(rng); } else rng.collapse(false); tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); } else { var rng = doc.selection.createRange(), tmpRng = null; var c = value.indexOf('"; } if (hc) { cn = n.childNodes; for (i=0, l=cn.length; i'; return h; }, _serializeAttribute : function(n, r, an) { var av = '', t, os = this.settings.on_save; if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0)) return ''; if (os && this.mceAttribs[an]) av = this._getAttrib(n, this.mceAttribs[an]); if (av.length == 0) av = this._getAttrib(n, an); if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) { av = t; if (av == "mce_empty") return " " + an + '=""'; } if (r.forceAttribs && (t = r.forceAttribs[an])) av = t; if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an)) av = this._urlConverter(this, n, av); if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av)) return ""; if (av.length != 0 && av == "{$uid}") av = "uid_" + (this.idCount++); if (av.length != 0) { if (an.indexOf('on') != 0) av = this.xmlEncode(av, 1); return " " + an + "=" + '"' + av + '"'; } return ""; }, formatHTML : function(h) { var s = this.settings, p = '', i = 0, li = 0, o = '', l; // Replace BR in pre elements to \n h = h.replace(/]*)>(.*?)<\/pre>/gi, function (a, b, c) { c = c.replace(//gi, '\n'); return '' + c + ''; }); h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :) h = '\n' + h; h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting h = h.replace(this.nlBeforeRe, '\n<$1$2>'); h = h.replace(this.nlAfterRe, '<$1$2>\n'); h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n'); h += '\n'; //tinyMCE.debug(h); while ((i = h.indexOf('\n', i + 1)) != -1) { if ((l = h.substring(li + 1, i)).length != 0) { if (this.ouRe.test(l) && p.length >= s.indent_levels) p = p.substring(s.indent_levels); o += p + l + '\n'; if (this.inRe.test(l)) p += this.inStr; } li = i; } //tinyMCE.debug(h); return o; }, xmlEncode : function(s, skip_apos) { var cl = this, re = !skip_apos ? this.xmlEncodeAposRe : this.xmlEncodeRe; this._setupEntities(); // Will intialize lookup table switch (this.settings.entity_encoding) { case "raw": return tinyMCE.xmlEncode(s, skip_apos); case "named": return s.replace(re, function (c, b) { b = cl.entities[c.charCodeAt(0)]; return b ? '&' + b + ';' : c; }); case "numeric": return s.replace(re, function (c, b) { return b ? '&#' + c.charCodeAt(0) + ';' : c; }); } return s; }, split : function(re, s) { var c = s.split(re); var i, l, o = new Array(); for (i=0, l=c.length; i' : '>' + h + ''; return o; }; TinyMCE_Engine.prototype.createTag = function(d, tn, a, h) { var o = d.createElement(tn); if (a) { for (n in a) { if (typeof(a[n]) != 'function' && a[n] != null) tinyMCE.setAttrib(o, n, a[n]); } } if (h) o.innerHTML = h; return o; }; TinyMCE_Engine.prototype.getElementByAttributeValue = function(n, e, a, v) { return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0]; }; TinyMCE_Engine.prototype.getElementsByAttributeValue = function(n, e, a, v) { var i, nl = n.getElementsByTagName(e), o = new Array(); for (i=0; i]*)>/gi, ''); h = h.replace(/]*)>/gi, ''); h = h.replace(/]*)>/gi, ''); h = h.replace(/]*)>/gi, ''); h = h.replace(/<\/strong>/gi, ''); h = h.replace(/<\/em>/gi, ''); } if (tinyMCE.isRealIE) { // Since MSIE handles invalid HTML better that valid XHTML we // need to make some things invalid.


    gets converted to
    . h = h.replace(/\s\/>/g, '>'); // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones h = h.replace(/]*)>\u00A0?<\/p>/gi, ' 

    '); // Keep empty paragraphs h = h.replace(/]*)>\s* \s*<\/p>/gi, ' 

    '); // Keep empty paragraphs h = h.replace(/]*)>\s+<\/p>/gi, ' 

    '); // Keep empty paragraphs // Remove first comment e.innerHTML = tinyMCE.uniqueTag + h; e.firstChild.removeNode(true); // Remove weird auto generated empty paragraphs unless it's supposed to be there nl = e.getElementsByTagName("p"); for (i=nl.length-1; i>=0; i--) { n = nl[i]; if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep) n.parentNode.removeChild(n); } } else { h = this.fixGeckoBaseHREFBug(1, e, h); e.innerHTML = h; this.fixGeckoBaseHREFBug(2, e, h); } }; TinyMCE_Engine.prototype.getOuterHTML = function(e) { if (tinyMCE.isIE) return e.outerHTML; var d = e.ownerDocument.createElement("body"); d.appendChild(e.cloneNode(true)); return d.innerHTML; }; TinyMCE_Engine.prototype.setOuterHTML = function(e, h, d) { var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t; if (tinyMCE.isIE && e.nodeType == 1) e.outerHTML = h; else { t = d.createElement("body"); t.innerHTML = h; for (i=0, nl=t.childNodes; i-1; i--) { if (ar[i].specified && ar[i].nodeValue) ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue); } ar = e.childNodes; for (i=0; i= strTok2.length) { for (var i=0; i= strTok2.length || strTok1[i] != strTok2[i]) { breakPoint = i + 1; break; } } } if (strTok1.length < strTok2.length) { for (var i=0; i= strTok1.length || strTok1[i] != strTok2[i]) { breakPoint = i + 1; break; } } } if (breakPoint == 1) return targetURL.path; for (var i=0; i<(strTok1.length-(breakPoint-1)); i++) outPath += "../"; for (var i=breakPoint-1; i=0; i--) { if (baseURLParts[i].length == 0) continue; newBaseURLParts[newBaseURLParts.length] = baseURLParts[i]; } baseURLParts = newBaseURLParts.reverse(); // Merge relURLParts chunks var newRelURLParts = new Array(); var numBack = 0; for (var i=relURLParts.length-1; i>=0; i--) { if (relURLParts[i].length == 0 || relURLParts[i] == ".") continue; if (relURLParts[i] == '..') { numBack++; continue; } if (numBack > 0) { numBack--; continue; } newRelURLParts[newRelURLParts.length] = relURLParts[i]; } relURLParts = newRelURLParts.reverse(); // Remove end from absolute path var len = baseURLParts.length-numBack; var absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/'); var start = "", end = ""; // Build output URL relURL.protocol = baseURL.protocol; relURL.host = baseURL.host; relURL.port = baseURL.port; // Re-add trailing slash if it's removed if (relURL.path.charAt(relURL.path.length-1) == "/") absPath += "/"; relURL.path = absPath; return this.serializeURL(relURL); }; TinyMCE_Engine.prototype.convertURL = function(url, node, on_save) { var prot = document.location.protocol; var host = document.location.hostname; var port = document.location.port; // Pass through file protocol if (prot == "file:") return url; // Something is wrong, remove weirdness url = tinyMCE.regexpReplace(url, '(http|https):///', '/'); // Mailto link or anchor (Pass through) if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || tinyMCE.regexpReplace(url,'[ \t\r\n\+]|%20','').charAt(0) == "#") return url; // Fix relative/Mozilla if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/') return tinyMCE.settings['base_href'] + url; // Handle relative URLs if (on_save && tinyMCE.getParam('relative_urls')) { var curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url); if (curl.charAt(0) == '/') curl = tinyMCE.settings['document_base_prefix'] + curl; var urlParts = tinyMCE.parseURL(curl); var tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings['document_base_url']); // Force relative if (urlParts['host'] == tmpUrlParts['host'] && (urlParts['port'] == tmpUrlParts['port'])) return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings['document_base_url'], curl); } // Handle absolute URLs if (!tinyMCE.getParam('relative_urls')) { var urlParts = tinyMCE.parseURL(url); var baseUrlParts = tinyMCE.parseURL(tinyMCE.settings['base_href']); // Force absolute URLs from relative URLs url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url); // If anchor and path is the same page if (urlParts['anchor'] && urlParts['path'] == baseUrlParts['path']) return "#" + urlParts['anchor']; } // Remove current domain if (tinyMCE.getParam('remove_script_host')) { var start = "", portPart = ""; if (port != "") portPart = ":" + port; start = prot + "//" + host + portPart + "/"; if (url.indexOf(start) == 0) url = url.substring(start.length-1); } return url; }; TinyMCE_Engine.prototype.convertAllRelativeURLs = function(body) { var i, elms, src, href, mhref, msrc; // Convert all image URL:s to absolute URL elms = body.getElementsByTagName("img"); for (i=0; i bookmark.index) { try { rng.addElement(nl[bookmark.index]); } catch (ex) { // Might be thrown if the node no longer exists } } } else { // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs try { // Incorrect bookmark if (bookmark.start < 0) return true; rng = inst.getSel().createRange(); rng.moveToElementText(inst.getBody()); rng.collapse(true); rng.moveStart('character', bookmark.start); rng.moveEnd('character', bookmark.length); } catch (ex) { return true; } } rng.select(); win.scrollTo(bookmark.scrollX, bookmark.scrollY); return true; } if (tinyMCE.isGecko || tinyMCE.isOpera) { if (!sel) return false; if (bookmark.rng) { sel.removeAllRanges(); sel.addRange(bookmark.rng); } if (bookmark.start != -1 && bookmark.end != -1) { try { sd = this._getTextPos(b, bookmark.start, bookmark.end); rng = doc.createRange(); rng.setStart(sd.startNode, sd.startOffset); rng.setEnd(sd.endNode, sd.endOffset); sel.removeAllRanges(); sel.addRange(rng); win.focus(); } catch (ex) { // Ignore } } /* if (typeof(bookmark.index) != 'undefined') { tinyMCE.selectElements(b, 'IMG', function (n) { if (bookmark.index-- == 0) { // Select image in Gecko here } return false; }); } */ win.scrollTo(bookmark.scrollX, bookmark.scrollY); return true; } return false; }, _getPosText : function(r, sn, en) { var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; while ((n = w.nextNode()) != null) { if (n == sn) d.start = p; if (n == en) { d.end = p; return d; } p += n.nodeValue ? n.nodeValue.length : 0; } return null; }, _getTextPos : function(r, sp, ep) { var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; while ((n = w.nextNode()) != null) { p += n.nodeValue ? n.nodeValue.length : 0; if (p >= sp && !d.startNode) { d.startNode = n; d.startOffset = sp - (p - n.nodeValue.length); } if (p >= ep) { d.endNode = n; d.endOffset = ep - (p - n.nodeValue.length); return d; } } return null; }, selectNode : function(node, collapse, select_text_node, to_start) { var inst = this.instance, sel, rng, nodes; if (!node) return; if (typeof(collapse) == "undefined") collapse = true; if (typeof(select_text_node) == "undefined") select_text_node = false; if (typeof(to_start) == "undefined") to_start = true; if (inst.settings.auto_resize) inst.resizeToContent(); if (tinyMCE.isRealIE) { rng = inst.getDoc().body.createTextRange(); try { rng.moveToElementText(node); if (collapse) rng.collapse(to_start); rng.select(); } catch (e) { // Throws illigal agrument in MSIE some times } } else { sel = this.getSel(); if (!sel) return; if (tinyMCE.isSafari) { sel.setBaseAndExtent(node, 0, node, node.innerText.length); if (collapse) { if (to_start) sel.collapseToStart(); else sel.collapseToEnd(); } this.scrollToNode(node); return; } rng = inst.getDoc().createRange(); if (select_text_node) { // Find first textnode in tree nodes = tinyMCE.getNodeTree(node, new Array(), 3); if (nodes.length > 0) rng.selectNodeContents(nodes[0]); else rng.selectNodeContents(node); } else rng.selectNode(node); if (collapse) { // Special treatment of textnode collapse if (!to_start && node.nodeType == 3) { rng.setStart(node, node.nodeValue.length); rng.setEnd(node, node.nodeValue.length); } else rng.collapse(to_start); } sel.removeAllRanges(); sel.addRange(rng); } this.scrollToNode(node); // Set selected element tinyMCE.selectedElement = null; if (node.nodeType == 1) tinyMCE.selectedElement = node; }, scrollToNode : function(node) { var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin; // Only scroll if out of visible area if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25)) w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25); // Scroll container window if (inst.settings.auto_resize) { cwin = inst.getContainerWin(); cvp = tinyMCE.getViewPort(cwin); p = this.getAbsPosition(node); if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height) cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25); } }, getAbsPosition : function(n) { var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement); return { absLeft : ipos.absLeft + pos.absLeft, absTop : ipos.absTop + pos.absTop }; }, getSel : function() { var inst = this.instance; if (tinyMCE.isRealIE) return inst.getDoc().selection; return inst.contentWindow.getSelection(); }, getRng : function() { var s = this.getSel(); if (s == null) return null; if (tinyMCE.isRealIE) return s.createRange(); if (tinyMCE.isSafari && !s.getRangeAt) return '' + window.getSelection(); if (s.rangeCount > 0) return s.getRangeAt(0); return null; }, isCollapsed : function() { var r = this.getRng(); if (r.item) return false; return r.boundingWidth == 0 || this.getSel().isCollapsed; }, collapse : function(b) { var r = this.getRng(), s = this.getSel(); if (r.select) { r.collapse(b); r.select(); } else { if (b) s.collapseToStart(); else s.collapseToEnd(); } }, getFocusElement : function() { var inst = this.instance, doc, rng, sel, elm; if (tinyMCE.isRealIE) { doc = inst.getDoc(); rng = doc.selection.createRange(); // if (rng.collapse) // rng.collapse(true); elm = rng.item ? rng.item(0) : rng.parentElement(); } else { if (!tinyMCE.isSafari && inst.isHidden()) return inst.getBody(); sel = this.getSel(); rng = this.getRng(); if (!sel || !rng) return null; elm = rng.commonAncestorContainer; //elm = (sel && sel.anchorNode) ? sel.anchorNode : null; // Handle selection a image or other control like element such as anchors if (!rng.collapsed) { // Is selection small if (rng.startContainer == rng.endContainer) { if (rng.startOffset - rng.endOffset < 2) { if (rng.startContainer.hasChildNodes()) elm = rng.startContainer.childNodes[rng.startOffset]; } } } // Get the element parent of the node elm = tinyMCE.getParentElement(elm); //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") // elm = tinyMCE.selectedElement; } return elm; } }; /* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */ function TinyMCE_UndoRedo(inst) { this.instance = inst; this.undoLevels = new Array(); this.undoIndex = 0; this.typingUndoIndex = -1; this.undoRedo = true; }; TinyMCE_UndoRedo.prototype = { add : function(l) { var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur; if (l) { this.undoLevels[this.undoLevels.length] = l; return true; } if (this.typingUndoIndex != -1) { this.undoIndex = this.typingUndoIndex; if (tinyMCE.typingUndoIndex != -1) tinyMCE.undoIndex = tinyMCE.typingUndoIndex; } newHTML = tinyMCE.trim(inst.getBody().innerHTML); if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) { //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content); tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst); // Time to compress customUndoLevels = tinyMCE.settings['custom_undo_redo_levels']; if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) { for (i=0; i 0) { this.undoIndex--; tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); inst.repaint(); if (inst.settings.custom_undo_redo_restore_selection) inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); } }, redo : function() { var inst = this.instance; tinyMCE.execCommand("mceEndTyping"); if (this.undoIndex < (this.undoLevels.length-1)) { this.undoIndex++; tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); inst.repaint(); if (inst.settings.custom_undo_redo_restore_selection) inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); } tinyMCE.triggerNodeChange(); } }; /* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */ var TinyMCE_ForceParagraphs = { _insertPara : function(inst, e) { var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0); var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock; var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null; var paraBefore, paraAfter, startChop, endChop, contents; function isEmpty(para) { function isEmptyHTML(html) { return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == ""; } // Check for images if (para.getElementsByTagName("img").length > 0) return false; // Check for tables if (para.getElementsByTagName("table").length > 0) return false; // Check for HRs if (para.getElementsByTagName("hr").length > 0) return false; // Check all textnodes var nodes = tinyMCE.getNodeTree(para, new Array(), 3); for (var i=0; i <" + blockName + "> "; paraAfter = body.childNodes[1]; } inst.selection.moveToBookmark(b); inst.selection.selectNode(paraAfter, true, true); return true; } // Place first part within new paragraph if (startChop.nodeName == blockName) rngBefore.setStart(startChop, 0); else rngBefore.setStartBefore(startChop); rngBefore.setEnd(startNode, startOffset); paraBefore.appendChild(rngBefore.cloneContents()); // Place secound part within new paragraph rngAfter.setEndAfter(endChop); rngAfter.setStart(endNode, endOffset); contents = rngAfter.cloneContents(); if (contents.firstChild && contents.firstChild.nodeName == blockName) { /* var nodes = contents.firstChild.childNodes; for (var i=0; i= r.startOffset && nv.charAt(r.startOffset - 1) == ' ') s = true;*/ // Only remove BRs if we are at the end of line #bug 1464152 if (nv != null && r.startOffset == nv.length) sn.nextSibling.parentNode.removeChild(sn.nextSibling); } if (inst.settings.auto_resize) inst.resizeToContent(); return s; } }; /* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */ function TinyMCE_Layer(id, bm) { this.id = id; this.blockerElement = null; this.events = false; this.element = null; this.blockMode = typeof(bm) != 'undefined' ? bm : true; this.doc = document; }; TinyMCE_Layer.prototype = { moveRelativeTo : function(re, p) { var rep = this.getAbsPosition(re); var w = parseInt(re.offsetWidth); var h = parseInt(re.offsetHeight); var e = this.getElement(); var ew = parseInt(e.offsetWidth); var eh = parseInt(e.offsetHeight); var x, y; switch (p) { case "tl": x = rep.absLeft; y = rep.absTop; break; case "tr": x = rep.absLeft + w; y = rep.absTop; break; case "bl": x = rep.absLeft; y = rep.absTop + h; break; case "br": x = rep.absLeft + w; y = rep.absTop + h; break; case "cc": x = rep.absLeft + (w / 2) - (ew / 2); y = rep.absTop + (h / 2) - (eh / 2); break; } this.moveTo(x, y); }, moveBy : function(x, y) { var e = this.getElement(); this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y); }, moveTo : function(x, y) { var e = this.getElement(); e.style.left = x + "px"; e.style.top = y + "px"; this.updateBlocker(); }, resizeBy : function(w, h) { var e = this.getElement(); this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h); }, resizeTo : function(w, h) { var e = this.getElement(); if (w != null) e.style.width = w + "px"; if (h != null) e.style.height = h + "px"; this.updateBlocker(); }, show : function() { var el = this.getElement(); if (el) { el.style.display = 'block'; this.updateBlocker(); } }, hide : function() { var el = this.getElement(); if (el) { el.style.display = 'none'; this.updateBlocker(); } }, isVisible : function() { return this.getElement().style.display == 'block'; }, getElement : function() { if (!this.element) this.element = this.doc.getElementById(this.id); return this.element; }, setBlockMode : function(s) { this.blockMode = s; }, updateBlocker : function() { var e, b, x, y, w, h; b = this.getBlocker(); if (b) { if (this.blockMode) { e = this.getElement(); x = this.parseInt(e.style.left); y = this.parseInt(e.style.top); w = this.parseInt(e.offsetWidth); h = this.parseInt(e.offsetHeight); b.style.left = x + 'px'; b.style.top = y + 'px'; b.style.width = w + 'px'; b.style.height = h + 'px'; b.style.display = e.style.display; } else b.style.display = 'none'; } }, getBlocker : function() { var d, b; if (!this.blockerElement && this.blockMode) { d = this.doc; b = d.getElementById(this.id + "_blocker"); if (!b) { b = d.createElement("iframe"); b.setAttribute('id', this.id + "_blocker"); b.style.cssText = 'display: none; position: absolute; left: 0; top: 0'; b.src = 'javascript:false;'; b.frameBorder = '0'; b.scrolling = 'no'; d.body.appendChild(b); } this.blockerElement = b; } return this.blockerElement; }, getAbsPosition : function(n) { var p = {absLeft : 0, absTop : 0}; while (n) { p.absLeft += n.offsetLeft; p.absTop += n.offsetTop; n = n.offsetParent; } return p; }, create : function(n, c, p, h) { var d = this.doc, e = d.createElement(n); e.setAttribute('id', this.id); if (c) e.className = c; if (!p) p = d.body; if (h) e.innerHTML = h; p.appendChild(e); return this.element = e; }, exists : function() { return this.doc.getElementById(this.id) != null; }, parseInt : function(s) { if (s == null || s == '') return 0; return parseInt(s); }, remove : function() { var e = this.getElement(), b = this.getBlocker(); if (e) e.parentNode.removeChild(e); if (b) b.parentNode.removeChild(b); } }; /* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */ function TinyMCE_Menu() { var id; if (typeof(tinyMCE.menuCounter) == "undefined") tinyMCE.menuCounter = 0; id = "mc_menu_" + tinyMCE.menuCounter++; TinyMCE_Layer.call(this, id, true); this.id = id; this.items = new Array(); this.needsUpdate = true; }; TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, { init : function(s) { var n; // Default params this.settings = { separator_class : 'mceMenuSeparator', title_class : 'mceMenuTitle', disabled_class : 'mceMenuDisabled', menu_class : 'mceMenu', drop_menu : true }; for (n in s) this.settings[n] = s[n]; this.create('div', this.settings.menu_class); }, clear : function() { this.items = new Array(); }, addTitle : function(t) { this.add({type : 'title', text : t}); }, addDisabled : function(t) { this.add({type : 'disabled', text : t}); }, addSeparator : function() { this.add({type : 'separator'}); }, addItem : function(t, js) { this.add({text : t, js : js}); }, add : function(mi) { this.items[this.items.length] = mi; this.needsUpdate = true; }, update : function() { var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings; if (this.settings.drop_menu) h += ''; h += ''; for (i=0; i'; } h += '
    '; break; case 'title': h += '
    ' + t + ''; break; case 'disabled': h += '
    ' + t + ''; break; default: h += '
    ' + t + ''; } h += '
    '; e.innerHTML = h; this.needsUpdate = false; this.updateBlocker(); }, show : function() { var nl, i; if (tinyMCE.lastMenu == this) return; if (this.needsUpdate) this.update(); if (tinyMCE.lastMenu && tinyMCE.lastMenu != this) tinyMCE.lastMenu.hide(); TinyMCE_Layer.prototype.show.call(this); if (!tinyMCE.isOpera) { // Accessibility stuff /* nl = this.getElement().getElementsByTagName("a"); if (nl.length > 0) nl[0].focus();*/ } tinyMCE.lastMenu = this; } }); /* file:jscripts/tiny_mce/classes/TinyMCE_Compatibility.class.js */ if (!Function.prototype.call) { Function.prototype.call = function() { var a = arguments, s = a[0], i, as = '', r, o; for (i=1; i 1 ? ',' : '') + 'a[' + i + ']'; o = s._fu; s._fu = this; r = eval('s._fu(' + as + ')'); s._fu = o; return r; }; }; /* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */ TinyMCE_Engine.prototype.debug = function() { var m = "", a, i, l = tinyMCE.log.length; for (i=0, a = this.debug.arguments; i'); if (tinyMCE.getParam("popups_css_add")) { c = tinyMCE.getParam("popups_css_add"); // Is relative if (c.indexOf('://') == -1 && c.charAt(0) != '/') c = tinyMCE.documentBasePath + "/" + c; document.write(''); } tinyMCE.addEvent(window, "load", this.onLoad); }, onLoad : function() { var dir, i, elms, body = document.body; if (tinyMCE.getWindowArg('mce_replacevariables', true)) body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); dir = tinyMCE.selectedInstance.settings['directionality']; if (dir == "rtl" && document.forms && document.forms.length > 0) { elms = document.forms[0].elements; for (i=0; i=0; i--) { if (wrapper.hasChildNodes()) wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); else wrapper.appendChild(nodes[i].cloneNode(true)); nodes[i].parentNode.removeChild(nodes[i]); } // Add wrapper doc.body.appendChild(wrapper); // Create iframe iframe = document.createElement("iframe"); iframe.id = "mcWinIframe"; iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings['default_document']; iframe.width = "100%"; iframe.height = "100%"; iframe.style.margin = '0'; // Add iframe doc.body.appendChild(iframe); // Measure iframe iframe = document.getElementById('mcWinIframe'); dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; // Resize window // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); window.resizeBy(dx, dy); // Hide iframe and show wrapper body.style.margin = oldMargin; iframe.style.display = 'none'; wrapper.style.display = 'block'; } }, resizeToContent : function() { var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); var isOpera = (navigator.userAgent.indexOf("Opera") != -1); if (isOpera) return; if (isMSIE) { try { window.resizeTo(10, 10); } catch (e) {} var elm = document.body; var width = elm.offsetWidth; var height = elm.offsetHeight; var dx = (elm.scrollWidth - width) + 4; var dy = elm.scrollHeight - height; try { window.resizeBy(dx, dy); } catch (e) {} } else { window.scrollBy(1000, 1000); if (window.scrollX > 0 || window.scrollY > 0) { window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); window.sizeToContent(); window.scrollTo(0, 0); var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); window.moveTo(x, y); } } }, getWindowArg : function(name, default_value) { return tinyMCE.getWindowArg(name, default_value); }, restoreSelection : function() { if (this.storeSelection) { var inst = tinyMCE.selectedInstance; inst.getWin().focus(); if (inst.selectionBookmark) inst.selection.moveToBookmark(inst.selectionBookmark); } }, execCommand : function(command, user_interface, value) { var inst = tinyMCE.selectedInstance; this.restoreSelection(); inst.execCommand(command, user_interface, value); // Store selection if (this.storeSelection) inst.selectionBookmark = inst.selection.getBookmark(true); }, close : function() { tinyMCE.closeWindow(window); }, pickColor : function(e, element_id) { tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { element_id : element_id, document : document, window : window, store_selection : false }); }, openBrowser : function(element_id, type, option) { var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); var url = document.getElementById(element_id).value; tinyMCE.setWindowArg("window", window); tinyMCE.setWindowArg("document", document); // Call to external callback if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") alert("Callback function: " + cb + " could not be found."); else eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); }, importClass : function(c) { window[c] = function() {}; for (var n in window.opener[c].prototype) window[c].prototype[n] = window.opener[c].prototype[n]; window[c].constructor = window.opener[c].constructor; } }; // Setup global instance var tinyMCEPopup = new TinyMCE_Popup(); tinyMCEPopup.init(); Hwordpress/wp-includes/js/tinymce/.svn/text-base/wp-mce-help.php.svn-base#h > <?php _e('Rich Editor Help') ?> text_direction) ) : ?> text_direction) ) : ?>

    Rich editing, also called WYSIWYG for What You See Is What You Get, means your text is formatted as you type. The rich editor creates HTML code behind the scenes while you concentrate on writing. Font styles, links and images all appear approximately as they will on the internet.') ?>

    :wordpress/wp-includes/js/tinymce/themes/advanced/about.htm 7 {$lang_about_title}

    {$lang_about_title}

    Version: {$tinymce_version} ({$tinymce_releasedate})

    TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

    Copyright © 2003-2007, Moxiecode Systems AB, All rights reserved.

    For more information about this software visit the TinyMCE website.

    {$lang_loaded_plugins}

     

    ;wordpress/wp-includes/js/tinymce/themes/advanced/anchor.htmU {$lang_insert_anchor_title}
    {$lang_insert_anchor_title}
    {$lang_insert_anchor_name}:
    {$lang_theme_charmap_title}
    {$lang_theme_charmap_title}
     
     
    HTML-Code
     
     
    NUM-Code
     
    Awordpress/wp-includes/js/tinymce/themes/advanced/color_picker.htm {$lang_theme_colorpicker_title}
    {$lang_color_picker}

    {$lang_web_colors}

    {$lang_named_colors}

    {$lang_color_name}
    Dwordpress/wp-includes/js/tinymce/themes/advanced/css/colorpicker.css/* Colorpicker dialog specific CSS */ #preview { float: right; width: 50px; height: 14px; line-height: 1px; border: 1px solid black; margin-left: 5px; } #colorpicker { float: left; cursor: crosshair; } #light { border: 1px solid gray; margin-left: 5px; float: left; width: 15px; cursor: crosshair; } #light div { overflow: hidden; } #previewblock { float: right; padding-left: 10px; height: 20px; } .panel_wrapper div.current { height: 175px; } #namedcolors { width: 150px; } #namedcolors a { display: block; float: left; width: 10px; height: 10px; margin: 1px 1px 0 0; overflow: hidden; } #colornamecontainer { margin-top: 5px; }Gwordpress/wp-includes/js/tinymce/themes/advanced/css/editor_content.css/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ /* You can extend this CSS by adding your own CSS file with the the content_css option */ body, td, pre { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } body { background-color: #FFFFFF; } .mceVisualAid { border: 1px dashed #BBBBBB !important; } div.mceVisualAid { background-image:url('../images/spacer.gif'); visibility: visible !important; } .mceItemAnchor { width: 12px; line-height: 6px; overflow: hidden; padding-left: 12px; background-image: url('../images/anchor_symbol.gif'); background-position: bottom; background-repeat: no-repeat; } /* Important is needed in Gecko browsers inorder to style links */ /* a { color: green !important; } */ /* Style selection range colors in Gecko browsers */ /* ::-moz-selection { background-color: red; color: green; } */ /* MSIE specific */ * html body { scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; } Ewordpress/wp-includes/js/tinymce/themes/advanced/css/editor_popup.css/* This file contains the CSS data for all popups in TinyMCE */ body { background-color: #F0F0EE; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; margin: 8px; } td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; } input { background: #FFFFFF; border: 1px solid #cccccc; } td, input, select, textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } input, select, textarea { border: 1px solid #808080; } .input_noborder { border: 0; } #insert, .updateButton { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/insert_button_bg.gif'); cursor: pointer; } #cancel { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/cancel_button_bg.gif'); cursor: pointer; } /* Mozilla only style */ html>body #insert, html>body #cancel { padding-bottom: 2px; } .title { font-size: 12px; font-weight: bold; color: #2B6FB6; } table.charmap { border-style: solid; border-width: 1px; border-color: #AAAAAA; } td.charmap, td.charmapOver { color: #000000; border-color: #AAAAAA; border-style: solid; border-width: 1px; text-align: center; font-size: 12px; } td.charmapOver { background-color: #CCCCCC; cursor: default; } a.charmap { color: #000000; text-decoration: none } .wordWrapCode { vertical-align: middle; border: 1px none #000000; background-color: transparent; } input.radio { border: 1px none #000000; background-color: transparent; vertical-align: middle; } input.checkbox { border: 1px none #000000; background-color: transparent; vertical-align: middle; } .mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { margin-left: 1px; } .mceButtonNormal { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceButtonOver { border: 1px solid #0A246A; cursor: default; background-color: #B6BDD2; } .mceButtonDown { cursor: default; border: 1px solid #0A246A; background-color: #8592B5; } .mceButtonDisabled { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); -moz-opacity:0.3; opacity: 0.3; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceActionPanel { margin-top: 5px; } /* Tabs classes */ .tabs { float: left; width: 100%; line-height: normal; background-image: url("../images/xp/tabs_bg.gif"); } .tabs ul { margin: 0; padding: 0 0 0; list-style: none; } .tabs li { float: left; background: url("../images/xp/tab_bg.gif") no-repeat left top; margin: 0; margin-left: 0; margin-right: 2px; padding: 0 0 0 10px; line-height: 18px; } .tabs li.current { background: url("../images/xp/tab_sel_bg.gif") no-repeat left top; margin-right: 2px; } .tabs span { float: left; display: block; background: url("../images/xp/tab_end.gif") no-repeat right top; padding: 0px 10px 0 0; } .tabs .current span { background: url("../images/xp/tab_sel_end.gif") no-repeat right top; } .tabs a { text-decoration: none; font-family: Verdana, Arial; font-size: 10px; } .tabs a:link, .tabs a:visited, .tabs a:hover { color: black; } .tabs a:hover { } .tabs .current { } .tabs .current a, .tabs .current a:link, .tabs .current a:visited { } .panel_wrapper div.panel { display: none; } .panel_wrapper div.current { display: block; width: 100%; height: 300px; overflow: visible; /* Should be auto but that breaks Safari */ } .panel_wrapper { border: 1px solid #919B9C; border-top: 0px; padding: 10px; padding-top: 5px; clear: both; background-color: white; } fieldset { border: 1px solid #919B9C; font-family: Verdana, Arial; font-size: 10px; padding: 0; margin: 0; padding: 4px; } legend { color: #2B6FB6; font-weight: bold; } .properties { width: 100%; } .properties .column1 { } .properties .column2 { text-align: left; } a:link, a:visited { color: black; } a:hover { color: #2B6FB6; } #plugintable thead { font-weight: bold; background-color: #DDDDDD; } #plugintable, #about #plugintable td { border: 1px solid #919B9C; } #plugintable { width: 99%; margin-top: 10px; } #pluginscontainer { height: 290px; overflow: auto; } /* MSIE Specific styles */ * html .panel_wrapper { width: 100%; } .column { float: left; } h1, h2, h3, h4 { color: #2B6FB6; margin: 0; padding: 0; padding-top: 5px; } h3 { font-size: 14px; } #link .panel_wrapper, #link div.current { height: 125px; } #image .panel_wrapper, #image div.current { height: 190px; } label.msg { display: none; } label.invalid { color: #EE0000; display: inline; } input.invalid { border: 1px solid #EE0000; } /* Disables the advanced tab in the table plugin. */ /* #table #advanced_tab { display: none; } */ /* Disables the border input field and label in the table plugin. */ /* #table #border, #table #borderlabel { display: none; } */ /* Below this line is WordPress customizations */ #insert, #cancel, .submitbutton { font: 11px Verdana, Arial, Helvetica, sans-serif; height: auto; width: auto; background-color: transparent; background-image: url(../../../../../../wp-admin/images/fade-butt.png); background-repeat: repeat; border: 3px double; border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(204, 204, 204); border-top-color: rgb(204, 204, 204); color: rgb(51, 51, 51); padding: 0.1em 0.5em; } #insert:active, #cancel:active, .submitbutton:active { background: #f4f4f4; border-left-color: #999; border-top-color: #999; } #styleSelectRow { display: none; } Bwordpress/wp-includes/js/tinymce/themes/advanced/css/editor_ui.css!F/* This file contains the CSS data for the editor UI of TinyMCE instances */ .mceToolbarTop a, .mceToolbarTop a:visited, .mceToolbarTop a:hover, .mceToolbarBottom a, .mceToolbarBottom a:visited, .mceToolbarBottom a:hover {border: 0; margin: 0; padding: 0; background: transparent;} .mceSeparatorLine {border: 0; padding: 0; margin-left: 4px; margin-right: 2px;} .mceSelectList {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 7pt !important; font-weight: normal; margin-top: 3px; padding: 0; display: inline; vertical-align: top; background-color: #F0F0EE;} .mceLabel, .mceLabelDisabled {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt;} .mceLabel {color: #000000;} .mceLabelDisabled {cursor: text; color: #999999;} .mceEditor {background: #F0F0EE; border: 1px solid #cccccc; padding: 0; margin: 0;} .mceEditorArea { font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; background: #FFFFFF; padding: 0; margin: 0; } .mceToolbarTop, .mceToolbarBottom {background: #F0F0EE; line-height: 1px; font-size: 1px;} .mceToolbarTop {border-bottom: 1px solid #cccccc; padding-bottom: 1px;} .mceToolbarBottom {border-top: 1px solid #cccccc;} .mceToolbarContainer {display: block; position: relative; left: 0; top: 0; width: 100%;} .mceStatusbarTop, .mceStatusbarBottom, .mceStatusbar {height: 20px;} .mceStatusbarTop .mceStatusbarPathText, .mceStatusbarBottom .mceStatusbarPathText, .mceStatusbar .mceStatusbarPathText {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; padding: 2px; line-height: 16px; overflow: visible;} .mceStatusbarTop {border-bottom: 1px solid #cccccc;} .mceStatusbarBottom {border-top: 1px solid #cccccc;} .mceStatusbar {border-bottom: 1px solid #cccccc;} .mcePathItem, .mcePathItem:link, .mcePathItem:visited, .mcePathItem:hover {text-decoration: none; font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; color: #000000;} .mcePathItem:hover {text-decoration: underline;} .mceStatusbarPathText {float: left;} .mceStatusbarResize {float: right; background-image: url('../images/statusbar_resize.gif'); background-repeat: no-repeat; width: 11px; height: 20px; cursor: se-resize;} .mceResizeBox {width: 10px; height: 10px; display: none; border: 1px dotted gray; margin: 0; padding: 0;} .mceEditorIframe {border: 0;} /* Button CSS rules */ a.mceButtonDisabled img, a.mceButtonNormal img, a.mceButtonSelected img {width: 20px; height: 20px; cursor: default; margin-top: 1px; margin-left: 1px;} a.mceButtonDisabled img {border: 0 !important;} a.mceButtonNormal img, a.mceButtonSelected img {border: 1px solid #F0F0EE !important;} a.mceButtonSelected img {border: 1px solid #6779AA !important; background-color: #D4D5D8;} a.mceButtonNormal img:hover, a.mceButtonSelected img:hover {border: 1px solid #0A246A !important; cursor: default; background-color: #B6BDD2;} a.mceButtonDisabled img {-moz-opacity:0.3; opacity: 0.3; border: 1px solid #F0F0EE !important; cursor: default;} a.mceTiledButton img {background-image: url('../images/buttons.gif'); background-repeat: no-repeat;} /* Menu button CSS rules */ span.mceMenuButton img, span.mceMenuButtonSelected img {border: 1px solid #F0F0EE; margin-left: 1px;} span.mceMenuButtonSelected img {border: 1px solid #6779AA; background-color: #B6BDD2;} span.mceMenuButtonSelected img.mceMenuButton {border: 1px solid #F0F0EE; background-color: transparent;} span.mceMenuButton img.mceMenuButton, span.mceMenuButtonSelected img.mceMenuButton {border-left: 0; margin-left: 0;} span.mceMenuButton:hover img, span.mceMenuButtonSelected:hover img {border: 1px solid #0A246A; background-color: #B6BDD2;} span.mceMenuButton:hover img.mceMenuButton, span.mceMenuButtonSelected:hover img.mceMenuButton {border-left: 0;} span.mceMenuButtonFocus img {border: 1px solid gray; border-right: 0; margin-left: 1px; background-color: #F5F4F2;} span.mceMenuButtonFocus img.mceMenuButton {border: 1px solid gray; border-left: 1px solid #F5F4F2; margin-left: 0;} span.mceMenuHover img {border: 1px solid #0A246A; background-color: #B6BDD2;} span.mceMenuButtonSelected.mceMenuHover img.mceMenuButton {border: 1px solid #0A246A; background-color: #B6BDD2; border-left: 0;} /* Menu */ .mceMenu {position: absolute; left: 0; top: 0; display: none; z-index: 1000; background-color: white; border: 1px solid gray; font-weight: normal;} .mceMenu a, .mceMenuTitle, .mceMenuDisabled {display: block; width: 100%; text-decoration: none; background-color: white; font-family: Tahoma, Verdana, Arial, Helvetica; font-size: 11px; line-height: 20px; color: black;} .mceMenu a:hover {background-color: #B6BDD2; color: black; text-decoration: none !important;} .mceMenu span {padding-left: 10px; padding-right: 10px; display: block; line-height: 20px;} .mceMenuSeparator {border-bottom: 1px solid gray; background-color: gray; height: 1px;} .mceMenuTitle span {padding-left: 5px;} .mceMenuTitle {background-color: #DDDDDD; font-weight: bold;} .mceMenuDisabled {color: gray;} span.mceMenuSelectedItem {background-image: url('../images/menu_check.gif'); background-repeat: no-repeat; background-position: 5px 8px; padding-left: 20px;} span.mceMenuCheckItem {padding-left: 20px;} span.mceMenuLine {display: block; position: absolute; left: 0; top: -1px; background-color: #F5F4F2; width: 30px; height: 1px; overflow: hidden; padding-left: 0; padding-right: 0;} .mceColors table, .mceColors td {margin: 0; padding: 2px;} a.mceMoreColors {width: auto; padding: 0; margin: 0 3px 3px 3px; text-align: center; border: 1px solid white; text-decoration: none !important;} .mceColorPreview {position: absolute; overflow:hidden; left: 0; top: 0; margin-left: 3px; margin-top: 15px; width: 16px; height: 4px; background-color: red;} a.mceMoreColors:hover {border: 1px solid #0A246A;} .mceColors td a {width: 9px; height: 9px; overflow: hidden; border: 1px solid #808080;} /* MSIE 6 specific rules */ * html a.mceButtonNormal img, * html a.mceButtonSelected img, * html a.mceButtonDisabled img {border: 0 !important; margin-top: 2px; margin-bottom: 1px;} * html a.mceButtonDisabled img {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); border: 0 !important;} * html a.mceButtonDisabled {border: 1px solid #F0F0EE !important;} * html a.mceButtonNormal, * html a.mceButtonSelected {border: 1px solid #F0F0EE !important; cursor: default;} * html a.mceButtonSelected {border: 1px solid #6779AA !important; background-color: #D4D5D8;} * html a.mceButtonNormal:hover, * html a.mceButtonSelected:hover {border: 1px solid #0A246A !important; background-color: #B6BDD2; cursor: default;} * html .mceSelectList {margin-top: 2px;} * html span.mceMenuButton, * html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;} * html span.mceMenuButton img, * html span.mceMenuButtonSelected img, * html span.mceMenuButtonFocus img {position: relative; top: 1px;} * html a.mceMoreColors {width: auto;} * html .mceColors td a {width: 10px; height: 10px;} * html .mceColorPreview {margin-left: 2px; margin-top: 14px;} /* MSIE 7 specific rules */ *:first-child+html a.mceButtonNormal img, *:first-child+html a.mceButtonSelected img, *:first-child+html a.mceButtonDisabled img {border: 0 !important; margin-top: 2px; margin-bottom: 1px;} *:first-child+html a.mceButtonDisabled img {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); border: 0 !important;} *:first-child+html a.mceButtonDisabled {border: 1px solid #F0F0EE !important;} *:first-child+html a.mceButtonNormal, *:first-child+html a.mceButtonSelected {border: 1px solid #F0F0EE !important; cursor: default;} *:first-child+html a.mceButtonSelected {border: 1px solid #6779AA !important; background-color: #D4D5D8;} *:first-child+html a.mceButtonNormal:hover, *:first-child+html a.mceButtonSelected:hover {border: 1px solid #0A246A !important; background-color: #B6BDD2; cursor: default;} *:first-child+html .mceSelectList {margin-top: 2px;} *:first-child+html span.mceMenuButton, *:first-child+html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;} *:first-child+html span.mceMenuButton img, *:first-child+html span.mceMenuButtonSelected img, *:first-child+html span.mceMenuButtonFocus img {position: relative; top: 1px;} *:first-child+html a.mceMoreColors {width: 137px;} *:first-child+html .mceColors td a {width: 10px; height: 10px;} *:first-child+html .mceColorPreview {margin: 0; padding-left: 4px; margin-top: 14px; width: 14px;} Awordpress/wp-includes/js/tinymce/themes/advanced/css/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/themes/advanced/css svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 editor_popup.css file 2008-11-20T16:30:33.000000Z b86dfe84d14780cc3c9b35781809f046 2008-10-28T18:17:06.112729Z 97 paul colorpicker.css file 2008-11-20T16:30:33.000000Z 61140d3dc718dca29e319aa3072e6f9f 2008-10-28T18:17:06.112729Z 97 paul editor_content.css file 2008-11-20T16:30:33.000000Z 577740b3c4125b3eef84905151a9f0ff 2008-10-28T18:17:06.112729Z 97 paul editor_ui.css file 2008-11-20T16:30:33.000000Z 16814b0e0cc2e6bbacc6c715f191bc10 2008-10-28T18:17:06.112729Z 97 paul @wordpress/wp-includes/js/tinymce/themes/advanced/css/.svn/format8 \wordpress/wp-includes/js/tinymce/themes/advanced/css/.svn/text-base/colorpicker.css.svn-base/* Colorpicker dialog specific CSS */ #preview { float: right; width: 50px; height: 14px; line-height: 1px; border: 1px solid black; margin-left: 5px; } #colorpicker { float: left; cursor: crosshair; } #light { border: 1px solid gray; margin-left: 5px; float: left; width: 15px; cursor: crosshair; } #light div { overflow: hidden; } #previewblock { float: right; padding-left: 10px; height: 20px; } .panel_wrapper div.current { height: 175px; } #namedcolors { width: 150px; } #namedcolors a { display: block; float: left; width: 10px; height: 10px; margin: 1px 1px 0 0; overflow: hidden; } #colornamecontainer { margin-top: 5px; }_wordpress/wp-includes/js/tinymce/themes/advanced/css/.svn/text-base/editor_content.css.svn-base/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ /* You can extend this CSS by adding your own CSS file with the the content_css option */ body, td, pre { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } body { background-color: #FFFFFF; } .mceVisualAid { border: 1px dashed #BBBBBB !important; } div.mceVisualAid { background-image:url('../images/spacer.gif'); visibility: visible !important; } .mceItemAnchor { width: 12px; line-height: 6px; overflow: hidden; padding-left: 12px; background-image: url('../images/anchor_symbol.gif'); background-position: bottom; background-repeat: no-repeat; } /* Important is needed in Gecko browsers inorder to style links */ /* a { color: green !important; } */ /* Style selection range colors in Gecko browsers */ /* ::-moz-selection { background-color: red; color: green; } */ /* MSIE specific */ * html body { scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; } ]wordpress/wp-includes/js/tinymce/themes/advanced/css/.svn/text-base/editor_popup.css.svn-base/* This file contains the CSS data for all popups in TinyMCE */ body { background-color: #F0F0EE; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; scrollbar-3dlight-color: #F0F0EE; scrollbar-arrow-color: #676662; scrollbar-base-color: #F0F0EE; scrollbar-darkshadow-color: #DDDDDD; scrollbar-face-color: #E0E0DD; scrollbar-highlight-color: #F0F0EE; scrollbar-shadow-color: #F0F0EE; scrollbar-track-color: #F5F5F5; margin: 8px; } td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; } input { background: #FFFFFF; border: 1px solid #cccccc; } td, input, select, textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } input, select, textarea { border: 1px solid #808080; } .input_noborder { border: 0; } #insert, .updateButton { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/insert_button_bg.gif'); cursor: pointer; } #cancel { font-weight: bold; width: 90px; height: 21px; border: 0; background-image: url('../images/cancel_button_bg.gif'); cursor: pointer; } /* Mozilla only style */ html>body #insert, html>body #cancel { padding-bottom: 2px; } .title { font-size: 12px; font-weight: bold; color: #2B6FB6; } table.charmap { border-style: solid; border-width: 1px; border-color: #AAAAAA; } td.charmap, td.charmapOver { color: #000000; border-color: #AAAAAA; border-style: solid; border-width: 1px; text-align: center; font-size: 12px; } td.charmapOver { background-color: #CCCCCC; cursor: default; } a.charmap { color: #000000; text-decoration: none } .wordWrapCode { vertical-align: middle; border: 1px none #000000; background-color: transparent; } input.radio { border: 1px none #000000; background-color: transparent; vertical-align: middle; } input.checkbox { border: 1px none #000000; background-color: transparent; vertical-align: middle; } .mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { margin-left: 1px; } .mceButtonNormal { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceButtonOver { border: 1px solid #0A246A; cursor: default; background-color: #B6BDD2; } .mceButtonDown { cursor: default; border: 1px solid #0A246A; background-color: #8592B5; } .mceButtonDisabled { filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); -moz-opacity:0.3; opacity: 0.3; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-right: 1px solid; border-color: #F0F0EE; cursor: default; } .mceActionPanel { margin-top: 5px; } /* Tabs classes */ .tabs { float: left; width: 100%; line-height: normal; background-image: url("../images/xp/tabs_bg.gif"); } .tabs ul { margin: 0; padding: 0 0 0; list-style: none; } .tabs li { float: left; background: url("../images/xp/tab_bg.gif") no-repeat left top; margin: 0; margin-left: 0; margin-right: 2px; padding: 0 0 0 10px; line-height: 18px; } .tabs li.current { background: url("../images/xp/tab_sel_bg.gif") no-repeat left top; margin-right: 2px; } .tabs span { float: left; display: block; background: url("../images/xp/tab_end.gif") no-repeat right top; padding: 0px 10px 0 0; } .tabs .current span { background: url("../images/xp/tab_sel_end.gif") no-repeat right top; } .tabs a { text-decoration: none; font-family: Verdana, Arial; font-size: 10px; } .tabs a:link, .tabs a:visited, .tabs a:hover { color: black; } .tabs a:hover { } .tabs .current { } .tabs .current a, .tabs .current a:link, .tabs .current a:visited { } .panel_wrapper div.panel { display: none; } .panel_wrapper div.current { display: block; width: 100%; height: 300px; overflow: visible; /* Should be auto but that breaks Safari */ } .panel_wrapper { border: 1px solid #919B9C; border-top: 0px; padding: 10px; padding-top: 5px; clear: both; background-color: white; } fieldset { border: 1px solid #919B9C; font-family: Verdana, Arial; font-size: 10px; padding: 0; margin: 0; padding: 4px; } legend { color: #2B6FB6; font-weight: bold; } .properties { width: 100%; } .properties .column1 { } .properties .column2 { text-align: left; } a:link, a:visited { color: black; } a:hover { color: #2B6FB6; } #plugintable thead { font-weight: bold; background-color: #DDDDDD; } #plugintable, #about #plugintable td { border: 1px solid #919B9C; } #plugintable { width: 99%; margin-top: 10px; } #pluginscontainer { height: 290px; overflow: auto; } /* MSIE Specific styles */ * html .panel_wrapper { width: 100%; } .column { float: left; } h1, h2, h3, h4 { color: #2B6FB6; margin: 0; padding: 0; padding-top: 5px; } h3 { font-size: 14px; } #link .panel_wrapper, #link div.current { height: 125px; } #image .panel_wrapper, #image div.current { height: 190px; } label.msg { display: none; } label.invalid { color: #EE0000; display: inline; } input.invalid { border: 1px solid #EE0000; } /* Disables the advanced tab in the table plugin. */ /* #table #advanced_tab { display: none; } */ /* Disables the border input field and label in the table plugin. */ /* #table #border, #table #borderlabel { display: none; } */ /* Below this line is WordPress customizations */ #insert, #cancel, .submitbutton { font: 11px Verdana, Arial, Helvetica, sans-serif; height: auto; width: auto; background-color: transparent; background-image: url(../../../../../../wp-admin/images/fade-butt.png); background-repeat: repeat; border: 3px double; border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(204, 204, 204); border-top-color: rgb(204, 204, 204); color: rgb(51, 51, 51); padding: 0.1em 0.5em; } #insert:active, #cancel:active, .submitbutton:active { background: #f4f4f4; border-left-color: #999; border-top-color: #999; } #styleSelectRow { display: none; } Zwordpress/wp-includes/js/tinymce/themes/advanced/css/.svn/text-base/editor_ui.css.svn-base!F/* This file contains the CSS data for the editor UI of TinyMCE instances */ .mceToolbarTop a, .mceToolbarTop a:visited, .mceToolbarTop a:hover, .mceToolbarBottom a, .mceToolbarBottom a:visited, .mceToolbarBottom a:hover {border: 0; margin: 0; padding: 0; background: transparent;} .mceSeparatorLine {border: 0; padding: 0; margin-left: 4px; margin-right: 2px;} .mceSelectList {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 7pt !important; font-weight: normal; margin-top: 3px; padding: 0; display: inline; vertical-align: top; background-color: #F0F0EE;} .mceLabel, .mceLabelDisabled {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt;} .mceLabel {color: #000000;} .mceLabelDisabled {cursor: text; color: #999999;} .mceEditor {background: #F0F0EE; border: 1px solid #cccccc; padding: 0; margin: 0;} .mceEditorArea { font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; background: #FFFFFF; padding: 0; margin: 0; } .mceToolbarTop, .mceToolbarBottom {background: #F0F0EE; line-height: 1px; font-size: 1px;} .mceToolbarTop {border-bottom: 1px solid #cccccc; padding-bottom: 1px;} .mceToolbarBottom {border-top: 1px solid #cccccc;} .mceToolbarContainer {display: block; position: relative; left: 0; top: 0; width: 100%;} .mceStatusbarTop, .mceStatusbarBottom, .mceStatusbar {height: 20px;} .mceStatusbarTop .mceStatusbarPathText, .mceStatusbarBottom .mceStatusbarPathText, .mceStatusbar .mceStatusbarPathText {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; padding: 2px; line-height: 16px; overflow: visible;} .mceStatusbarTop {border-bottom: 1px solid #cccccc;} .mceStatusbarBottom {border-top: 1px solid #cccccc;} .mceStatusbar {border-bottom: 1px solid #cccccc;} .mcePathItem, .mcePathItem:link, .mcePathItem:visited, .mcePathItem:hover {text-decoration: none; font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; color: #000000;} .mcePathItem:hover {text-decoration: underline;} .mceStatusbarPathText {float: left;} .mceStatusbarResize {float: right; background-image: url('../images/statusbar_resize.gif'); background-repeat: no-repeat; width: 11px; height: 20px; cursor: se-resize;} .mceResizeBox {width: 10px; height: 10px; display: none; border: 1px dotted gray; margin: 0; padding: 0;} .mceEditorIframe {border: 0;} /* Button CSS rules */ a.mceButtonDisabled img, a.mceButtonNormal img, a.mceButtonSelected img {width: 20px; height: 20px; cursor: default; margin-top: 1px; margin-left: 1px;} a.mceButtonDisabled img {border: 0 !important;} a.mceButtonNormal img, a.mceButtonSelected img {border: 1px solid #F0F0EE !important;} a.mceButtonSelected img {border: 1px solid #6779AA !important; background-color: #D4D5D8;} a.mceButtonNormal img:hover, a.mceButtonSelected img:hover {border: 1px solid #0A246A !important; cursor: default; background-color: #B6BDD2;} a.mceButtonDisabled img {-moz-opacity:0.3; opacity: 0.3; border: 1px solid #F0F0EE !important; cursor: default;} a.mceTiledButton img {background-image: url('../images/buttons.gif'); background-repeat: no-repeat;} /* Menu button CSS rules */ span.mceMenuButton img, span.mceMenuButtonSelected img {border: 1px solid #F0F0EE; margin-left: 1px;} span.mceMenuButtonSelected img {border: 1px solid #6779AA; background-color: #B6BDD2;} span.mceMenuButtonSelected img.mceMenuButton {border: 1px solid #F0F0EE; background-color: transparent;} span.mceMenuButton img.mceMenuButton, span.mceMenuButtonSelected img.mceMenuButton {border-left: 0; margin-left: 0;} span.mceMenuButton:hover img, span.mceMenuButtonSelected:hover img {border: 1px solid #0A246A; background-color: #B6BDD2;} span.mceMenuButton:hover img.mceMenuButton, span.mceMenuButtonSelected:hover img.mceMenuButton {border-left: 0;} span.mceMenuButtonFocus img {border: 1px solid gray; border-right: 0; margin-left: 1px; background-color: #F5F4F2;} span.mceMenuButtonFocus img.mceMenuButton {border: 1px solid gray; border-left: 1px solid #F5F4F2; margin-left: 0;} span.mceMenuHover img {border: 1px solid #0A246A; background-color: #B6BDD2;} span.mceMenuButtonSelected.mceMenuHover img.mceMenuButton {border: 1px solid #0A246A; background-color: #B6BDD2; border-left: 0;} /* Menu */ .mceMenu {position: absolute; left: 0; top: 0; display: none; z-index: 1000; background-color: white; border: 1px solid gray; font-weight: normal;} .mceMenu a, .mceMenuTitle, .mceMenuDisabled {display: block; width: 100%; text-decoration: none; background-color: white; font-family: Tahoma, Verdana, Arial, Helvetica; font-size: 11px; line-height: 20px; color: black;} .mceMenu a:hover {background-color: #B6BDD2; color: black; text-decoration: none !important;} .mceMenu span {padding-left: 10px; padding-right: 10px; display: block; line-height: 20px;} .mceMenuSeparator {border-bottom: 1px solid gray; background-color: gray; height: 1px;} .mceMenuTitle span {padding-left: 5px;} .mceMenuTitle {background-color: #DDDDDD; font-weight: bold;} .mceMenuDisabled {color: gray;} span.mceMenuSelectedItem {background-image: url('../images/menu_check.gif'); background-repeat: no-repeat; background-position: 5px 8px; padding-left: 20px;} span.mceMenuCheckItem {padding-left: 20px;} span.mceMenuLine {display: block; position: absolute; left: 0; top: -1px; background-color: #F5F4F2; width: 30px; height: 1px; overflow: hidden; padding-left: 0; padding-right: 0;} .mceColors table, .mceColors td {margin: 0; padding: 2px;} a.mceMoreColors {width: auto; padding: 0; margin: 0 3px 3px 3px; text-align: center; border: 1px solid white; text-decoration: none !important;} .mceColorPreview {position: absolute; overflow:hidden; left: 0; top: 0; margin-left: 3px; margin-top: 15px; width: 16px; height: 4px; background-color: red;} a.mceMoreColors:hover {border: 1px solid #0A246A;} .mceColors td a {width: 9px; height: 9px; overflow: hidden; border: 1px solid #808080;} /* MSIE 6 specific rules */ * html a.mceButtonNormal img, * html a.mceButtonSelected img, * html a.mceButtonDisabled img {border: 0 !important; margin-top: 2px; margin-bottom: 1px;} * html a.mceButtonDisabled img {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); border: 0 !important;} * html a.mceButtonDisabled {border: 1px solid #F0F0EE !important;} * html a.mceButtonNormal, * html a.mceButtonSelected {border: 1px solid #F0F0EE !important; cursor: default;} * html a.mceButtonSelected {border: 1px solid #6779AA !important; background-color: #D4D5D8;} * html a.mceButtonNormal:hover, * html a.mceButtonSelected:hover {border: 1px solid #0A246A !important; background-color: #B6BDD2; cursor: default;} * html .mceSelectList {margin-top: 2px;} * html span.mceMenuButton, * html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;} * html span.mceMenuButton img, * html span.mceMenuButtonSelected img, * html span.mceMenuButtonFocus img {position: relative; top: 1px;} * html a.mceMoreColors {width: auto;} * html .mceColors td a {width: 10px; height: 10px;} * html .mceColorPreview {margin-left: 2px; margin-top: 14px;} /* MSIE 7 specific rules */ *:first-child+html a.mceButtonNormal img, *:first-child+html a.mceButtonSelected img, *:first-child+html a.mceButtonDisabled img {border: 0 !important; margin-top: 2px; margin-bottom: 1px;} *:first-child+html a.mceButtonDisabled img {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); border: 0 !important;} *:first-child+html a.mceButtonDisabled {border: 1px solid #F0F0EE !important;} *:first-child+html a.mceButtonNormal, *:first-child+html a.mceButtonSelected {border: 1px solid #F0F0EE !important; cursor: default;} *:first-child+html a.mceButtonSelected {border: 1px solid #6779AA !important; background-color: #D4D5D8;} *:first-child+html a.mceButtonNormal:hover, *:first-child+html a.mceButtonSelected:hover {border: 1px solid #0A246A !important; background-color: #B6BDD2; cursor: default;} *:first-child+html .mceSelectList {margin-top: 2px;} *:first-child+html span.mceMenuButton, *:first-child+html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;} *:first-child+html span.mceMenuButton img, *:first-child+html span.mceMenuButtonSelected img, *:first-child+html span.mceMenuButtonFocus img {position: relative; top: 1px;} *:first-child+html a.mceMoreColors {width: 137px;} *:first-child+html .mceColors td a {width: 10px; height: 10px;} *:first-child+html .mceColorPreview {margin: 0; padding-left: 4px; margin-top: 14px; width: 14px;} Cwordpress/wp-includes/js/tinymce/themes/advanced/editor_template.js/** * $Id: editor_template_src.js 218 2007-02-13 11:08:01Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import theme specific language pack */ tinyMCE.importThemeLanguagePack('advanced'); var TinyMCE_AdvancedTheme = { // Private theme fields _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF", _autoImportCSSClasses : true, _resizer : {}, _buttons : [ // Control id, button img, button title, command, user_interface, value ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'], ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'], ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'], ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'], ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'], ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'], ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'], ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'], ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'], ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'], ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'], ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'], ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'], ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'], ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'], ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'], ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'], ['link', 'link.gif', 'lang_link_desc', 'mceLink', true], ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'], ['image', 'image.gif', 'lang_image_desc', 'mceImage', true], ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'], ['help', 'help.gif', 'lang_help_desc', 'mceHelp'], ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'], ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'], ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'], ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'], ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'], ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true], ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true], ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true], ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true], ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'], ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'], ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'], ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument'] ], _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table', /** * Returns HTML code for the specificed control. */ getControlHTML : function(button_name) { var i, x, but; // Lookup button in button list for (i=0; i 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); if (but[0] == button_name) return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); } // Custom controlls other than buttons switch (button_name) { case "formatselect": var html = ''; return html; case "styleselect": return ''; case "fontselect": var fontHTML = ''; return fontHTML; case "fontsizeselect": return ''; case "|": case "separator": return ''; case "spacer": return ''; case "rowseparator": return '
    '; } return ""; }, /** * Theme specific execcommand handling. */ execCommand : function(editor_id, element, command, user_interface, value) { switch (command) { case 'mceHelp': tinyMCE.openWindow({ file : 'about.htm', width : 480, height : 380 }, { tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion, tinymce_releasedate : tinyMCE.releaseDate, inline : "yes" }); return true; case "mceLink": var inst = tinyMCE.getInstanceById(editor_id); var doc = inst.getDoc(); var selectedText = ""; if (tinyMCE.isMSIE) { var rng = doc.selection.createRange(); selectedText = rng.text; } else selectedText = inst.getSel().toString(); if (!tinyMCE.linkElement) { if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) return true; } var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") tinyMCE.linkElement = tinyMCE.selectedElement; // Is anchor not a link if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") tinyMCE.linkElement = null; if (tinyMCE.linkElement) { href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); // Try old onclick to if copy/pasted content if (onclick == "") onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); onclick = tinyMCE.cleanupEventStr(onclick); href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); // Use mce_href if defined mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href'); if (mceRealHref != "") { href = mceRealHref; if (tinyMCE.getParam('convert_urls')) href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); } action = "update"; } var template = new Array(); template['file'] = 'link.htm'; template['width'] = 310; template['height'] = 200; // Language specific width and height addons template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); if (inst.settings['insertlink_callback']) { var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); if (returnVal && returnVal['href']) TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); } else { tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"}); } return true; case "mceImage": var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; var title = "", onmouseover = "", onmouseout = "", action = "insert"; var img = tinyMCE.imgElement; var inst = tinyMCE.getInstanceById(editor_id); if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { img = tinyMCE.selectedElement; tinyMCE.imgElement = img; } if (img) { // Is it a internal MCE visual aid image, then skip this one. if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) return true; src = tinyMCE.getAttrib(img, 'src'); alt = tinyMCE.getAttrib(img, 'alt'); // Try polling out the title if (alt == "") alt = tinyMCE.getAttrib(img, 'title'); // Fix width/height attributes if the styles is specified if (tinyMCE.isGecko) { var w = img.style.width; if (w != null && w != "") img.setAttribute("width", w); var h = img.style.height; if (h != null && h != "") img.setAttribute("height", h); } border = tinyMCE.getAttrib(img, 'border'); hspace = tinyMCE.getAttrib(img, 'hspace'); vspace = tinyMCE.getAttrib(img, 'vspace'); width = tinyMCE.getAttrib(img, 'width'); height = tinyMCE.getAttrib(img, 'height'); align = tinyMCE.getAttrib(img, 'align'); onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); title = tinyMCE.getAttrib(img, 'title'); // Is realy specified? if (tinyMCE.isMSIE) { width = img.attributes['width'].specified ? width : ""; height = img.attributes['height'].specified ? height : ""; } //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); // Use mce_src if defined mceRealSrc = tinyMCE.getAttrib(img, 'mce_src'); if (mceRealSrc != "") { src = mceRealSrc; if (tinyMCE.getParam('convert_urls')) src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); } //if (onmouseover != "") // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); //if (onmouseout != "") // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); action = "update"; } var template = new Array(); template['file'] = 'image.htm?src={$src}'; template['width'] = 355; template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0); // Language specific width and height addons template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); if (inst.settings['insertimage_callback']) { var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); if (returnVal && returnVal['src']) TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); } else tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"}); return true; case "forecolor": var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm; TinyMCE_AdvancedTheme._hideMenus(editor_id); if (!fcp.exists()) { fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); elm = fcp.getElement(); elm._editor_id = editor_id; elm._command = "forecolor"; elm._switchId = editor_id + "_forecolor"; tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); } img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0]; p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); fcp.moveTo(p.absLeft, p.absTop); fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor; fcp.show(); return false; case "forecolorpicker": this._pickColor(editor_id, 'forecolor'); return true; case "forecolorMenu": TinyMCE_AdvancedTheme._hideMenus(editor_id); // Create color layer var ml = new TinyMCE_Layer(editor_id + '_fcMenu'); if (!ml.exists()) ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor')); tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus'); ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl'); ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); if (tinyMCE.isOpera) ml.moveBy(0, -2); ml.show(); return true; case "HiliteColor": var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img; TinyMCE_AdvancedTheme._hideMenus(editor_id); if (!bcp.exists()) { bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); elm = bcp.getElement(); elm._editor_id = editor_id; elm._command = "HiliteColor"; elm._switchId = editor_id + "_backcolor"; tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); } img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0]; p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); bcp.moveTo(p.absLeft, p.absTop); bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor; bcp.show(); return false; case "HiliteColorMenu": TinyMCE_AdvancedTheme._hideMenus(editor_id); // Create color layer var ml = new TinyMCE_Layer(editor_id + '_bcMenu'); if (!ml.exists()) ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor')); tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus'); ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl'); ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); if (tinyMCE.isOpera) ml.moveBy(0, -2); ml.show(); return true; case "backcolorpicker": this._pickColor(editor_id, 'HiliteColor'); return true; case "mceColorPicker": if (user_interface) { var template = []; if (!value['callback'] && !value['color']) value['color'] = value['document'].getElementById(value['element_id']).value; template['file'] = 'color_picker.htm'; template['width'] = 380; template['height'] = 250; template['close_previous'] = "no"; template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0); template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0); if (typeof(value['store_selection']) == "undefined") value['store_selection'] = true; tinyMCE.lastColorPickerValue = value; tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']}); } else { var savedVal = tinyMCE.lastColorPickerValue, elm; if (savedVal['callback']) { savedVal['callback'](value); return true; } elm = savedVal['document'].getElementById(savedVal['element_id']); elm.value = value; if (elm.onchange != null && elm.onchange != '') eval('elm.onchange();'); } return true; case "mceCodeEditor": var template = new Array(); template['file'] = 'source_editor.htm'; template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720)); template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580)); tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"}); return true; case "mceCharMap": var template = new Array(); template['file'] = 'charmap.htm'; template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0); template['height'] = 250; template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0); template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0); tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); return true; case "mceInsertAnchor": var template = new Array(); template['file'] = 'anchor.htm'; template['width'] = 320; template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0); template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0); template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0); tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); return true; case "mceNewDocument": if (confirm(tinyMCE.getLang('lang_newdocument'))) tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' '); return true; } return false; }, /** * Editor instance template function. */ getEditorTemplate : function(settings, editorId) { function removeFromArray(in_array, remove_array) { var outArray = new Array(), skip; for (var i=0; i 

    '; var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout"); // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY! var styleSelectHTML = ''; if (settings['theme_advanced_styles']) { var stylesAr = settings['theme_advanced_styles'].split(';'); for (var i=0; i' + key + ''; } TinyMCE_AdvancedTheme._autoImportCSSClasses = false; } switch(layoutManager) { case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... var toolbarHTML = ""; var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation); var defVals = { theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap" }; // Add accessibility control toolbarHTML += ' 0) { toolbarHTML += "
    "; deltaHeight -= 23; } } // Add accessibility control toolbarHTML += '
    '; // Setup template html template['html'] = ''; if (toolbarLocation == "top") template['html'] += ''; if (statusbarLocation == "top") { template['html'] += ''; deltaHeight -= 23; } template['html'] += ''; if (toolbarLocation == "bottom") template['html'] += ''; // External toolbar changes if (toolbarLocation == "external") { var bod = document.body; var elm = document.createElement ("div"); toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId}); elm.className = "mceToolbarExternal"; elm.id = editorId+"_toolbar"; elm.innerHTML = '
    ' + toolbarHTML + '
    ' + statusbarHTML + '
    ' + toolbarHTML + '
    '+toolbarHTML+'
    '; bod.appendChild (elm); // bod.style.marginTop = elm.offsetHeight + "px"; deltaHeight = 0; tinyMCE.getInstanceById(editorId).toolbarElement = elm; //template['html'] = '
    '+toolbarHTML+'
    ' + template["html"]; } else { tinyMCE.getInstanceById(editorId).toolbarElement = null; } if (statusbarLocation == "bottom") { template['html'] += '' + statusbarHTML + ''; deltaHeight -= 23; } template['html'] += ''; //"SimpleLayout" break; case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. template['html'] = ''; var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); //Render Containers: for (var i = 0; i < containers.length; i++) { if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... template['html'] += ''; else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath: { var pathClass = "mceStatusbar"; if (i == containers.length-1) { pathClass = "mceStatusbarBottom"; } else if (i == 0) { pathClass = "mceStatusbar"; } else { deltaHeight-=2; } template['html'] += ''; deltaHeight -= 22; } else { // Render normal Container var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); var curContainerHTML = ""; var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); for (var j=0; j 0) { curContainerHTML += "
    "; deltaHeight -= 23; } template['html'] += '
    '; } } template['html'] += '
    ' + statusbarHTML + '
    ' + curContainerHTML + '
    '; //RowLayout break; case "CustomLayout" : //User defined layout callback... var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { template = eval(customLayout + "(template);"); } break; } if (resizing) template['html'] += ''; template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); // Set to default values if (!template['delta_width']) template['delta_width'] = 0; if (!template['delta_height']) template['delta_height'] = deltaHeight; return template; }, initInstance : function(inst) { if (tinyMCE.getParam("theme_advanced_resizing", false)) { if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width"); var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height"); TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true)); } } inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink'); }, removeInstance : function(inst) { new TinyMCE_Layer(inst.editorId + '_fcMenu').remove(); new TinyMCE_Layer(inst.editorId + '_bcMenu').remove(); }, hideInstance : function(inst) { TinyMCE_AdvancedTheme._hideMenus(inst.editorId); }, _handleMenuEvent : function(e) { var te = tinyMCE.isMSIE ? window.event.srcElement : e.target; tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId)); if (e.type == "click") tinyMCE.execInstanceCommand(te._editor_id, te._command); }, _hideMenus : function(id) { var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu'); if (fcml.exists() && fcml.isVisible()) { tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton'); fcml.hide(); } if (bcml.exists() && bcml.isVisible()) { tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton'); bcml.hide(); } }, /** * Node change handler. */ handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) { var alignNode, breakOut, classNode; function selectByValue(select_elm, value, first_index) { first_index = typeof(first_index) == "undefined" ? false : true; if (select_elm) { for (var i=0; i=0; i--) { var nodeName = path[i].nodeName.toLowerCase(); var nodeData = ""; if (nodeName.indexOf("html:") == 0) nodeName = nodeName.substring(5); if (nodeName == "b") { nodeName = "strong"; } if (nodeName == "i") { nodeName = "em"; } if (nodeName == "span") { var cn = tinyMCE.getAttrib(path[i], "class"); if (cn != "" && cn.indexOf('mceItem') == -1) nodeData += "class: " + cn + " "; var st = tinyMCE.getAttrib(path[i], "style"); if (st != "") { st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st)); nodeData += "style: " + tinyMCE.xmlEncode(st) + " "; } } if (nodeName == "font") { if (tinyMCE.getParam("convert_fonts_to_spans")) nodeName = "span"; var face = tinyMCE.getAttrib(path[i], "face"); if (face != "") nodeData += "font: " + tinyMCE.xmlEncode(face) + " "; var size = tinyMCE.getAttrib(path[i], "size"); if (size != "") nodeData += "size: " + tinyMCE.xmlEncode(size) + " "; var color = tinyMCE.getAttrib(path[i], "color"); if (color != "") nodeData += "color: " + tinyMCE.xmlEncode(color) + " "; } if (tinyMCE.getAttrib(path[i], 'id') != "") { nodeData += "id: " + path[i].getAttribute('id') + " "; } var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); if (className != "" && className.indexOf('mceItem') == -1) nodeData += "class: " + className + " "; if (tinyMCE.getAttrib(path[i], 'src') != "") { var src = tinyMCE.getAttrib(path[i], "mce_src"); if (src == "") src = tinyMCE.getAttrib(path[i], "src"); nodeData += "src: " + tinyMCE.xmlEncode(src) + " "; } if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") { var href = tinyMCE.getAttrib(path[i], "mce_href"); if (href == "") href = tinyMCE.getAttrib(path[i], "href"); nodeData += "href: " + tinyMCE.xmlEncode(href) + " "; } className = tinyMCE.getAttrib(path[i], "class"); if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) { nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase(); nodeData = path[i].getAttribute('title'); } if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") { nodeName = "a"; nodeName += "#" + tinyMCE.xmlEncode(anchor); nodeData = ""; } if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) { var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); if (className != "" && className.indexOf('mceItem') == -1) { nodeName += "." + className; } } var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');'; html += '' + nodeName + ''; if (i > 0) { html += " » "; } } pathElm.innerHTML = '' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' '; } // Reset old states tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal'); if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1) tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected'); // Get link var anchorLink = tinyMCE.getParentElement(node, "a", "href"); if (anchorLink || any_selection) { tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); } // Handle visual aid tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal'); if (undo_levels != -1) { tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled'); } // Within li, blockquote if (tinyMCE.getParentElement(node, "li,blockquote")) tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal'); // Has redo levels if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal'); // Has undo levels if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal'); // Select class in select box var selectElm = document.getElementById(editor_id + "_styleSelect"); if (selectElm) { TinyMCE_AdvancedTheme._setupCSSClasses(editor_id); classNode = node; breakOut = false; var index = 0; do { if (classNode && classNode.className) { for (var i=0; i"); else selectByValue(selectElm, ""); } // Select fontselect var selectElm = document.getElementById(editor_id + "_fontNameSelect"); if (selectElm) { if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) { var face = inst.queryCommandValue('FontName'); face = face == null || face == "" ? "" : face; selectByValue(selectElm, face, face != ""); } else { var elm = tinyMCE.getParentElement(node, "font", "face"); if (elm) { var family = tinyMCE.getAttrib(elm, "face"); if (family == '') family = '' + elm.style.fontFamily; if (!selectByValue(selectElm, family, family != "")) selectByValue(selectElm, ""); } else selectByValue(selectElm, ""); } } // Select fontsize var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); if (selectElm) { if (!tinyMCE.isSafari && !tinyMCE.isOpera) { var size = inst.queryCommandValue('FontSize'); selectByValue(selectElm, size == null || size == "" ? "0" : size); } else { var elm = tinyMCE.getParentElement(node, "font", "size"); if (elm) { var size = tinyMCE.getAttrib(elm, "size"); if (size == '') { var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px'); size = '' + elm.style.fontSize; for (var i=0; i 0) selectElm.setAttribute('cssImported', 'true'); } }, _setCookie : function(name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + escape(path) : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); document.cookie = curCookie; }, _getCookie : function(name) { var dc = document.cookie; var prefix = name + "="; var begin = dc.indexOf("; " + prefix); if (begin == -1) { begin = dc.indexOf(prefix); if (begin != 0) return null; } else begin += 2; var end = document.cookie.indexOf(";", begin); if (end == -1) end = dc.length; return unescape(dc.substring(begin + prefix.length, end)); }, _resizeTo : function(inst, w, h, set_w) { var editorContainer = document.getElementById(inst.editorId + '_parent'); var tableElm = editorContainer.firstChild; var iframe = inst.iframeElement; if (w == null || w == "null") { set_w = false; w = 0; } if (h == null || h == "null") return; w = parseInt(w); h = parseInt(h); if (tinyMCE.isGecko) { w += 2; h += 2; } var dx = w - tableElm.clientWidth; var dy = h - tableElm.clientHeight; w = w < 1 ? 30 : w; h = h < 1 ? 30 : h; if (set_w) tableElm.style.width = w + "px"; if ( !tinyMCE.isMSIE || tinyMCE.isMSIE7 || tinyMCE.isOpera ) // WordPress: do this later to avoid creeping toolbar bug in MSIE6 tableElm.style.height = h + "px"; iw = iframe.clientWidth + dx; ih = iframe.clientHeight + dy; iw = iw < 1 ? 30 : iw; ih = ih < 1 ? 30 : ih; /* WordPress found that this led to a shrinking editor with every resize. (Gray background creeps in 1px at a time.) if (tinyMCE.isGecko) { iw -= 2; ih -= 2; } */ if (set_w) iframe.style.width = iw + "px"; iframe.style.height = ih + "px"; // Is it to small, make it bigger again if (set_w) { var tableBodyElm = tableElm.firstChild; var minIframeWidth = tableBodyElm.scrollWidth; if (inst.iframeElement.clientWidth < minIframeWidth) { dx = minIframeWidth - inst.iframeElement.clientWidth; inst.iframeElement.style.width = (iw + dx) + "px"; } } tableElm.style.height = h + "px"; // WordPress: see above // Remove pesky table controls inst.useCSS = false; }, /** * Handles resizing events. */ _resizeEventHandler : function(e) { var resizer = TinyMCE_AdvancedTheme._resizer; // Do nothing if (!resizer.resizing) return; e = typeof(e) == "undefined" ? window.event : e; var dx = e.screenX - resizer.downX; var dy = e.screenY - resizer.downY; var resizeBox = resizer.resizeBox; var editorId = resizer.editorId; switch (e.type) { case "mousemove": var w, h; w = resizer.width + dx; h = resizer.height + dy; w = w < 1 ? 1 : w; h = h < 1 ? 1 : h; if (resizer.horizontal) resizeBox.style.width = w + "px"; resizeBox.style.height = h + "px"; break; case "mouseup": TinyMCE_AdvancedTheme._setResizing(e, editorId, false); TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal); // Expire in a month if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { var expires = new Date(); expires.setTime(expires.getTime() + 3600000 * 24 * 30); // Set the cookies TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires); TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires); } break; } }, /** * Starts/stops the editor resizing. */ _setResizing : function(e, editor_id, state) { e = typeof(e) == "undefined" ? window.event : e; var resizer = TinyMCE_AdvancedTheme._resizer; var editorContainer = document.getElementById(editor_id + '_parent'); var editorArea = document.getElementById(editor_id + '_parent').firstChild; var resizeBox = document.getElementById(editor_id + '_resize_box'); var inst = tinyMCE.getInstanceById(editor_id); if (state) { // Place box over editor area var width = editorArea.clientWidth; var height = editorArea.clientHeight; resizeBox.style.width = width + "px"; resizeBox.style.height = height + "px"; resizer.iframeWidth = inst.iframeElement.clientWidth; resizer.iframeHeight = inst.iframeElement.clientHeight; // Hide editor and show resize box editorArea.style.display = "none"; resizeBox.style.display = "block"; // Add event handlers, only once if (!resizer.eventHandlers) { if (tinyMCE.isMSIE) tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); else tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler); resizer.eventHandlers = true; } resizer.resizing = true; resizer.downX = e.screenX; resizer.downY = e.screenY; resizer.width = parseInt(resizeBox.style.width); resizer.height = parseInt(resizeBox.style.height); resizer.editorId = editor_id; resizer.resizeBox = resizeBox; resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true); } else { resizer.resizing = false; resizeBox.style.display = "none"; editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table"; tinyMCE.execCommand('mceResetDesignMode'); } }, _getColorHTML : function(id, n, cm) { var i, h, cl; h = ''; cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(','); h += ''; for (i=0; i'; if ((i+1) % 8 == 0) h += ''; } h += '
    '; if (tinyMCE.getParam("theme_advanced_more_colors", true)) h += '' + tinyMCE.getLang('lang_more_colors') + ''; return h; }, _pickColor : function(id, cm) { var inputColor, inst = tinyMCE.selectedInstance; if (cm == 'forecolor' && inst) inputColor = inst.foreColor; if ((cm == 'backcolor' || cm == 'HiliteColor') && inst) inputColor = inst.backColor; tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) { tinyMCE.execInstanceCommand(id, cm, false, c); }}); }, _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) { tinyMCE.execCommand('mceBeginUndoLevel'); if (src == "") return; if (!tinyMCE.imgElement && tinyMCE.isSafari) { var html = ""; html += '' + alt + ''; tinyMCE.execCommand("mceInsertContent", false, html); } else { if (!tinyMCE.imgElement && tinyMCE.selectedInstance) { if (tinyMCE.isSafari) tinyMCE.execCommand("mceInsertContent", false, ''); else tinyMCE.selectedInstance.contentDocument.execCommand("insertimage", false, tinyMCE.uniqueURL); tinyMCE.imgElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "img", "src", tinyMCE.uniqueURL); } } if (tinyMCE.imgElement) { var needsRepaint = false; var msrc = src; src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, tinyMCE.imgElement);"); if (tinyMCE.getParam('convert_urls')) msrc = src; if (onmouseover && onmouseover != "") onmouseover = "this.src='" + eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, tinyMCE.imgElement);") + "';"; if (onmouseout && onmouseout != "") onmouseout = "this.src='" + eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, tinyMCE.imgElement);") + "';"; // Use alt as title if it's undefined if (typeof(title) == "undefined") title = alt; if (width != tinyMCE.imgElement.getAttribute("width") || height != tinyMCE.imgElement.getAttribute("height") || align != tinyMCE.imgElement.getAttribute("align")) needsRepaint = true; tinyMCE.setAttrib(tinyMCE.imgElement, 'src', src); tinyMCE.setAttrib(tinyMCE.imgElement, 'mce_src', msrc); tinyMCE.setAttrib(tinyMCE.imgElement, 'alt', alt); tinyMCE.setAttrib(tinyMCE.imgElement, 'title', title); tinyMCE.setAttrib(tinyMCE.imgElement, 'align', align); tinyMCE.setAttrib(tinyMCE.imgElement, 'border', border, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'hspace', hspace, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'vspace', vspace, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'width', width, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'height', height, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'onmouseover', onmouseover); tinyMCE.setAttrib(tinyMCE.imgElement, 'onmouseout', onmouseout); // Fix for bug #989846 - Image resize bug if (width && width != "") tinyMCE.imgElement.style.pixelWidth = width; if (height && height != "") tinyMCE.imgElement.style.pixelHeight = height; if (needsRepaint) tinyMCE.selectedInstance.repaint(); } tinyMCE.execCommand('mceEndUndoLevel'); }, _insertLink : function(href, target, title, onclick, style_class) { tinyMCE.execCommand('mceBeginUndoLevel'); if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { var doc = tinyMCE.selectedInstance.getDoc(); var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a"); var newLink = false; if (!linkElement) { linkElement = doc.createElement("a"); newLink = true; } var mhref = href; var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); mhref = tinyMCE.getParam('convert_urls') ? href : mhref; tinyMCE.setAttrib(linkElement, 'href', thref); tinyMCE.setAttrib(linkElement, 'mce_href', mhref); tinyMCE.setAttrib(linkElement, 'target', target); tinyMCE.setAttrib(linkElement, 'title', title); tinyMCE.setAttrib(linkElement, 'onclick', onclick); tinyMCE.setAttrib(linkElement, 'class', style_class); if (newLink) { linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true)); tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement); } return; } if (!tinyMCE.linkElement && tinyMCE.selectedInstance) { if (tinyMCE.isSafari) { tinyMCE.execCommand("mceInsertContent", false, '' + tinyMCE.selectedInstance.selection.getSelectedHTML() + ''); } else tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL); tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); for (var i=0; i {$lang_insert_image_title}
     
    x
    Bwordpress/wp-includes/js/tinymce/themes/advanced/images/anchor.gifGIF89a)=i]j8Qbw7LtN`wTn!,XI8=q0NQ(JTLJ5;FsH,: 0P E2P4FB2Ab HNڭZ~;Iwordpress/wp-includes/js/tinymce/themes/advanced/images/anchor_symbol.gifFGIF89a !, @w&ڃq|a4b;Ewordpress/wp-includes/js/tinymce/themes/advanced/images/backcolor.gifgGIF89aè΀s퀘@TpPh0H`ȰP؀sP00p pȠPM5px[Й! ,@pH,H#e0)IГdBa@|T*7 HJFCB~ $1 Dyl}E_ES JL QQQEDûCA;Fwordpress/wp-includes/js/tinymce/themes/advanced/images/bold_de_se.gifIGIF89a!, tFz1sUٕ( L;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/bold_es.gifPGIF89a! ,'řn8amhCj%Gk7;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/bold_fr.gifNGIF89a!,%37o].^&Filiz;@wordpress/wp-includes/js/tinymce/themes/advanced/images/bold.gifLGIF89a!,#XM~{~qV(ـfyJL;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/bold_ru.gifMGIF89aMMM!,$4T UadA[]3n)I;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/bold_tw.gifGIF89a"""UUUwwwDDD333fff!,|I8;"4nw5D(B\4ȁ6K4,(1&en J  " V-AAXY̐B/,a(ӖƀtA0 >P #6 )ry[";Bwordpress/wp-includes/js/tinymce/themes/advanced/images/browse.gifqGIF89a.Dr !,B ;㭹HV bJ~hfvX ރg6*bVMŔHih;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/bullist.giflGIF89a":R"2rbz!,1x0I2A`>C hhJ]Yy(j`A1(pȤ$;Gwordpress/wp-includes/js/tinymce/themes/advanced/images/button_menu.gif9GIF89a !, SV޼;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/buttons.gifGIF89a9c„XB]pzƿ7Lf3JcR^jwڭA <<,d(ڑlӣðwxGuZ>(#  ˝ޛ!H,Hɴ&-&ʾԏ H ߍ,++,xj =A@B >lD REx4Ϛ!dn .vd%#ē6\@ ϟ>X_?j+A Ģ)n3:PKtaB< MwY V[Mgo66T5߿4$MC+P x ,e n 8,y~]XR޶ 5cQ &RѢ o|/SԌ@F^5s?HD#xPuM0ՙAD_Ϟ׿>}8 ' 3)%KC~דa"VEŬ X1!]=0Xef!!~<^pl~+7U:̠s[\8H]cj9Ȏ%d-] AH،r)2 59  [Yߒd0t."$y%dc_|IKl~Dq,DaNEsl{ntDp$H# ޥ,51LV; z@+P^@UPo`Hzh 3dc%E1$(H)BYyLbF԰x%*k*j i62qSXu*l $Y8XAQEkЊNG$HNZB`a#uGHbdd'eNb+6*4 Tc9j; "5QK}5!0`sG]q =ʚ [nkǼoq#56+m(d"ԥABGmi) GU&+$5NR-4#@7JIz2Q3s!'$ӧg!;6Fjkz `!0}g]c&i-ڝoPNg E~VV>PZBx'CH6H9-o/c8p/|QaUԔpĐ|їccj c uS xw"#0ڤMZ@Pyf_B;xOO3b.fq0f}6uD>-F@OS1 qPP}m"d@bSVAŕU?j^F]LIc.0`5bkB',`_#(Ͼ< %+Aj$0<wŚS 90s2RL@`ij*b֒'c&VA1e3]ǁ==MйlQicHj'JYMk9>1A4q4r qprH`V)(%[Hu" &R3W @9`!JW-aq}"S0e:mdb{r(-w`C /Ti7WMA,q#&HR5(#J7BE t;S7T#(N[`'`xh  Ax/hHfwOfbiF?&xdwJ,p /$eT !b1w@t{AfyWRG։0z"y '}Epi}&!4hvwvU[g`Z8rgu!B)1bfCx{a{UWg|>;ŨPOVjV#}m( lR5y(BE&uaH(1q.""ma28J"w|'`P$ıSD;$"[$-VrRi+p.Z5搅%~Qq;؃I""R834XK^T.-.Q!4 ! x"HDS6GIgQ4I90^r&gקt;r;Ԩ(4uX8Tiab!v16vG0Ј!Yb%CD>7w%JSfuYeΉxkƘ8B%H..3a@_ogt.VC//錍h^՘0}U-q}Uwtڈi߶XT,[t4VȜTVRVYև!Q%_5nY2cl%a\%u4;Q+E+#H<-;_x8pٓ+G@(io}\l:uwp*H `BS ; d,W(禃Sf&XreJ35)qYLs)h457Lk$s-fU<2O#6^c) Xdԙ(3i:i' $uÑ0c0v9v.^AiҕF rFJ$`,|&amw4d@Dv`qEMƣ$ uD !zxƯFH6IzErT @9 V{'uL:Q$ơSd2v#RU"%!բ.z~lpi> P( Z(2(G1.3nYZ3QR9(1Wj-ӑ(21IV!sA>"BCu.Jn*i4TMC%$#P;Qh2z f&7J'_c4_fu }agaX^X &'aE Nz,EaR8fn4PM6/$/ @E TpX ¿iliX^Y䲤'Dʪ @X-[p9@J3wT1nsZ) D<` {&L\I91{o0F H|qPħB Yxq[i4Y$PBT;5%fz)@~ˢ$)Q7&})&`<&3tR3lov|Pɮ*cXt8e:8lԲ"f3 P "6Z.ʕX.ѯl[ƛٚ΋ ] :`C*ܧv.y mnF:w(-mypY4}{D3/̗ MA+`3ڃ%f+n3 #m^/D:5:7QfVyGRy/B(NhX ߊ;خ{`e<` ɍ>ڑaw@^8Z M~ >__  "?$_&(*,O;Lwordpress/wp-includes/js/tinymce/themes/advanced/images/cancel_button_bg.gifGIF89aZ¹~!,Z'dihlp,tmx~VpH,EQ i:ШtJZѥz`j "p; 4njuS.Onǣhif"pqli     p ιܹ "  *T׎=x!n?~9 as p=I2dɓ(Qcʔ رfM6mɳǎ.}  tM3 DH!"$H4SNDӥ{)fm4+[pM)_ |@8`‡#F _Ɖlx/_"Nh`?ܹh|~hTn agբcCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222," }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?孇JضY6k[D{nկlzVEjַ=+ȯHٶ=+^ٺV-ZҼ<,C4پAUejZFX@qEyZjĆHk>sҚ)R!@TJ~jrc4u "Bv#cqUTL*f qLXTL*v Qf@£"aL#BLn:Vj̀t8;WZ'^fjշ=+*ߵizWZ'^FZұ=+R^]h-vhEVB(5r Y O!!!@q1+ާ)1~:<*MD <MH B H {c'`xWZ9^ᩙq޲;֤.~ёЉp:UZ󎵗8^ ֠j֠kьâh֭F*֭F+#j1\XT⢌T=ЉF¥4YԦB£aSQ^$LFELE0MTPjτt{W XUiPv(J̇hzWV'ZFi@+*ҴanՁVfoUy[s"sUL xC!Vs]0b"BǚPi(5B:T(4j j@kã'Pj@ji׷2p&9Vz׳E53Y)tґQ8Y8YҙQFL֡j֡ECנ#Zj-e91VPT(* o"xMڢASc-f#5)+3Lab HRL"ZSE2#hCTz˫25 &*D*фք-ҳ!5~& <ʬ[8*j0aֳ(3ԥ2ejQ"bEE-XAYgE *$: ZT☂9hzԧ*B)WY dDSH^EcE2")H⼚R TUȫ<ڳ.EWb5J*:wordpress/wp-includes/js/tinymce/themes/advanced/images/hr.gif?GIF89a!, ޼ H`;Awordpress/wp-includes/js/tinymce/themes/advanced/images/image.gifGIF89af%c8*333! ,oPIͻ@ yR`;j#.Tg; a8CA'n`݀a; +;Wl~{GGs{;Bwordpress/wp-includes/js/tinymce/themes/advanced/images/indent.gifpGIF89a;ZQ^z!,5x0ʹh05(湈C  K'ײ3qc:' ;Lwordpress/wp-includes/js/tinymce/themes/advanced/images/insert_button_bg.gifGIF89aZ~!,Z dihlkp,tmx~z@)Ȥrl:JZL)@,zG,=߲yeQnb>hqh__"h    ө[ `@wC}c 6hԘqǏA9F$SNh  0cj L2s'M9 y@ d&D T'8躀U 4 @  U3H; mةq5[vWMp$$+C+~Ɋ3ά2aǝ=;aŀ8 V`rر1nAe޾ݻkyî͜u Dzo߳YcX:SCO|ӫ_O ~w__z(<g*|'fvxa|'$h()0(-h8;Hwordpress/wp-includes/js/tinymce/themes/advanced/images/italic_de_se.gifKGIF89a!,"PXCDMy؍&ma Lt;Ewordpress/wp-includes/js/tinymce/themes/advanced/images/italic_es.gifJGIF89a!,!PXCDMy؍&ma L;Bwordpress/wp-includes/js/tinymce/themes/advanced/images/italic.gifOGIF89a{{{!, D9j*pdY ;Ewordpress/wp-includes/js/tinymce/themes/advanced/images/italic_ru.gifNGIF89aMMM!,%4ZaY~EYY͇ig:S;Ewordpress/wp-includes/js/tinymce/themes/advanced/images/italic_tw.gifGIF89aoooOOO___///￿ߏ???!, $dih:.*z$ # & m#b% 04-F2 --!;Iwordpress/wp-includes/js/tinymce/themes/advanced/images/justifycenter.gifFGIF89a!,ֈ9t8ə ;Gwordpress/wp-includes/js/tinymce/themes/advanced/images/justifyfull.gifGGIF89a!,=:U6當 ;Gwordpress/wp-includes/js/tinymce/themes/advanced/images/justifyleft.gifGGIF89a!,<t8y ;Hwordpress/wp-includes/js/tinymce/themes/advanced/images/justifyright.gifFGIF89a!,ֈt8 ə;@wordpress/wp-includes/js/tinymce/themes/advanced/images/left.gifGGIF89a!,<t8y ;@wordpress/wp-includes/js/tinymce/themes/advanced/images/link.gifGIF89a/LtBSony͓Sc}߲◧!,\I8ͻ8#<"$E,U+B BOA0T + 1 Ǣ1 qN[聁/ ~;Fwordpress/wp-includes/js/tinymce/themes/advanced/images/menu_check.gif3GIF89a!, gVD;Gwordpress/wp-includes/js/tinymce/themes/advanced/images/newdocument.gifGIF89a2Jb⢵Ⲿ!,WI8zWla 0fyʺf@v/# k82MAr5 ǖ5L'hFo>;Cwordpress/wp-includes/js/tinymce/themes/advanced/images/numlist.gifoGIF89a@>R~BbXWW222rrr""Rr!,@I8<Q2J- I8Ȁ EA' &C TfoQiz;Dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/entries&/8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/themes/advanced/images svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 underline_es.gif file 2008-11-20T16:30:33.000000Z 027608183023f80b0c9bf663c9e81301 2008-10-28T18:17:06.112729Z 97 paul has-props image.gif file 2008-11-20T16:30:33.000000Z a74e3cc061c26a326844ec06f65b9a1f 2008-10-28T18:17:06.112729Z 97 paul has-props table_insert_row_after.gif file 2008-11-20T16:30:33.000000Z f244bea608118e1b6609d1ade714ecd5 2008-10-28T18:17:06.112729Z 97 paul has-props opacity.png file 2008-11-20T16:30:33.000000Z 7f1c7b1ff1f3e04828540f6ffdde46c2 2008-10-28T18:17:06.112729Z 97 paul has-props cancel_button_bg.gif file 2008-11-20T16:30:33.000000Z 23ba9eb7eb91efec2014bbf0ecb7422b 2008-10-28T18:17:06.112729Z 97 paul has-props bold_tw.gif file 2008-11-20T16:30:33.000000Z 6384b264f47452af481f36e1aa689bd7 2008-10-28T18:17:06.112729Z 97 paul has-props forecolor.gif file 2008-11-20T16:30:33.000000Z 6b4b8602d61e17fc13a8e1abd284ecd3 2008-10-28T18:17:06.112729Z 97 paul has-props anchor_symbol.gif file 2008-11-20T16:30:33.000000Z 5cb42865ce70a58d420786854fed4ae1 2008-10-28T18:17:06.112729Z 97 paul has-props separator.gif file 2008-11-20T16:30:33.000000Z 9636c1e228dc5d7c58ec2722a6d9ec23 2008-10-28T18:17:06.112729Z 97 paul has-props browse.gif file 2008-11-20T16:30:33.000000Z bc730549b16f827d1c04db513e34d011 2008-10-28T18:17:06.112729Z 97 paul has-props italic.gif file 2008-11-20T16:30:33.000000Z c8652735e55a968a2dd24d286c89642e 2008-10-28T18:17:06.112729Z 97 paul has-props undo.gif file 2008-11-20T16:30:33.000000Z 7883b9e1f9bf0b860e77b904e1941591 2008-10-28T18:17:06.112729Z 97 paul has-props table_delete_col.gif file 2008-11-20T16:30:33.000000Z 05582820e152a8b53d3fb3e622a0c974 2008-10-28T18:17:06.112729Z 97 paul has-props removeformat.gif file 2008-11-20T16:30:33.000000Z e9c387cc80f33b14447b628df1906639 2008-10-28T18:17:06.112729Z 97 paul has-props bold_es.gif file 2008-11-20T16:30:33.000000Z 8b9992b808d64bde50606703bf29b9e5 2008-10-28T18:17:06.112729Z 97 paul has-props anchor.gif file 2008-11-20T16:30:33.000000Z 7bcf9bd9100fe611646435390e1158d5 2008-10-28T18:17:06.112729Z 97 paul has-props copy.gif file 2008-11-20T16:30:33.000000Z 51e409b11aa51c150090697429a953ed 2008-10-28T18:17:06.112729Z 97 paul has-props italic_ru.gif file 2008-11-20T16:30:33.000000Z bbc7be374d89a1ced0441287eeba297a 2008-10-28T18:17:06.112729Z 97 paul has-props colors.jpg file 2008-11-20T16:30:33.000000Z 02ae48639aa5729e6a40fb64455c32a2 2008-10-28T18:17:06.112729Z 97 paul has-props underline_fr.gif file 2008-11-20T16:30:33.000000Z 027608183023f80b0c9bf663c9e81301 2008-10-28T18:17:06.112729Z 97 paul has-props spacer.gif file 2008-11-20T16:30:33.000000Z 12bf9e19374920de3146a64775f46a5e 2008-10-28T18:17:06.112729Z 97 paul has-props color.gif file 2008-11-20T16:30:33.000000Z c8e11c751b5575025fc50b7701719f0f 2008-10-28T18:17:06.112729Z 97 paul has-props bold_de_se.gif file 2008-11-20T16:30:33.000000Z fa8d362da3c15cab263bc7eb2d192dd1 2008-10-28T18:17:06.112729Z 97 paul has-props bold.gif file 2008-11-20T16:30:33.000000Z d4eac7372d4d546db5110407596720dd 2008-10-28T18:17:06.112729Z 97 paul has-props indent.gif file 2008-11-20T16:30:33.000000Z 89c00ba134c89eb949411194060c135c 2008-10-28T18:17:06.112729Z 97 paul has-props underline.gif file 2008-11-20T16:30:33.000000Z 203e5139ee72c00d597e4b00ed96d84b 2008-10-28T18:17:06.112729Z 97 paul has-props cleanup.gif file 2008-11-20T16:30:33.000000Z 96382d6d24bb8a1b228586b323e72fb4 2008-10-28T18:17:06.112729Z 97 paul has-props table_insert_col_after.gif file 2008-11-20T16:30:33.000000Z 48b353ad270b0e05d7de456cd811c420 2008-10-28T18:17:06.112729Z 97 paul has-props sub.gif file 2008-11-20T16:30:33.000000Z dfbcf5f590c7a7d972f2750bf3e56a72 2008-10-28T18:17:06.112729Z 97 paul has-props redo.gif file 2008-11-20T16:30:33.000000Z c2b3b80e20aa7f50ec45acb999373425 2008-10-28T18:17:06.112729Z 97 paul has-props left.gif file 2008-11-20T16:30:33.000000Z 7e1153a270935427f7b61c7b6c21ab8a 2008-10-28T18:17:06.112729Z 97 paul has-props table_insert_col_before.gif file 2008-11-20T16:30:33.000000Z d5910a210405a8cc7a24086104b06fa1 2008-10-28T18:17:06.112729Z 97 paul has-props custom_1.gif file 2008-11-20T16:30:33.000000Z bd1f96d299847c47fd535b1b54d3a2df 2008-10-28T18:17:06.112729Z 97 paul has-props justifyright.gif file 2008-11-20T16:30:33.000000Z 94fafae0c4b30d01d034a54376acdac3 2008-10-28T18:17:06.112729Z 97 paul has-props cut.gif file 2008-11-20T16:30:33.000000Z c8f1a0b1cc8e32e10cdf3d38f71bf44f 2008-10-28T18:17:06.112729Z 97 paul has-props underline_ru.gif file 2008-11-20T16:30:33.000000Z 843cb1b52316024629bdc6adc665b918 2008-10-28T18:17:06.112729Z 97 paul has-props link.gif file 2008-11-20T16:30:33.000000Z 010306c94f6b00146d9eda296a945040 2008-10-28T18:17:06.112729Z 97 paul has-props buttons.gif file 2008-11-20T16:30:33.000000Z bc347ed84b0c8acfebf391e3716d3908 2008-10-28T18:17:06.112729Z 97 paul has-props button_menu.gif file 2008-11-20T16:30:33.000000Z ed293e6a817f44328f74c0853c628e69 2008-10-28T18:17:06.112729Z 97 paul has-props backcolor.gif file 2008-11-20T16:30:33.000000Z 159795ca1b1fd16f310334db6c917515 2008-10-28T18:17:06.112729Z 97 paul has-props unlink.gif file 2008-11-20T16:30:33.000000Z dcd93dd109c065562fe9f5d6f978a028 2008-10-28T18:17:06.112729Z 97 paul has-props menu_check.gif file 2008-11-20T16:30:33.000000Z fce7c811d7adec70ce79ee7c4185ec47 2008-10-28T18:17:06.112729Z 97 paul has-props full.gif file 2008-11-20T16:30:33.000000Z 009750822e228e10f51e746ddf8d1fec 2008-10-28T18:17:06.112729Z 97 paul has-props close.gif file 2008-11-20T16:30:33.000000Z 6cc9d27bdda91ad192a4326a653ba566 2008-10-28T18:17:06.112729Z 97 paul has-props sup.gif file 2008-11-20T16:30:33.000000Z cec59878503a628b343ff844f81aff1f 2008-10-28T18:17:06.112729Z 97 paul has-props bold_fr.gif file 2008-11-20T16:30:33.000000Z 8fbda35d5ebfc1474f93f808953b1386 2008-10-28T18:17:06.112729Z 97 paul has-props insert_button_bg.gif file 2008-11-20T16:30:33.000000Z 93699e9345172ce5eaa5876d432aaa19 2008-10-28T18:17:06.112729Z 97 paul has-props charmap.gif file 2008-11-20T16:30:33.000000Z 948c608cfe393168642e3946097eba3d 2008-10-28T18:17:06.112729Z 97 paul has-props paste.gif file 2008-11-20T16:30:33.000000Z 7bde577f9f26ffb18e522331270140f2 2008-10-28T18:17:06.112729Z 97 paul has-props right.gif file 2008-11-20T16:30:33.000000Z 94fafae0c4b30d01d034a54376acdac3 2008-10-28T18:17:06.112729Z 97 paul has-props bullist.gif file 2008-11-20T16:30:33.000000Z f360470402affab13062de5ffbfb7f74 2008-10-28T18:17:06.112729Z 97 paul has-props center.gif file 2008-11-20T16:30:33.000000Z 9cc7a9c3f4c2a697c32aaab6bb3185b8 2008-10-28T18:17:06.112729Z 97 paul has-props table_insert_row_before.gif file 2008-11-20T16:30:33.000000Z 0e37e4c48dcddb1123bc6140ce323694 2008-10-28T18:17:06.112729Z 97 paul has-props bold_ru.gif file 2008-11-20T16:30:33.000000Z d70c4659f516157591c2470695c6d64e 2008-10-28T18:17:06.112729Z 97 paul has-props newdocument.gif file 2008-11-20T16:30:33.000000Z 24b01aa27845c551f24a186a92cbc94e 2008-10-28T18:17:06.112729Z 97 paul has-props statusbar_resize.gif file 2008-11-20T16:30:33.000000Z 1b952cd23844b834e0a307db3c803626 2008-10-28T18:17:06.112729Z 97 paul has-props numlist.gif file 2008-11-20T16:30:33.000000Z d4c72d6e6d56fee2315ad59426a99a4e 2008-10-28T18:17:06.112729Z 97 paul has-props strikethrough.gif file 2008-11-20T16:30:33.000000Z 0dcca301aa909817a82d705cc9a62952 2008-10-28T18:17:06.112729Z 97 paul has-props italic_de_se.gif file 2008-11-20T16:30:33.000000Z 2eafa516095a0d8b3cd03e7b8a4430f7 2008-10-28T18:17:06.112729Z 97 paul has-props justifyleft.gif file 2008-11-20T16:30:33.000000Z 7e1153a270935427f7b61c7b6c21ab8a 2008-10-28T18:17:06.112729Z 97 paul has-props hr.gif file 2008-11-20T16:30:33.000000Z 8d92cb73437c32a0327323b538ad2214 2008-10-28T18:17:06.112729Z 97 paul has-props italic_tw.gif file 2008-11-20T16:30:33.000000Z c87ed929e41850e9614753da98827272 2008-10-28T18:17:06.112729Z 97 paul has-props justifyfull.gif file 2008-11-20T16:30:33.000000Z 009750822e228e10f51e746ddf8d1fec 2008-10-28T18:17:06.112729Z 97 paul has-props visualaid.gif file 2008-11-20T16:30:33.000000Z 50cfb5ef70eadd59e78c6c833c8a5239 2008-10-28T18:17:06.112729Z 97 paul has-props outdent.gif file 2008-11-20T16:30:33.000000Z b7249cc5a3bce3971f0b19fccac07f60 2008-10-28T18:17:06.112729Z 97 paul has-props xp dir table.gif file 2008-11-20T16:30:33.000000Z 3ca9c0469bf52d46fd0b939bac08eb8d 2008-10-28T18:17:06.112729Z 97 paul has-props help.gif file 2008-11-20T16:30:33.000000Z 4cd4a5d2cdcd74c8aeced17813afd6ea 2008-10-28T18:17:06.112729Z 97 paul has-props italic_es.gif file 2008-11-20T16:30:33.000000Z 61553fb992530dbbbad211eddcc66eb9 2008-10-28T18:17:06.112729Z 97 paul has-props justifycenter.gif file 2008-11-20T16:30:33.000000Z 9cc7a9c3f4c2a697c32aaab6bb3185b8 2008-10-28T18:17:06.112729Z 97 paul has-props underline_tw.gif file 2008-11-20T16:30:33.000000Z 3236a0d3fca6a4a381da0f2b2a9337e8 2008-10-28T18:17:06.112729Z 97 paul has-props table_delete_row.gif file 2008-11-20T16:30:33.000000Z b6943c3ba64c56ea086d33b21d66004a 2008-10-28T18:17:06.112729Z 97 paul has-props code.gif file 2008-11-20T16:30:33.000000Z 158e1ad2922f59a800e27e459c71d051 2008-10-28T18:17:06.112729Z 97 paul has-props Cwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/format8 Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/anchor.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END awordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/anchor_symbol.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/backcolor.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bold_de_se.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bold_es.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bold_fr.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bold.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bold_ru.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bold_tw.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/browse.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/bullist.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END _wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/button_menu.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/buttons.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/cancel_button_bg.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/center.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/charmap.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/cleanup.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/close.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/code.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/color.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/colors.jpg.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/copy.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END \wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/custom_1.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Wwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/cut.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/forecolor.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/full.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/help.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Vwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/hr.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/image.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/indent.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/insert_button_bg.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/italic_de_se.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/italic_es.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/italic.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/italic_ru.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/italic_tw.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END awordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/justifycenter.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END _wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/justifyfull.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END _wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/justifyleft.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/justifyright.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/left.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/link.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ^wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/menu_check.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END _wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/newdocument.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/numlist.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/opacity.png.svn-base5K 13 svn:mime-type V 24 application/octet-stream END [wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/outdent.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/paste.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/redo.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/removeformat.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/right.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/separator.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/spacer.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/statusbar_resize.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END awordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/strikethrough.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Wwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/sub.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Wwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/sup.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table_delete_col.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table_delete_row.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END jwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table_insert_col_after.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END kwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table_insert_col_before.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END jwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table_insert_row_after.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END kwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/table_insert_row_before.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/underline_es.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/underline_fr.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/underline.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/underline_ru.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END `wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/underline_tw.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/undo.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/unlink.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END ]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/prop-base/visualaid.gif.svn-base5K 13 svn:mime-type V 24 application/octet-stream END Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/anchor.gif.svn-baseGIF89a)=i]j8Qbw7LtN`wTn!,XI8=q0NQ(JTLJ5;FsH,: 0P E2P4FB2Ab HNڭZ~;awordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/anchor_symbol.gif.svn-baseFGIF89a !, @w&ڃq|a4b;]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/backcolor.gif.svn-basegGIF89aè΀s퀘@TpPh0H`ȰP؀sP00p pȠPM5px[Й! ,@pH,H#e0)IГdBa@|T*7 HJFCB~ $1 Dyl}E_ES JL QQQEDûCA;^wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bold_de_se.gif.svn-baseIGIF89a!, tFz1sUٕ( L;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bold_es.gif.svn-basePGIF89a! ,'řn8amhCj%Gk7;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bold_fr.gif.svn-baseNGIF89a!,%37o].^&Filiz;Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bold.gif.svn-baseLGIF89a!,#XM~{~qV(ـfyJL;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bold_ru.gif.svn-baseMGIF89aMMM!,$4T UadA[]3n)I;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bold_tw.gif.svn-baseGIF89a"""UUUwwwDDD333fff!,|I8;"4nw5D(B\4ȁ6K4,(1&en J  " V-AAXY̐B/,a(ӖƀtA0 >P #6 )ry[";Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/browse.gif.svn-baseqGIF89a.Dr !,B ;㭹HV bJ~hfvX ރg6*bVMŔHih;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/bullist.gif.svn-baselGIF89a":R"2rbz!,1x0I2A`>C hhJ]Yy(j`A1(pȤ$;_wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/button_menu.gif.svn-base9GIF89a !, SV޼;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/buttons.gif.svn-baseGIF89a9c„XB]pzƿ7Lf3JcR^jwڭA <<,d(ڑlӣðwxGuZ>(#  ˝ޛ!H,Hɴ&-&ʾԏ H ߍ,++,xj =A@B >lD REx4Ϛ!dn .vd%#ē6\@ ϟ>X_?j+A Ģ)n3:PKtaB< MwY V[Mgo66T5߿4$MC+P x ,e n 8,y~]XR޶ 5cQ &RѢ o|/SԌ@F^5s?HD#xPuM0ՙAD_Ϟ׿>}8 ' 3)%KC~דa"VEŬ X1!]=0Xef!!~<^pl~+7U:̠s[\8H]cj9Ȏ%d-] AH،r)2 59  [Yߒd0t."$y%dc_|IKl~Dq,DaNEsl{ntDp$H# ޥ,51LV; z@+P^@UPo`Hzh 3dc%E1$(H)BYyLbF԰x%*k*j i62qSXu*l $Y8XAQEkЊNG$HNZB`a#uGHbdd'eNb+6*4 Tc9j; "5QK}5!0`sG]q =ʚ [nkǼoq#56+m(d"ԥABGmi) GU&+$5NR-4#@7JIz2Q3s!'$ӧg!;6Fjkz `!0}g]c&i-ڝoPNg E~VV>PZBx'CH6H9-o/c8p/|QaUԔpĐ|їccj c uS xw"#0ڤMZ@Pyf_B;xOO3b.fq0f}6uD>-F@OS1 qPP}m"d@bSVAŕU?j^F]LIc.0`5bkB',`_#(Ͼ< %+Aj$0<wŚS 90s2RL@`ij*b֒'c&VA1e3]ǁ==MйlQicHj'JYMk9>1A4q4r qprH`V)(%[Hu" &R3W @9`!JW-aq}"S0e:mdb{r(-w`C /Ti7WMA,q#&HR5(#J7BE t;S7T#(N[`'`xh  Ax/hHfwOfbiF?&xdwJ,p /$eT !b1w@t{AfyWRG։0z"y '}Epi}&!4hvwvU[g`Z8rgu!B)1bfCx{a{UWg|>;ŨPOVjV#}m( lR5y(BE&uaH(1q.""ma28J"w|'`P$ıSD;$"[$-VrRi+p.Z5搅%~Qq;؃I""R834XK^T.-.Q!4 ! x"HDS6GIgQ4I90^r&gקt;r;Ԩ(4uX8Tiab!v16vG0Ј!Yb%CD>7w%JSfuYeΉxkƘ8B%H..3a@_ogt.VC//錍h^՘0}U-q}Uwtڈi߶XT,[t4VȜTVRVYև!Q%_5nY2cl%a\%u4;Q+E+#H<-;_x8pٓ+G@(io}\l:uwp*H `BS ; d,W(禃Sf&XreJ35)qYLs)h457Lk$s-fU<2O#6^c) Xdԙ(3i:i' $uÑ0c0v9v.^AiҕF rFJ$`,|&amw4d@Dv`qEMƣ$ uD !zxƯFH6IzErT @9 V{'uL:Q$ơSd2v#RU"%!բ.z~lpi> P( Z(2(G1.3nYZ3QR9(1Wj-ӑ(21IV!sA>"BCu.Jn*i4TMC%$#P;Qh2z f&7J'_c4_fu }agaX^X &'aE Nz,EaR8fn4PM6/$/ @E TpX ¿iliX^Y䲤'Dʪ @X-[p9@J3wT1nsZ) D<` {&L\I91{o0F H|qPħB Yxq[i4Y$PBT;5%fz)@~ˢ$)Q7&})&`<&3tR3lov|Pɮ*cXt8e:8lԲ"f3 P "6Z.ʕX.ѯl[ƛٚ΋ ] :`C*ܧv.y mnF:w(-mypY4}{D3/̗ MA+`3ڃ%f+n3 #m^/D:5:7QfVyGRy/B(NhX ߊ;خ{`e<` ɍ>ڑaw@^8Z M~ >__  "?$_&(*,O;dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/cancel_button_bg.gif.svn-baseGIF89aZ¹~!,Z'dihlp,tmx~VpH,EQ i:ШtJZѥz`j "p; 4njuS.Onǣhif"pqli     p ιܹ "  *T׎=x!n?~9 as p=I2dɓ(Qcʔ رfM6mɳǎ.}  tM3 DH!"$H4SNDӥ{)fm4+[pM)_ |@8`‡#F _Ɖlx/_"Nh`?ܹh|~hTn agբcCREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222," }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?孇JضY6k[D{nկlzVEjַ=+ȯHٶ=+^ٺV-ZҼ<,C4پAUejZFX@qEyZjĆHk>sҚ)R!@TJ~jrc4u "Bv#cqUTL*f qLXTL*v Qf@£"aL#BLn:Vj̀t8;WZ'^fjշ=+*ߵizWZ'^FZұ=+R^]h-vhEVB(5r Y O!!!@q1+ާ)1~:<*MD <MH B H {c'`xWZ9^ᩙq޲;֤.~ёЉp:UZ󎵗8^ ֠j֠kьâh֭F*֭F+#j1\XT⢌T=ЉF¥4YԦB£aSQ^$LFELE0MTPjτt{W XUiPv(J̇hzWV'ZFi@+*ҴanՁVfoUy[s"sUL xC!Vs]0b"BǚPi(5B:T(4j j@kã'Pj@ji׷2p&9Vz׳E53Y)tґQ8Y8YҙQFL֡j֡ECנ#Zj-e91VPT(* o"xMڢASc-f#5)+3Lab HRL"ZSE2#hCTz˫25 &*D*фք-ҳ!5~& <ʬ[8*j0aֳ(3ԥ2ejQ"bEE-XAYgE *$: ZT☂9hzԧ*B)WY dDSH^EcE2")H⼚R TUȫ<ڳ.EWb5J*:hqh__"h    ө[ `@wC}c 6hԘqǏA9F$SNh  0cj L2s'M9 y@ d&D T'8躀U 4 @  U3H; mةq5[vWMp$$+C+~Ɋ3ά2aǝ=;aŀ8 V`rر1nAe޾ݻkyî͜u Dzo߳YcX:SCO|ӫ_O ~w__z(<g*|'fvxa|'$h()0(-h8;`wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/italic_de_se.gif.svn-baseKGIF89a!,"PXCDMy؍&ma Lt;]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/italic_es.gif.svn-baseJGIF89a!,!PXCDMy؍&ma L;Zwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/italic.gif.svn-baseOGIF89a{{{!, D9j*pdY ;]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/italic_ru.gif.svn-baseNGIF89aMMM!,%4ZaY~EYY͇ig:S;]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/italic_tw.gif.svn-baseGIF89aoooOOO___///￿ߏ???!, $dih:.*z$ # & m#b% 04-F2 --!;awordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/justifycenter.gif.svn-baseFGIF89a!,ֈ9t8ə ;_wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/justifyfull.gif.svn-baseGGIF89a!,=:U6當 ;_wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/justifyleft.gif.svn-baseGGIF89a!,<t8y ;`wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/justifyright.gif.svn-baseFGIF89a!,ֈt8 ə;Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/left.gif.svn-baseGGIF89a!,<t8y ;Xwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/link.gif.svn-baseGIF89a/LtBSony͓Sc}߲◧!,\I8ͻ8#<"$E,U+B BOA0T + 1 Ǣ1 qN[聁/ ~;^wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/menu_check.gif.svn-base3GIF89a!, gVD;_wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/newdocument.gif.svn-baseGIF89a2Jb⢵Ⲿ!,WI8zWla 0fyʺf@v/# k82MAr5 ǖ5L'hFo>;[wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/numlist.gif.svn-baseoGIF89a@>R~BbXWW222rrr""Rr!,@I8<Q2J- I8Ȁ EA' &C TfoQiz;dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table_delete_col.gif.svn-baseGIF89a 7o2Jb\o}u^暶BZr!,PI8k[`! 2R.j ._ ,a@2"q$̎ 47D*} +Х˒sF?&;dwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table_delete_row.gif.svn-baseGIF89aj~4LdUWjr!,XI8pNi& y&Ƹ k8)bQ( P0$`:0 (a$)x<Ș` ;YmCw;~;Ywordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table.gif.svn-baseGIF89arrr⒐ʿ3JcⲝT:2hڎr°ҮҷsbR^j²zҢ!,'dihE% A<D+_Ehz<z>!qnL9pX!w"]a1mru%ldr & l% $l &b # 6%!;jwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table_insert_col_after.gif.svn-baseGIF89aR2Jb]ozr~򂑟!,RI8_BZ_H1bl[p+(nbI0(HB:rn"͌ÃQ q~;kwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table_insert_col_before.gif.svn-baseGIF89aR2Jb]ozr~򂑟!,RIؒbx`WN'OqT BS@n^pHPKB1l+gAÑoE;jwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table_insert_row_after.gif.svn-baseGIF89aR2Jb]ozr~򂑟!,PIضKɕ#* Rr D0JCmO%9Z^1x bAxم!p>1yFX8.;kwordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/table_insert_row_before.gif.svn-baseGIF89aR2Jb]ozr~򂑟!,LI8mKa AlT,L)!+]s1?J#AB8*qyx@1L|&Bln[";`wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/underline_es.gif.svn-baseOGIF89a!,& T8OtG}EH"QS;`wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/underline_fr.gif.svn-baseOGIF89a!,& T8OtG}EH"QS;]wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/underline.gif.svn-baseXGIF89a{{{!,)@ѐ[M bz-ʅP;`wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/underline_ru.gif.svn-baseMGIF89aMMM!,$j=i|drk?;`wordpress/wp-includes/js/tinymce/themes/advanced/images/.svn/text-base/underline_tw.gif.svn-baseGIF89aUUUwww̙333fff"""&&&LLLoooDDD???!,r`%dihJ>TQjMT*TFHp< " F*+%e9P(&m2!qnL9pX!w"]a1mru%ldr & l% $l &b # 6%!;Rwordpress/wp-includes/js/tinymce/themes/advanced/images/table_insert_col_after.gifGIF89aR2Jb]ozr~򂑟!,RI8_BZ_H1bl[p+(nbI0(HB:rn"͌ÃQ q~;Swordpress/wp-includes/js/tinymce/themes/advanced/images/table_insert_col_before.gifGIF89aR2Jb]ozr~򂑟!,RIؒbx`WN'OqT BS@n^pHPKB1l+gAÑoE;Rwordpress/wp-includes/js/tinymce/themes/advanced/images/table_insert_row_after.gifGIF89aR2Jb]ozr~򂑟!,PIضKɕ#* Rr D0JCmO%9Z^1x bAxم!p>1yFX8.;Swordpress/wp-includes/js/tinymce/themes/advanced/images/table_insert_row_before.gifGIF89aR2Jb]ozr~򂑟!,LI8mKa AlT,L)!+]s1?J#AB8*qyx@1L|&Bln[";Hwordpress/wp-includes/js/tinymce/themes/advanced/images/underline_es.gifOGIF89a!,& T8OtG}EH"QS;Hwordpress/wp-includes/js/tinymce/themes/advanced/images/underline_fr.gifOGIF89a!,& T8OtG}EH"QS;Ewordpress/wp-includes/js/tinymce/themes/advanced/images/underline.gifXGIF89a{{{!,)@ѐ[M bz-ʅP;Hwordpress/wp-includes/js/tinymce/themes/advanced/images/underline_ru.gifMGIF89aMMM!,$j=i|drk?;Hwordpress/wp-includes/js/tinymce/themes/advanced/images/underline_tw.gifGIF89aUUUwww̙333fff"""&&&LLLoooDDD???!,r`%dihJ>TQjMT*TFHp< " F*+%e9P(&m2dУKNسkνËOӇ˟OϿ(huPA3 6F(Vhfv ($(,0c;^wordpress/wp-includes/js/tinymce/themes/advanced/images/xp/.svn/text-base/tab_end.gif.svn-baseGIF89aЩ呧!,&@,GH4a̅=\O䕃 !b%i;^wordpress/wp-includes/js/tinymce/themes/advanced/images/xp/.svn/text-base/tabs_bg.gif.svn-base0GIF89a!,˭ ;awordpress/wp-includes/js/tinymce/themes/advanced/images/xp/.svn/text-base/tab_sel_bg.gif.svn-baseGIF89a,(Ǝ8.ݡS18<,<!,,(Є8ͻ`(dihAq p,tmx|pH, rl:ШtJZجvz^cL.hbn|N~vbiji~dzoǀgqecݶ H"\Ȱ JH3j#Ǐ YC(ɓQ\^˗0c!)ͅ4o/'ϟ@ JhJHRN*NVĪ+K^Ú+GfZD;bwordpress/wp-includes/js/tinymce/themes/advanced/images/xp/.svn/text-base/tab_sel_end.gif.svn-baseeGIF89a98Ǝ1ݡS<<!, @(v^_)d;Ewordpress/wp-includes/js/tinymce/themes/advanced/images/xp/tab_bg.gifGIF89a啕쑧!,`C]ihlp,tmx|DC,Ȥrl:ШtJZجvV xL.zn|N~O   H*\ȰÇ#JHa 6hȱǏ CIɓ(S\ɲ˗0cʜF 8sɳϟ@ JѣH*]ʴӧP&իXjʵׯ`ÊKٳhӪ]˶۷g;(ݻx˷߿ LÈ+^̸c^L˘3k̹ϠCMӨS^͚t ȞM۸sͻ Nȓ+_>dУKNسkνËOӇ˟OϿ(huPA3 6F(Vhfv ($(,0c;Fwordpress/wp-includes/js/tinymce/themes/advanced/images/xp/tab_end.gifGIF89aЩ呧!,&@,GH4a̅=\O䕃 !b%i;Fwordpress/wp-includes/js/tinymce/themes/advanced/images/xp/tabs_bg.gif0GIF89a!,˭ ;Iwordpress/wp-includes/js/tinymce/themes/advanced/images/xp/tab_sel_bg.gifGIF89a,(Ǝ8.ݡS18<,<!,,(Є8ͻ`(dihAq p,tmx|pH, rl:ШtJZجvz^cL.hbn|N~vbiji~dzoǀgqecݶ H"\Ȱ JH3j#Ǐ YC(ɓQ\^˗0c!)ͅ4o/'ϟ@ JhJHRN*NVĪ+K^Ú+GfZD;Jwordpress/wp-includes/js/tinymce/themes/advanced/images/xp/tab_sel_end.gifeGIF89a98Ǝ1ݡS<<!, @(v^_)d;Bwordpress/wp-includes/js/tinymce/themes/advanced/jscripts/about.js function init() { var inst; tinyMCEPopup.resizeToInnerSize(); inst = tinyMCE.selectedInstance; // Give FF some time window.setTimeout('insertHelpIFrame();', 10); var tcont = document.getElementById('plugintablecontainer'); var plugins = tinyMCE.getParam('plugins', '', true, ','); if (plugins.length == 0) document.getElementById('plugins_tab').style.display = 'none'; var html = ""; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; for (var i=0; i' + info.longname + ''; else html += ''; if (info.authorurl != null && info.authorurl != '') html += ''; else html += ''; html += ''; html += ''; } html += ''; html += '
    ' + tinyMCE.getLang('lang_plugin') + '' + tinyMCE.getLang('lang_author') + '' + tinyMCE.getLang('lang_version') + '
    ' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
    '; tcont.innerHTML = html; } function getPluginInfo(name) { if (tinyMCE.plugins[name].getInfo) return tinyMCE.plugins[name].getInfo(); return { longname : name, authorurl : '', infourl : '', author : '--', version : '--' }; } function insertHelpIFrame() { var html = ''; document.getElementById('iframecontainer').innerHTML = html; html = ''; html += 'Got Moxie? '; html += 'Hosted By Sourceforge '; html += 'Also on freshmeat '; document.getElementById('buttoncontainer').innerHTML = html; } Cwordpress/wp-includes/js/tinymce/themes/advanced/jscripts/anchor.js~var action, element; function init() { tinyMCEPopup.resizeToInnerSize(); var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var anchor = tinyMCE.getParentElement(inst.getFocusElement(), "a", "name"); var img = inst.getFocusElement(); action = 'insert'; if (anchor != null) { element = anchor; action = "update"; } if (tinyMCE.getAttrib(img, "class") == "mceItemAnchor") { element = img; action = "update"; } if (action == "update") document.forms[0].anchorName.value = element.nodeName == "IMG" ? element.getAttribute("title") : element.getAttribute("name"); document.forms[0].insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); } function insertAnchor() { var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var name = document.forms[0].anchorName.value, e; tinyMCEPopup.execCommand("mceBeginUndoLevel"); if (action == "update") { if (element.nodeName == "IMG") element.setAttribute("title", name); else element.setAttribute("name", name); } else { var rng = inst.getRng(); if (rng.collapse) rng.collapse(false); name = name.replace(/&/g, '&'); name = name.replace(/\"/g, '"'); name = name.replace(//g, '>'); // Fix for bug #1447335 if (tinyMCE.isGecko) html = ''; else html = ''; tinyMCEPopup.execCommand("mceInsertContent", false, html); // Fix for bug #1447335 force cursor after the anchor element if (tinyMCE.isGecko) { e = inst.getDoc().getElementById('mceNewAnchor'); if (e) { inst.selection.selectNode(e, true, false, false); e.removeAttribute('id'); } } tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); } tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCE.triggerNodeChange(); tinyMCEPopup.close(); } Dwordpress/wp-includes/js/tinymce/themes/advanced/jscripts/charmap.js9function init() { tinyMCEPopup.resizeToInnerSize(); } var charmap = new Array(); // for mor details please see w3c.org // now here is the complete list ;) charmap = [ [' ', ' ', true, 'no-break space'], ['&', '&', true, 'ampersand'], ['"', '"', true, 'quotation mark'], // finance ['¢', '¢', true, 'cent sign'], ['€', '€', true, 'euro sign'], ['£', '£', true, 'pound sign'], ['¥', '¥', true, 'yen sign'], // signs ['©', '©', true, 'copyright sign'], ['®', '®', true, 'registered sign'], ['™', '™', true, 'trade mark sign'], ['‰', '‰', true, 'per mille sign'], ['µ', 'µ', true, 'micro sign'], ['·', '·', true, 'middle dot'], ['•', '•', true, 'bullet'], ['…', '…', true, 'three dot leader'], ['′', '′', true, 'minutes / feet'], ['″', '″', true, 'seconds / inches'], ['§', '§', true, 'section sign'], ['¶', '¶', true, 'paragraph sign'], ['ß', 'ß', true, 'sharp s / ess-zed'], // quotations ['‹', '‹', true, 'single left-pointing angle quotation mark'], ['›', '›', true, 'single right-pointing angle quotation mark'], ['«', '«', true, 'left pointing guillemet'], ['»', '»', true, 'right pointing guillemet'], ['‘', '‘', true, 'left single quotation mark'], ['’', '’', true, 'right single quotation mark'], ['“', '“', true, 'left double quotation mark'], ['”', '”', true, 'right double quotation mark'], ['‚', '‚', true, 'single low-9 quotation mark'], ['„', '„', true, 'double low-9 quotation mark'], ['<', '<', true, 'less-than sign'], ['>', '>', true, 'greater-than sign'], ['≤', '≤', true, 'less-than or equal to'], ['≥', '≥', true, 'greater-than or equal to'], ['–', '–', true, 'en dash'], ['—', '—', true, 'em dash'], ['¯', '¯', true, 'macron'], ['‾', '‾', true, 'overline'], ['¤', '¤', true, 'currency sign'], ['¦', '¦', true, 'broken bar'], ['¨', '¨', true, 'diaeresis'], ['¡', '¡', true, 'inverted exclamation mark'], ['¿', '¿', true, 'turned question mark'], ['ˆ', 'ˆ', true, 'circumflex accent'], ['˜', '˜', true, 'small tilde'], ['°', '°', true, 'degree sign'], ['−', '−', true, 'minus sign'], ['±', '±', true, 'plus-minus sign'], ['÷', '÷', true, 'division sign'], ['⁄', '⁄', true, 'fraction slash'], ['×', '×', true, 'multiplication sign'], ['¹', '¹', true, 'superscript one'], ['²', '²', true, 'superscript two'], ['³', '³', true, 'superscript three'], ['¼', '¼', true, 'fraction one quarter'], ['½', '½', true, 'fraction one half'], ['¾', '¾', true, 'fraction three quarters'], // math / logical ['ƒ', 'ƒ', true, 'function / florin'], ['∫', '∫', true, 'integral'], ['∑', '∑', true, 'n-ary sumation'], ['∞', '∞', true, 'infinity'], ['√', '√', true, 'square root'], ['∼', '∼', false,'similar to'], ['≅', '≅', false,'approximately equal to'], ['≈', '≈', true, 'almost equal to'], ['≠', '≠', true, 'not equal to'], ['≡', '≡', true, 'identical to'], ['∈', '∈', false,'element of'], ['∉', '∉', false,'not an element of'], ['∋', '∋', false,'contains as member'], ['∏', '∏', true, 'n-ary product'], ['∧', '∧', false,'logical and'], ['∨', '∨', false,'logical or'], ['¬', '¬', true, 'not sign'], ['∩', '∩', true, 'intersection'], ['∪', '∪', false,'union'], ['∂', '∂', true, 'partial differential'], ['∀', '∀', false,'for all'], ['∃', '∃', false,'there exists'], ['∅', '∅', false,'diameter'], ['∇', '∇', false,'backward difference'], ['∗', '∗', false,'asterisk operator'], ['∝', '∝', false,'proportional to'], ['∠', '∠', false,'angle'], // undefined ['´', '´', true, 'acute accent'], ['¸', '¸', true, 'cedilla'], ['ª', 'ª', true, 'feminine ordinal indicator'], ['º', 'º', true, 'masculine ordinal indicator'], ['†', '†', true, 'dagger'], ['‡', '‡', true, 'double dagger'], // alphabetical special chars ['À', 'À', true, 'A - grave'], ['Á', 'Á', true, 'A - acute'], ['Â', 'Â', true, 'A - circumflex'], ['Ã', 'Ã', true, 'A - tilde'], ['Ä', 'Ä', true, 'A - diaeresis'], ['Å', 'Å', true, 'A - ring above'], ['Æ', 'Æ', true, 'ligature AE'], ['Ç', 'Ç', true, 'C - cedilla'], ['È', 'È', true, 'E - grave'], ['É', 'É', true, 'E - acute'], ['Ê', 'Ê', true, 'E - circumflex'], ['Ë', 'Ë', true, 'E - diaeresis'], ['Ì', 'Ì', true, 'I - grave'], ['Í', 'Í', true, 'I - acute'], ['Î', 'Î', true, 'I - circumflex'], ['Ï', 'Ï', true, 'I - diaeresis'], ['Ð', 'Ð', true, 'ETH'], ['Ñ', 'Ñ', true, 'N - tilde'], ['Ò', 'Ò', true, 'O - grave'], ['Ó', 'Ó', true, 'O - acute'], ['Ô', 'Ô', true, 'O - circumflex'], ['Õ', 'Õ', true, 'O - tilde'], ['Ö', 'Ö', true, 'O - diaeresis'], ['Ø', 'Ø', true, 'O - slash'], ['Œ', 'Œ', true, 'ligature OE'], ['Š', 'Š', true, 'S - caron'], ['Ù', 'Ù', true, 'U - grave'], ['Ú', 'Ú', true, 'U - acute'], ['Û', 'Û', true, 'U - circumflex'], ['Ü', 'Ü', true, 'U - diaeresis'], ['Ý', 'Ý', true, 'Y - acute'], ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], ['Þ', 'Þ', true, 'THORN'], ['à', 'à', true, 'a - grave'], ['á', 'á', true, 'a - acute'], ['â', 'â', true, 'a - circumflex'], ['ã', 'ã', true, 'a - tilde'], ['ä', 'ä', true, 'a - diaeresis'], ['å', 'å', true, 'a - ring above'], ['æ', 'æ', true, 'ligature ae'], ['ç', 'ç', true, 'c - cedilla'], ['è', 'è', true, 'e - grave'], ['é', 'é', true, 'e - acute'], ['ê', 'ê', true, 'e - circumflex'], ['ë', 'ë', true, 'e - diaeresis'], ['ì', 'ì', true, 'i - grave'], ['í', 'í', true, 'i - acute'], ['î', 'î', true, 'i - circumflex'], ['ï', 'ï', true, 'i - diaeresis'], ['ð', 'ð', true, 'eth'], ['ñ', 'ñ', true, 'n - tilde'], ['ò', 'ò', true, 'o - grave'], ['ó', 'ó', true, 'o - acute'], ['ô', 'ô', true, 'o - circumflex'], ['õ', 'õ', true, 'o - tilde'], ['ö', 'ö', true, 'o - diaeresis'], ['ø', 'ø', true, 'o slash'], ['œ', 'œ', true, 'ligature oe'], ['š', 'š', true, 's - caron'], ['ù', 'ù', true, 'u - grave'], ['ú', 'ú', true, 'u - acute'], ['û', 'û', true, 'u - circumflex'], ['ü', 'ü', true, 'u - diaeresis'], ['ý', 'ý', true, 'y - acute'], ['þ', 'þ', true, 'thorn'], ['ÿ', 'ÿ', true, 'y - diaeresis'], ['Α', 'Α', true, 'Alpha'], ['Β', 'Β', true, 'Beta'], ['Γ', 'Γ', true, 'Gamma'], ['Δ', 'Δ', true, 'Delta'], ['Ε', 'Ε', true, 'Epsilon'], ['Ζ', 'Ζ', true, 'Zeta'], ['Η', 'Η', true, 'Eta'], ['Θ', 'Θ', true, 'Theta'], ['Ι', 'Ι', true, 'Iota'], ['Κ', 'Κ', true, 'Kappa'], ['Λ', 'Λ', true, 'Lambda'], ['Μ', 'Μ', true, 'Mu'], ['Ν', 'Ν', true, 'Nu'], ['Ξ', 'Ξ', true, 'Xi'], ['Ο', 'Ο', true, 'Omicron'], ['Π', 'Π', true, 'Pi'], ['Ρ', 'Ρ', true, 'Rho'], ['Σ', 'Σ', true, 'Sigma'], ['Τ', 'Τ', true, 'Tau'], ['Υ', 'Υ', true, 'Upsilon'], ['Φ', 'Φ', true, 'Phi'], ['Χ', 'Χ', true, 'Chi'], ['Ψ', 'Ψ', true, 'Psi'], ['Ω', 'Ω', true, 'Omega'], ['α', 'α', true, 'alpha'], ['β', 'β', true, 'beta'], ['γ', 'γ', true, 'gamma'], ['δ', 'δ', true, 'delta'], ['ε', 'ε', true, 'epsilon'], ['ζ', 'ζ', true, 'zeta'], ['η', 'η', true, 'eta'], ['θ', 'θ', true, 'theta'], ['ι', 'ι', true, 'iota'], ['κ', 'κ', true, 'kappa'], ['λ', 'λ', true, 'lambda'], ['μ', 'μ', true, 'mu'], ['ν', 'ν', true, 'nu'], ['ξ', 'ξ', true, 'xi'], ['ο', 'ο', true, 'omicron'], ['π', 'π', true, 'pi'], ['ρ', 'ρ', true, 'rho'], ['ς', 'ς', true, 'final sigma'], ['σ', 'σ', true, 'sigma'], ['τ', 'τ', true, 'tau'], ['υ', 'υ', true, 'upsilon'], ['φ', 'φ', true, 'phi'], ['χ', 'χ', true, 'chi'], ['ψ', 'ψ', true, 'psi'], ['ω', 'ω', true, 'omega'], // symbols ['ℵ', 'ℵ', false,'alef symbol'], ['ϖ', 'ϖ', false,'pi symbol'], ['ℜ', 'ℜ', false,'real part symbol'], ['ϑ','ϑ', false,'theta symbol'], ['ϒ', 'ϒ', false,'upsilon - hook symbol'], ['℘', '℘', false,'Weierstrass p'], ['ℑ', 'ℑ', false,'imaginary part'], // arrows ['←', '←', true, 'leftwards arrow'], ['↑', '↑', true, 'upwards arrow'], ['→', '→', true, 'rightwards arrow'], ['↓', '↓', true, 'downwards arrow'], ['↔', '↔', true, 'left right arrow'], ['↵', '↵', false,'carriage return'], ['⇐', '⇐', false,'leftwards double arrow'], ['⇑', '⇑', false,'upwards double arrow'], ['⇒', '⇒', false,'rightwards double arrow'], ['⇓', '⇓', false,'downwards double arrow'], ['⇔', '⇔', false,'left right double arrow'], ['∴', '∴', false,'therefore'], ['⊂', '⊂', false,'subset of'], ['⊃', '⊃', false,'superset of'], ['⊄', '⊄', false,'not a subset of'], ['⊆', '⊆', false,'subset of or equal to'], ['⊇', '⊇', false,'superset of or equal to'], ['⊕', '⊕', false,'circled plus'], ['⊗', '⊗', false,'circled times'], ['⊥', '⊥', false,'perpendicular'], ['⋅', '⋅', false,'dot operator'], ['⌈', '⌈', false,'left ceiling'], ['⌉', '⌉', false,'right ceiling'], ['⌊', '⌊', false,'left floor'], ['⌋', '⌋', false,'right floor'], ['⟨', '〈', false,'left-pointing angle bracket'], ['⟩', '〉', false,'right-pointing angle bracket'], ['◊', '◊', true,'lozenge'], ['♠', '♠', false,'black spade suit'], ['♣', '♣', true, 'black club suit'], ['♥', '♥', true, 'black heart suit'], ['♦', '♦', true, 'black diamond suit'], [' ', ' ', false,'en space'], [' ', ' ', false,'em space'], [' ', ' ', false,'thin space'], ['‌', '‌', false,'zero width non-joiner'], ['‍', '‍', false,'zero width joiner'], ['‎', '‎', false,'left-to-right mark'], ['‏', '‏', false,'right-to-left mark'], ['­', '­', false,'soft hyphen'] ]; function renderCharMapHTML() { var charsPerRow = 20, tdWidth=20, tdHeight=20; var html = ''; var cols=-1; for (var i=0; i' + charmap[i][1] + ''; if ((cols+1) % charsPerRow == 0) html += ''; } } if (cols % charsPerRow > 0) { var padd = charsPerRow - (cols % charsPerRow); for (var i=0; i '; } html += '
    '; document.write(html); } function insertChar(chr) { tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); // Refocus in window if (tinyMCEPopup.isWindow) window.focus(); tinyMCEPopup.close(); } function previewChar(codeA, codeB, codeN) { var elmA = document.getElementById('codeA'); var elmB = document.getElementById('codeB'); var elmV = document.getElementById('codeV'); var elmN = document.getElementById('codeN'); if (codeA=='#160;') { elmV.innerHTML = '__'; } else { elmV.innerHTML = '&' + codeA; } elmB.innerHTML = '&' + codeA; elmA.innerHTML = '&' + codeB; elmN.innerHTML = codeN; } Iwordpress/wp-includes/js/tinymce/themes/advanced/jscripts/color_picker.js+var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; var colors = new Array( "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" ); var named = { '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' }; function init() { var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color')); if (tinyMCE.isMSIE) tinyMCEPopup.resizeToInnerSize(); generatePicker(); if (inputColor) { changeFinalColor(inputColor); col = convertHexToRGB(inputColor); if (col) updateLight(col.r, col.g, col.b); } } function insertAction() { var color = document.getElementById("color").value; tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color); tinyMCEPopup.close(); } function showColor(color, name) { if (name) document.getElementById("colorname").innerHTML = name; document.getElementById("preview").style.backgroundColor = color; document.getElementById("color").value = color; } function convertRGBToHex(col) { var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); if (!col) return col; var rgb = col.replace(re, "$1,$2,$3").split(','); if (rgb.length == 3) { r = parseInt(rgb[0]).toString(16); g = parseInt(rgb[1]).toString(16); b = parseInt(rgb[2]).toString(16); r = r.length == 1 ? '0' + r : r; g = g.length == 1 ? '0' + g : g; b = b.length == 1 ? '0' + b : b; return "#" + r + g + b; } return col; } function convertHexToRGB(col) { if (col.indexOf('#') != -1) { col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); r = parseInt(col.substring(0, 2), 16); g = parseInt(col.substring(2, 4), 16); b = parseInt(col.substring(4, 6), 16); return {r : r, g : g, b : b}; } return null; } function generatePicker() { var el = document.getElementById('light'), h = '', i; for (i = 0; i < detail; i++){ h += '
    '; } el.innerHTML = h; } function generateWebColors() { var el = document.getElementById('webcolors'), h = '', i; if (el.className == 'generated') return; h += '' + ''; for (i=0; i' + '' + '' + colors[i] +  ''; if ((i+1) % 18 == 0) h += ''; } h += '
    '; el.innerHTML = h; el.className = 'generated'; } function generateNamedColors() { var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; if (el.className == 'generated') return; for (n in named) { v = named[n]; h += '' } el.innerHTML = h; el.className = 'generated'; } function selectColor() { var color = document.getElementById("color").value; if(window.opener) window.opener.tinyMCE.execInstanceCommand(tinyMCE.getWindowArg('editor_id'),tinyMCE.getWindowArg('command'),false,color); window.close(); } function dechex(n) { return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); } function computeColor(e) { var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB; x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0); partWidth = document.getElementById('colorpicker').width / 6; partDetail = detail / 2; imHeight = document.getElementById('colorpicker').height; r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); coef = (imHeight - y) / imHeight; r = 128 + (r - 128) * coef; g = 128 + (g - 128) * coef; b = 128 + (b - 128) * coef; changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); updateLight(r, g, b); } function updateLight(r, g, b) { var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; for (i=0; i=0) && (i'); } function insertImage() { var src = document.forms[0].src.value; var alt = document.forms[0].alt.value; var border = document.forms[0].border.value; var vspace = document.forms[0].vspace.value; var hspace = document.forms[0].hspace.value; var width = document.forms[0].width.value; var height = document.forms[0].height.value; var align = document.forms[0].align.options[document.forms[0].align.selectedIndex].value; tinyMCEPopup.restoreSelection(); tinyMCE.themes['advanced']._insertImage(src, alt, border, hspace, vspace, width, height, align); tinyMCEPopup.close(); } function init() { tinyMCEPopup.resizeToInnerSize(); document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); var formObj = document.forms[0]; for (var i=0; i 0) { for (var i=0; i'); } function init() { tinyMCEPopup.resizeToInnerSize(); document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','theme_advanced_link'); // Handle file browser if (isVisible('hrefbrowser')) document.getElementById('href').style.width = '180px'; var formObj = document.forms[0]; for (var i=0; i 0) { var formObj = document.forms[0]; for (var i=0; i'; html += '' + tinyMCE.getLang('lang_author') + ''; html += '' + tinyMCE.getLang('lang_version') + ''; html += ''; html += ''; html += ''; for (var i=0; i' + info.longname + ''; else html += '' + info.longname + ''; if (info.authorurl != null && info.authorurl != '') html += '' + info.author + ''; else html += '' + info.author + ''; html += '' + info.version + ''; html += ''; } html += ''; html += ''; tcont.innerHTML = html; } function getPluginInfo(name) { if (tinyMCE.plugins[name].getInfo) return tinyMCE.plugins[name].getInfo(); return { longname : name, authorurl : '', infourl : '', author : '--', version : '--' }; } function insertHelpIFrame() { var html = ''; document.getElementById('iframecontainer').innerHTML = html; html = ''; html += 'Got Moxie? '; html += 'Hosted By Sourceforge '; html += 'Also on freshmeat '; document.getElementById('buttoncontainer').innerHTML = html; } [wordpress/wp-includes/js/tinymce/themes/advanced/jscripts/.svn/text-base/anchor.js.svn-base~var action, element; function init() { tinyMCEPopup.resizeToInnerSize(); var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var anchor = tinyMCE.getParentElement(inst.getFocusElement(), "a", "name"); var img = inst.getFocusElement(); action = 'insert'; if (anchor != null) { element = anchor; action = "update"; } if (tinyMCE.getAttrib(img, "class") == "mceItemAnchor") { element = img; action = "update"; } if (action == "update") document.forms[0].anchorName.value = element.nodeName == "IMG" ? element.getAttribute("title") : element.getAttribute("name"); document.forms[0].insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); } function insertAnchor() { var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var name = document.forms[0].anchorName.value, e; tinyMCEPopup.execCommand("mceBeginUndoLevel"); if (action == "update") { if (element.nodeName == "IMG") element.setAttribute("title", name); else element.setAttribute("name", name); } else { var rng = inst.getRng(); if (rng.collapse) rng.collapse(false); name = name.replace(/&/g, '&'); name = name.replace(/\"/g, '"'); name = name.replace(//g, '>'); // Fix for bug #1447335 if (tinyMCE.isGecko) html = ''; else html = ''; tinyMCEPopup.execCommand("mceInsertContent", false, html); // Fix for bug #1447335 force cursor after the anchor element if (tinyMCE.isGecko) { e = inst.getDoc().getElementById('mceNewAnchor'); if (e) { inst.selection.selectNode(e, true, false, false); e.removeAttribute('id'); } } tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); } tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCE.triggerNodeChange(); tinyMCEPopup.close(); } \wordpress/wp-includes/js/tinymce/themes/advanced/jscripts/.svn/text-base/charmap.js.svn-base9function init() { tinyMCEPopup.resizeToInnerSize(); } var charmap = new Array(); // for mor details please see w3c.org // now here is the complete list ;) charmap = [ [' ', ' ', true, 'no-break space'], ['&', '&', true, 'ampersand'], ['"', '"', true, 'quotation mark'], // finance ['¢', '¢', true, 'cent sign'], ['€', '€', true, 'euro sign'], ['£', '£', true, 'pound sign'], ['¥', '¥', true, 'yen sign'], // signs ['©', '©', true, 'copyright sign'], ['®', '®', true, 'registered sign'], ['™', '™', true, 'trade mark sign'], ['‰', '‰', true, 'per mille sign'], ['µ', 'µ', true, 'micro sign'], ['·', '·', true, 'middle dot'], ['•', '•', true, 'bullet'], ['…', '…', true, 'three dot leader'], ['′', '′', true, 'minutes / feet'], ['″', '″', true, 'seconds / inches'], ['§', '§', true, 'section sign'], ['¶', '¶', true, 'paragraph sign'], ['ß', 'ß', true, 'sharp s / ess-zed'], // quotations ['‹', '‹', true, 'single left-pointing angle quotation mark'], ['›', '›', true, 'single right-pointing angle quotation mark'], ['«', '«', true, 'left pointing guillemet'], ['»', '»', true, 'right pointing guillemet'], ['‘', '‘', true, 'left single quotation mark'], ['’', '’', true, 'right single quotation mark'], ['“', '“', true, 'left double quotation mark'], ['”', '”', true, 'right double quotation mark'], ['‚', '‚', true, 'single low-9 quotation mark'], ['„', '„', true, 'double low-9 quotation mark'], ['<', '<', true, 'less-than sign'], ['>', '>', true, 'greater-than sign'], ['≤', '≤', true, 'less-than or equal to'], ['≥', '≥', true, 'greater-than or equal to'], ['–', '–', true, 'en dash'], ['—', '—', true, 'em dash'], ['¯', '¯', true, 'macron'], ['‾', '‾', true, 'overline'], ['¤', '¤', true, 'currency sign'], ['¦', '¦', true, 'broken bar'], ['¨', '¨', true, 'diaeresis'], ['¡', '¡', true, 'inverted exclamation mark'], ['¿', '¿', true, 'turned question mark'], ['ˆ', 'ˆ', true, 'circumflex accent'], ['˜', '˜', true, 'small tilde'], ['°', '°', true, 'degree sign'], ['−', '−', true, 'minus sign'], ['±', '±', true, 'plus-minus sign'], ['÷', '÷', true, 'division sign'], ['⁄', '⁄', true, 'fraction slash'], ['×', '×', true, 'multiplication sign'], ['¹', '¹', true, 'superscript one'], ['²', '²', true, 'superscript two'], ['³', '³', true, 'superscript three'], ['¼', '¼', true, 'fraction one quarter'], ['½', '½', true, 'fraction one half'], ['¾', '¾', true, 'fraction three quarters'], // math / logical ['ƒ', 'ƒ', true, 'function / florin'], ['∫', '∫', true, 'integral'], ['∑', '∑', true, 'n-ary sumation'], ['∞', '∞', true, 'infinity'], ['√', '√', true, 'square root'], ['∼', '∼', false,'similar to'], ['≅', '≅', false,'approximately equal to'], ['≈', '≈', true, 'almost equal to'], ['≠', '≠', true, 'not equal to'], ['≡', '≡', true, 'identical to'], ['∈', '∈', false,'element of'], ['∉', '∉', false,'not an element of'], ['∋', '∋', false,'contains as member'], ['∏', '∏', true, 'n-ary product'], ['∧', '∧', false,'logical and'], ['∨', '∨', false,'logical or'], ['¬', '¬', true, 'not sign'], ['∩', '∩', true, 'intersection'], ['∪', '∪', false,'union'], ['∂', '∂', true, 'partial differential'], ['∀', '∀', false,'for all'], ['∃', '∃', false,'there exists'], ['∅', '∅', false,'diameter'], ['∇', '∇', false,'backward difference'], ['∗', '∗', false,'asterisk operator'], ['∝', '∝', false,'proportional to'], ['∠', '∠', false,'angle'], // undefined ['´', '´', true, 'acute accent'], ['¸', '¸', true, 'cedilla'], ['ª', 'ª', true, 'feminine ordinal indicator'], ['º', 'º', true, 'masculine ordinal indicator'], ['†', '†', true, 'dagger'], ['‡', '‡', true, 'double dagger'], // alphabetical special chars ['À', 'À', true, 'A - grave'], ['Á', 'Á', true, 'A - acute'], ['Â', 'Â', true, 'A - circumflex'], ['Ã', 'Ã', true, 'A - tilde'], ['Ä', 'Ä', true, 'A - diaeresis'], ['Å', 'Å', true, 'A - ring above'], ['Æ', 'Æ', true, 'ligature AE'], ['Ç', 'Ç', true, 'C - cedilla'], ['È', 'È', true, 'E - grave'], ['É', 'É', true, 'E - acute'], ['Ê', 'Ê', true, 'E - circumflex'], ['Ë', 'Ë', true, 'E - diaeresis'], ['Ì', 'Ì', true, 'I - grave'], ['Í', 'Í', true, 'I - acute'], ['Î', 'Î', true, 'I - circumflex'], ['Ï', 'Ï', true, 'I - diaeresis'], ['Ð', 'Ð', true, 'ETH'], ['Ñ', 'Ñ', true, 'N - tilde'], ['Ò', 'Ò', true, 'O - grave'], ['Ó', 'Ó', true, 'O - acute'], ['Ô', 'Ô', true, 'O - circumflex'], ['Õ', 'Õ', true, 'O - tilde'], ['Ö', 'Ö', true, 'O - diaeresis'], ['Ø', 'Ø', true, 'O - slash'], ['Œ', 'Œ', true, 'ligature OE'], ['Š', 'Š', true, 'S - caron'], ['Ù', 'Ù', true, 'U - grave'], ['Ú', 'Ú', true, 'U - acute'], ['Û', 'Û', true, 'U - circumflex'], ['Ü', 'Ü', true, 'U - diaeresis'], ['Ý', 'Ý', true, 'Y - acute'], ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], ['Þ', 'Þ', true, 'THORN'], ['à', 'à', true, 'a - grave'], ['á', 'á', true, 'a - acute'], ['â', 'â', true, 'a - circumflex'], ['ã', 'ã', true, 'a - tilde'], ['ä', 'ä', true, 'a - diaeresis'], ['å', 'å', true, 'a - ring above'], ['æ', 'æ', true, 'ligature ae'], ['ç', 'ç', true, 'c - cedilla'], ['è', 'è', true, 'e - grave'], ['é', 'é', true, 'e - acute'], ['ê', 'ê', true, 'e - circumflex'], ['ë', 'ë', true, 'e - diaeresis'], ['ì', 'ì', true, 'i - grave'], ['í', 'í', true, 'i - acute'], ['î', 'î', true, 'i - circumflex'], ['ï', 'ï', true, 'i - diaeresis'], ['ð', 'ð', true, 'eth'], ['ñ', 'ñ', true, 'n - tilde'], ['ò', 'ò', true, 'o - grave'], ['ó', 'ó', true, 'o - acute'], ['ô', 'ô', true, 'o - circumflex'], ['õ', 'õ', true, 'o - tilde'], ['ö', 'ö', true, 'o - diaeresis'], ['ø', 'ø', true, 'o slash'], ['œ', 'œ', true, 'ligature oe'], ['š', 'š', true, 's - caron'], ['ù', 'ù', true, 'u - grave'], ['ú', 'ú', true, 'u - acute'], ['û', 'û', true, 'u - circumflex'], ['ü', 'ü', true, 'u - diaeresis'], ['ý', 'ý', true, 'y - acute'], ['þ', 'þ', true, 'thorn'], ['ÿ', 'ÿ', true, 'y - diaeresis'], ['Α', 'Α', true, 'Alpha'], ['Β', 'Β', true, 'Beta'], ['Γ', 'Γ', true, 'Gamma'], ['Δ', 'Δ', true, 'Delta'], ['Ε', 'Ε', true, 'Epsilon'], ['Ζ', 'Ζ', true, 'Zeta'], ['Η', 'Η', true, 'Eta'], ['Θ', 'Θ', true, 'Theta'], ['Ι', 'Ι', true, 'Iota'], ['Κ', 'Κ', true, 'Kappa'], ['Λ', 'Λ', true, 'Lambda'], ['Μ', 'Μ', true, 'Mu'], ['Ν', 'Ν', true, 'Nu'], ['Ξ', 'Ξ', true, 'Xi'], ['Ο', 'Ο', true, 'Omicron'], ['Π', 'Π', true, 'Pi'], ['Ρ', 'Ρ', true, 'Rho'], ['Σ', 'Σ', true, 'Sigma'], ['Τ', 'Τ', true, 'Tau'], ['Υ', 'Υ', true, 'Upsilon'], ['Φ', 'Φ', true, 'Phi'], ['Χ', 'Χ', true, 'Chi'], ['Ψ', 'Ψ', true, 'Psi'], ['Ω', 'Ω', true, 'Omega'], ['α', 'α', true, 'alpha'], ['β', 'β', true, 'beta'], ['γ', 'γ', true, 'gamma'], ['δ', 'δ', true, 'delta'], ['ε', 'ε', true, 'epsilon'], ['ζ', 'ζ', true, 'zeta'], ['η', 'η', true, 'eta'], ['θ', 'θ', true, 'theta'], ['ι', 'ι', true, 'iota'], ['κ', 'κ', true, 'kappa'], ['λ', 'λ', true, 'lambda'], ['μ', 'μ', true, 'mu'], ['ν', 'ν', true, 'nu'], ['ξ', 'ξ', true, 'xi'], ['ο', 'ο', true, 'omicron'], ['π', 'π', true, 'pi'], ['ρ', 'ρ', true, 'rho'], ['ς', 'ς', true, 'final sigma'], ['σ', 'σ', true, 'sigma'], ['τ', 'τ', true, 'tau'], ['υ', 'υ', true, 'upsilon'], ['φ', 'φ', true, 'phi'], ['χ', 'χ', true, 'chi'], ['ψ', 'ψ', true, 'psi'], ['ω', 'ω', true, 'omega'], // symbols ['ℵ', 'ℵ', false,'alef symbol'], ['ϖ', 'ϖ', false,'pi symbol'], ['ℜ', 'ℜ', false,'real part symbol'], ['ϑ','ϑ', false,'theta symbol'], ['ϒ', 'ϒ', false,'upsilon - hook symbol'], ['℘', '℘', false,'Weierstrass p'], ['ℑ', 'ℑ', false,'imaginary part'], // arrows ['←', '←', true, 'leftwards arrow'], ['↑', '↑', true, 'upwards arrow'], ['→', '→', true, 'rightwards arrow'], ['↓', '↓', true, 'downwards arrow'], ['↔', '↔', true, 'left right arrow'], ['↵', '↵', false,'carriage return'], ['⇐', '⇐', false,'leftwards double arrow'], ['⇑', '⇑', false,'upwards double arrow'], ['⇒', '⇒', false,'rightwards double arrow'], ['⇓', '⇓', false,'downwards double arrow'], ['⇔', '⇔', false,'left right double arrow'], ['∴', '∴', false,'therefore'], ['⊂', '⊂', false,'subset of'], ['⊃', '⊃', false,'superset of'], ['⊄', '⊄', false,'not a subset of'], ['⊆', '⊆', false,'subset of or equal to'], ['⊇', '⊇', false,'superset of or equal to'], ['⊕', '⊕', false,'circled plus'], ['⊗', '⊗', false,'circled times'], ['⊥', '⊥', false,'perpendicular'], ['⋅', '⋅', false,'dot operator'], ['⌈', '⌈', false,'left ceiling'], ['⌉', '⌉', false,'right ceiling'], ['⌊', '⌊', false,'left floor'], ['⌋', '⌋', false,'right floor'], ['⟨', '〈', false,'left-pointing angle bracket'], ['⟩', '〉', false,'right-pointing angle bracket'], ['◊', '◊', true,'lozenge'], ['♠', '♠', false,'black spade suit'], ['♣', '♣', true, 'black club suit'], ['♥', '♥', true, 'black heart suit'], ['♦', '♦', true, 'black diamond suit'], [' ', ' ', false,'en space'], [' ', ' ', false,'em space'], [' ', ' ', false,'thin space'], ['‌', '‌', false,'zero width non-joiner'], ['‍', '‍', false,'zero width joiner'], ['‎', '‎', false,'left-to-right mark'], ['‏', '‏', false,'right-to-left mark'], ['­', '­', false,'soft hyphen'] ]; function renderCharMapHTML() { var charsPerRow = 20, tdWidth=20, tdHeight=20; var html = ''; var cols=-1; for (var i=0; i' + charmap[i][1] + ''; if ((cols+1) % charsPerRow == 0) html += ''; } } if (cols % charsPerRow > 0) { var padd = charsPerRow - (cols % charsPerRow); for (var i=0; i '; } html += '
    '; document.write(html); } function insertChar(chr) { tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); // Refocus in window if (tinyMCEPopup.isWindow) window.focus(); tinyMCEPopup.close(); } function previewChar(codeA, codeB, codeN) { var elmA = document.getElementById('codeA'); var elmB = document.getElementById('codeB'); var elmV = document.getElementById('codeV'); var elmN = document.getElementById('codeN'); if (codeA=='#160;') { elmV.innerHTML = '__'; } else { elmV.innerHTML = '&' + codeA; } elmB.innerHTML = '&' + codeA; elmA.innerHTML = '&' + codeB; elmN.innerHTML = codeN; } awordpress/wp-includes/js/tinymce/themes/advanced/jscripts/.svn/text-base/color_picker.js.svn-base+var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; var colors = new Array( "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" ); var named = { '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' }; function init() { var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color')); if (tinyMCE.isMSIE) tinyMCEPopup.resizeToInnerSize(); generatePicker(); if (inputColor) { changeFinalColor(inputColor); col = convertHexToRGB(inputColor); if (col) updateLight(col.r, col.g, col.b); } } function insertAction() { var color = document.getElementById("color").value; tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color); tinyMCEPopup.close(); } function showColor(color, name) { if (name) document.getElementById("colorname").innerHTML = name; document.getElementById("preview").style.backgroundColor = color; document.getElementById("color").value = color; } function convertRGBToHex(col) { var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); if (!col) return col; var rgb = col.replace(re, "$1,$2,$3").split(','); if (rgb.length == 3) { r = parseInt(rgb[0]).toString(16); g = parseInt(rgb[1]).toString(16); b = parseInt(rgb[2]).toString(16); r = r.length == 1 ? '0' + r : r; g = g.length == 1 ? '0' + g : g; b = b.length == 1 ? '0' + b : b; return "#" + r + g + b; } return col; } function convertHexToRGB(col) { if (col.indexOf('#') != -1) { col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); r = parseInt(col.substring(0, 2), 16); g = parseInt(col.substring(2, 4), 16); b = parseInt(col.substring(4, 6), 16); return {r : r, g : g, b : b}; } return null; } function generatePicker() { var el = document.getElementById('light'), h = '', i; for (i = 0; i < detail; i++){ h += '
    '; } el.innerHTML = h; } function generateWebColors() { var el = document.getElementById('webcolors'), h = '', i; if (el.className == 'generated') return; h += '' + ''; for (i=0; i' + '' + '' + colors[i] +  ''; if ((i+1) % 18 == 0) h += ''; } h += '
    '; el.innerHTML = h; el.className = 'generated'; } function generateNamedColors() { var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; if (el.className == 'generated') return; for (n in named) { v = named[n]; h += '' } el.innerHTML = h; el.className = 'generated'; } function selectColor() { var color = document.getElementById("color").value; if(window.opener) window.opener.tinyMCE.execInstanceCommand(tinyMCE.getWindowArg('editor_id'),tinyMCE.getWindowArg('command'),false,color); window.close(); } function dechex(n) { return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); } function computeColor(e) { var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB; x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0); partWidth = document.getElementById('colorpicker').width / 6; partDetail = detail / 2; imHeight = document.getElementById('colorpicker').height; r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); coef = (imHeight - y) / imHeight; r = 128 + (r - 128) * coef; g = 128 + (g - 128) * coef; b = 128 + (b - 128) * coef; changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); updateLight(r, g, b); } function updateLight(r, g, b) { var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; for (i=0; i=0) && (i'); } function insertImage() { var src = document.forms[0].src.value; var alt = document.forms[0].alt.value; var border = document.forms[0].border.value; var vspace = document.forms[0].vspace.value; var hspace = document.forms[0].hspace.value; var width = document.forms[0].width.value; var height = document.forms[0].height.value; var align = document.forms[0].align.options[document.forms[0].align.selectedIndex].value; tinyMCEPopup.restoreSelection(); tinyMCE.themes['advanced']._insertImage(src, alt, border, hspace, vspace, width, height, align); tinyMCEPopup.close(); } function init() { tinyMCEPopup.resizeToInnerSize(); document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); var formObj = document.forms[0]; for (var i=0; i 0) { for (var i=0; i'); } function init() { tinyMCEPopup.resizeToInnerSize(); document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','theme_advanced_link'); // Handle file browser if (isVisible('hrefbrowser')) document.getElementById('href').style.width = '180px'; var formObj = document.forms[0]; for (var i=0; i 0) { var formObj = document.forms[0]; for (var i=0; i {$lang_insert_link_title}
     
    Bwordpress/wp-includes/js/tinymce/themes/advanced/source_editor.htm {$lang_theme_code_title}
    {$lang_theme_code_title}

    =wordpress/wp-includes/js/tinymce/themes/advanced/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/themes/advanced svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 jscripts dir about.htm file 2008-11-20T16:30:33.000000Z 64c9568b29bc06652f9ece85691ecb1f 2008-10-28T18:17:06.112729Z 97 paul anchor.htm file 2008-11-20T16:30:33.000000Z fcdc4522e42d5e4eb46a43ba771a16c0 2008-10-28T18:17:06.112729Z 97 paul charmap.htm file 2008-11-20T16:30:33.000000Z 813a9c698d9150d198f438a7928bfa29 2008-10-28T18:17:06.112729Z 97 paul color_picker.htm file 2008-11-20T16:30:33.000000Z d3e7f564e4bea2af433d6f7f882370ab 2008-10-28T18:17:06.112729Z 97 paul langs dir link.htm file 2008-11-20T16:30:33.000000Z 45ca8fb38d196c8b814490a71fa2f85a 2008-10-28T18:17:06.112729Z 97 paul images dir css dir image.htm file 2008-11-20T16:30:33.000000Z 6ee929f893a3cf67861b023f905baadd 2008-10-28T18:17:06.112729Z 97 paul editor_template.js file 2008-11-20T16:30:33.000000Z 67c40f06846a456511d8688419451c18 2008-10-28T18:17:06.112729Z 97 paul source_editor.htm file 2008-11-20T16:30:33.000000Z 1b6d02c486a9c4c1e47b9cda373e18a9 2008-10-28T18:17:06.112729Z 97 paul {$lang_about_title}

    {$lang_about_title}

    Version: {$tinymce_version} ({$tinymce_releasedate})

    TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

    Copyright © 2003-2007, Moxiecode Systems AB, All rights reserved.

    For more information about this software visit the TinyMCE website.

    {$lang_loaded_plugins}

     

    Swordpress/wp-includes/js/tinymce/themes/advanced/.svn/text-base/anchor.htm.svn-baseU {$lang_insert_anchor_title}
    {$lang_insert_anchor_title}
    {$lang_insert_anchor_name}:
    Twordpress/wp-includes/js/tinymce/themes/advanced/.svn/text-base/charmap.htm.svn-base {$lang_theme_charmap_title}
    {$lang_theme_charmap_title}
     
     
    HTML-Code
     
     
    NUM-Code
     
    Ywordpress/wp-includes/js/tinymce/themes/advanced/.svn/text-base/color_picker.htm.svn-base {$lang_theme_colorpicker_title}
    {$lang_color_picker}

    {$lang_web_colors}

    {$lang_named_colors}

    {$lang_color_name}
    [wordpress/wp-includes/js/tinymce/themes/advanced/.svn/text-base/editor_template.js.svn-base/** * $Id: editor_template_src.js 218 2007-02-13 11:08:01Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ /* Import theme specific language pack */ tinyMCE.importThemeLanguagePack('advanced'); var TinyMCE_AdvancedTheme = { // Private theme fields _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF", _autoImportCSSClasses : true, _resizer : {}, _buttons : [ // Control id, button img, button title, command, user_interface, value ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'], ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'], ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'], ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'], ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'], ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'], ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'], ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'], ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'], ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'], ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'], ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'], ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'], ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'], ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'], ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'], ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'], ['link', 'link.gif', 'lang_link_desc', 'mceLink', true], ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'], ['image', 'image.gif', 'lang_image_desc', 'mceImage', true], ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'], ['help', 'help.gif', 'lang_help_desc', 'mceHelp'], ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'], ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'], ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'], ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'], ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'], ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true], ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true], ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true], ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true], ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'], ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'], ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'], ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument'] ], _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table', /** * Returns HTML code for the specificed control. */ getControlHTML : function(button_name) { var i, x, but; // Lookup button in button list for (i=0; i 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); if (but[0] == button_name) return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); } // Custom controlls other than buttons switch (button_name) { case "formatselect": var html = ''; return html; case "styleselect": return ''; case "fontselect": var fontHTML = ''; return fontHTML; case "fontsizeselect": return ''; case "|": case "separator": return ''; case "spacer": return ''; case "rowseparator": return '
    '; } return ""; }, /** * Theme specific execcommand handling. */ execCommand : function(editor_id, element, command, user_interface, value) { switch (command) { case 'mceHelp': tinyMCE.openWindow({ file : 'about.htm', width : 480, height : 380 }, { tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion, tinymce_releasedate : tinyMCE.releaseDate, inline : "yes" }); return true; case "mceLink": var inst = tinyMCE.getInstanceById(editor_id); var doc = inst.getDoc(); var selectedText = ""; if (tinyMCE.isMSIE) { var rng = doc.selection.createRange(); selectedText = rng.text; } else selectedText = inst.getSel().toString(); if (!tinyMCE.linkElement) { if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) return true; } var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") tinyMCE.linkElement = tinyMCE.selectedElement; // Is anchor not a link if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") tinyMCE.linkElement = null; if (tinyMCE.linkElement) { href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); // Try old onclick to if copy/pasted content if (onclick == "") onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); onclick = tinyMCE.cleanupEventStr(onclick); href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); // Use mce_href if defined mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href'); if (mceRealHref != "") { href = mceRealHref; if (tinyMCE.getParam('convert_urls')) href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); } action = "update"; } var template = new Array(); template['file'] = 'link.htm'; template['width'] = 310; template['height'] = 200; // Language specific width and height addons template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); if (inst.settings['insertlink_callback']) { var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); if (returnVal && returnVal['href']) TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); } else { tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"}); } return true; case "mceImage": var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; var title = "", onmouseover = "", onmouseout = "", action = "insert"; var img = tinyMCE.imgElement; var inst = tinyMCE.getInstanceById(editor_id); if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { img = tinyMCE.selectedElement; tinyMCE.imgElement = img; } if (img) { // Is it a internal MCE visual aid image, then skip this one. if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) return true; src = tinyMCE.getAttrib(img, 'src'); alt = tinyMCE.getAttrib(img, 'alt'); // Try polling out the title if (alt == "") alt = tinyMCE.getAttrib(img, 'title'); // Fix width/height attributes if the styles is specified if (tinyMCE.isGecko) { var w = img.style.width; if (w != null && w != "") img.setAttribute("width", w); var h = img.style.height; if (h != null && h != "") img.setAttribute("height", h); } border = tinyMCE.getAttrib(img, 'border'); hspace = tinyMCE.getAttrib(img, 'hspace'); vspace = tinyMCE.getAttrib(img, 'vspace'); width = tinyMCE.getAttrib(img, 'width'); height = tinyMCE.getAttrib(img, 'height'); align = tinyMCE.getAttrib(img, 'align'); onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); title = tinyMCE.getAttrib(img, 'title'); // Is realy specified? if (tinyMCE.isMSIE) { width = img.attributes['width'].specified ? width : ""; height = img.attributes['height'].specified ? height : ""; } //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); // Use mce_src if defined mceRealSrc = tinyMCE.getAttrib(img, 'mce_src'); if (mceRealSrc != "") { src = mceRealSrc; if (tinyMCE.getParam('convert_urls')) src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); } //if (onmouseover != "") // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); //if (onmouseout != "") // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); action = "update"; } var template = new Array(); template['file'] = 'image.htm?src={$src}'; template['width'] = 355; template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0); // Language specific width and height addons template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); if (inst.settings['insertimage_callback']) { var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); if (returnVal && returnVal['src']) TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); } else tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"}); return true; case "forecolor": var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm; TinyMCE_AdvancedTheme._hideMenus(editor_id); if (!fcp.exists()) { fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); elm = fcp.getElement(); elm._editor_id = editor_id; elm._command = "forecolor"; elm._switchId = editor_id + "_forecolor"; tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); } img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0]; p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); fcp.moveTo(p.absLeft, p.absTop); fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor; fcp.show(); return false; case "forecolorpicker": this._pickColor(editor_id, 'forecolor'); return true; case "forecolorMenu": TinyMCE_AdvancedTheme._hideMenus(editor_id); // Create color layer var ml = new TinyMCE_Layer(editor_id + '_fcMenu'); if (!ml.exists()) ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor')); tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus'); ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl'); ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); if (tinyMCE.isOpera) ml.moveBy(0, -2); ml.show(); return true; case "HiliteColor": var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img; TinyMCE_AdvancedTheme._hideMenus(editor_id); if (!bcp.exists()) { bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); elm = bcp.getElement(); elm._editor_id = editor_id; elm._command = "HiliteColor"; elm._switchId = editor_id + "_backcolor"; tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); } img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0]; p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); bcp.moveTo(p.absLeft, p.absTop); bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor; bcp.show(); return false; case "HiliteColorMenu": TinyMCE_AdvancedTheme._hideMenus(editor_id); // Create color layer var ml = new TinyMCE_Layer(editor_id + '_bcMenu'); if (!ml.exists()) ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor')); tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus'); ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl'); ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); if (tinyMCE.isOpera) ml.moveBy(0, -2); ml.show(); return true; case "backcolorpicker": this._pickColor(editor_id, 'HiliteColor'); return true; case "mceColorPicker": if (user_interface) { var template = []; if (!value['callback'] && !value['color']) value['color'] = value['document'].getElementById(value['element_id']).value; template['file'] = 'color_picker.htm'; template['width'] = 380; template['height'] = 250; template['close_previous'] = "no"; template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0); template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0); if (typeof(value['store_selection']) == "undefined") value['store_selection'] = true; tinyMCE.lastColorPickerValue = value; tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']}); } else { var savedVal = tinyMCE.lastColorPickerValue, elm; if (savedVal['callback']) { savedVal['callback'](value); return true; } elm = savedVal['document'].getElementById(savedVal['element_id']); elm.value = value; if (elm.onchange != null && elm.onchange != '') eval('elm.onchange();'); } return true; case "mceCodeEditor": var template = new Array(); template['file'] = 'source_editor.htm'; template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720)); template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580)); tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"}); return true; case "mceCharMap": var template = new Array(); template['file'] = 'charmap.htm'; template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0); template['height'] = 250; template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0); template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0); tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); return true; case "mceInsertAnchor": var template = new Array(); template['file'] = 'anchor.htm'; template['width'] = 320; template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0); template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0); template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0); tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); return true; case "mceNewDocument": if (confirm(tinyMCE.getLang('lang_newdocument'))) tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' '); return true; } return false; }, /** * Editor instance template function. */ getEditorTemplate : function(settings, editorId) { function removeFromArray(in_array, remove_array) { var outArray = new Array(), skip; for (var i=0; i 

    '; var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout"); // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY! var styleSelectHTML = ''; if (settings['theme_advanced_styles']) { var stylesAr = settings['theme_advanced_styles'].split(';'); for (var i=0; i' + key + ''; } TinyMCE_AdvancedTheme._autoImportCSSClasses = false; } switch(layoutManager) { case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... var toolbarHTML = ""; var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation); var defVals = { theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap" }; // Add accessibility control toolbarHTML += ' 0) { toolbarHTML += "
    "; deltaHeight -= 23; } } // Add accessibility control toolbarHTML += '
    '; // Setup template html template['html'] = ''; if (toolbarLocation == "top") template['html'] += ''; if (statusbarLocation == "top") { template['html'] += ''; deltaHeight -= 23; } template['html'] += ''; if (toolbarLocation == "bottom") template['html'] += ''; // External toolbar changes if (toolbarLocation == "external") { var bod = document.body; var elm = document.createElement ("div"); toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId}); elm.className = "mceToolbarExternal"; elm.id = editorId+"_toolbar"; elm.innerHTML = '
    ' + toolbarHTML + '
    ' + statusbarHTML + '
    ' + toolbarHTML + '
    '+toolbarHTML+'
    '; bod.appendChild (elm); // bod.style.marginTop = elm.offsetHeight + "px"; deltaHeight = 0; tinyMCE.getInstanceById(editorId).toolbarElement = elm; //template['html'] = '
    '+toolbarHTML+'
    ' + template["html"]; } else { tinyMCE.getInstanceById(editorId).toolbarElement = null; } if (statusbarLocation == "bottom") { template['html'] += '' + statusbarHTML + ''; deltaHeight -= 23; } template['html'] += ''; //"SimpleLayout" break; case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. template['html'] = ''; var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); //Render Containers: for (var i = 0; i < containers.length; i++) { if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... template['html'] += ''; else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath: { var pathClass = "mceStatusbar"; if (i == containers.length-1) { pathClass = "mceStatusbarBottom"; } else if (i == 0) { pathClass = "mceStatusbar"; } else { deltaHeight-=2; } template['html'] += ''; deltaHeight -= 22; } else { // Render normal Container var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); var curContainerHTML = ""; var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); for (var j=0; j 0) { curContainerHTML += "
    "; deltaHeight -= 23; } template['html'] += '
    '; } } template['html'] += '
    ' + statusbarHTML + '
    ' + curContainerHTML + '
    '; //RowLayout break; case "CustomLayout" : //User defined layout callback... var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { template = eval(customLayout + "(template);"); } break; } if (resizing) template['html'] += ''; template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); // Set to default values if (!template['delta_width']) template['delta_width'] = 0; if (!template['delta_height']) template['delta_height'] = deltaHeight; return template; }, initInstance : function(inst) { if (tinyMCE.getParam("theme_advanced_resizing", false)) { if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width"); var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height"); TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true)); } } inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink'); }, removeInstance : function(inst) { new TinyMCE_Layer(inst.editorId + '_fcMenu').remove(); new TinyMCE_Layer(inst.editorId + '_bcMenu').remove(); }, hideInstance : function(inst) { TinyMCE_AdvancedTheme._hideMenus(inst.editorId); }, _handleMenuEvent : function(e) { var te = tinyMCE.isMSIE ? window.event.srcElement : e.target; tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId)); if (e.type == "click") tinyMCE.execInstanceCommand(te._editor_id, te._command); }, _hideMenus : function(id) { var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu'); if (fcml.exists() && fcml.isVisible()) { tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton'); fcml.hide(); } if (bcml.exists() && bcml.isVisible()) { tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton'); bcml.hide(); } }, /** * Node change handler. */ handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) { var alignNode, breakOut, classNode; function selectByValue(select_elm, value, first_index) { first_index = typeof(first_index) == "undefined" ? false : true; if (select_elm) { for (var i=0; i=0; i--) { var nodeName = path[i].nodeName.toLowerCase(); var nodeData = ""; if (nodeName.indexOf("html:") == 0) nodeName = nodeName.substring(5); if (nodeName == "b") { nodeName = "strong"; } if (nodeName == "i") { nodeName = "em"; } if (nodeName == "span") { var cn = tinyMCE.getAttrib(path[i], "class"); if (cn != "" && cn.indexOf('mceItem') == -1) nodeData += "class: " + cn + " "; var st = tinyMCE.getAttrib(path[i], "style"); if (st != "") { st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st)); nodeData += "style: " + tinyMCE.xmlEncode(st) + " "; } } if (nodeName == "font") { if (tinyMCE.getParam("convert_fonts_to_spans")) nodeName = "span"; var face = tinyMCE.getAttrib(path[i], "face"); if (face != "") nodeData += "font: " + tinyMCE.xmlEncode(face) + " "; var size = tinyMCE.getAttrib(path[i], "size"); if (size != "") nodeData += "size: " + tinyMCE.xmlEncode(size) + " "; var color = tinyMCE.getAttrib(path[i], "color"); if (color != "") nodeData += "color: " + tinyMCE.xmlEncode(color) + " "; } if (tinyMCE.getAttrib(path[i], 'id') != "") { nodeData += "id: " + path[i].getAttribute('id') + " "; } var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); if (className != "" && className.indexOf('mceItem') == -1) nodeData += "class: " + className + " "; if (tinyMCE.getAttrib(path[i], 'src') != "") { var src = tinyMCE.getAttrib(path[i], "mce_src"); if (src == "") src = tinyMCE.getAttrib(path[i], "src"); nodeData += "src: " + tinyMCE.xmlEncode(src) + " "; } if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") { var href = tinyMCE.getAttrib(path[i], "mce_href"); if (href == "") href = tinyMCE.getAttrib(path[i], "href"); nodeData += "href: " + tinyMCE.xmlEncode(href) + " "; } className = tinyMCE.getAttrib(path[i], "class"); if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) { nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase(); nodeData = path[i].getAttribute('title'); } if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") { nodeName = "a"; nodeName += "#" + tinyMCE.xmlEncode(anchor); nodeData = ""; } if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) { var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); if (className != "" && className.indexOf('mceItem') == -1) { nodeName += "." + className; } } var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');'; html += '' + nodeName + ''; if (i > 0) { html += " » "; } } pathElm.innerHTML = '' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' '; } // Reset old states tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal'); if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1) tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected'); // Get link var anchorLink = tinyMCE.getParentElement(node, "a", "href"); if (anchorLink || any_selection) { tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); } // Handle visual aid tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal'); if (undo_levels != -1) { tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled'); tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled'); } // Within li, blockquote if (tinyMCE.getParentElement(node, "li,blockquote")) tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal'); // Has redo levels if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal'); // Has undo levels if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal'); // Select class in select box var selectElm = document.getElementById(editor_id + "_styleSelect"); if (selectElm) { TinyMCE_AdvancedTheme._setupCSSClasses(editor_id); classNode = node; breakOut = false; var index = 0; do { if (classNode && classNode.className) { for (var i=0; i"); else selectByValue(selectElm, ""); } // Select fontselect var selectElm = document.getElementById(editor_id + "_fontNameSelect"); if (selectElm) { if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) { var face = inst.queryCommandValue('FontName'); face = face == null || face == "" ? "" : face; selectByValue(selectElm, face, face != ""); } else { var elm = tinyMCE.getParentElement(node, "font", "face"); if (elm) { var family = tinyMCE.getAttrib(elm, "face"); if (family == '') family = '' + elm.style.fontFamily; if (!selectByValue(selectElm, family, family != "")) selectByValue(selectElm, ""); } else selectByValue(selectElm, ""); } } // Select fontsize var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); if (selectElm) { if (!tinyMCE.isSafari && !tinyMCE.isOpera) { var size = inst.queryCommandValue('FontSize'); selectByValue(selectElm, size == null || size == "" ? "0" : size); } else { var elm = tinyMCE.getParentElement(node, "font", "size"); if (elm) { var size = tinyMCE.getAttrib(elm, "size"); if (size == '') { var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px'); size = '' + elm.style.fontSize; for (var i=0; i 0) selectElm.setAttribute('cssImported', 'true'); } }, _setCookie : function(name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + escape(path) : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); document.cookie = curCookie; }, _getCookie : function(name) { var dc = document.cookie; var prefix = name + "="; var begin = dc.indexOf("; " + prefix); if (begin == -1) { begin = dc.indexOf(prefix); if (begin != 0) return null; } else begin += 2; var end = document.cookie.indexOf(";", begin); if (end == -1) end = dc.length; return unescape(dc.substring(begin + prefix.length, end)); }, _resizeTo : function(inst, w, h, set_w) { var editorContainer = document.getElementById(inst.editorId + '_parent'); var tableElm = editorContainer.firstChild; var iframe = inst.iframeElement; if (w == null || w == "null") { set_w = false; w = 0; } if (h == null || h == "null") return; w = parseInt(w); h = parseInt(h); if (tinyMCE.isGecko) { w += 2; h += 2; } var dx = w - tableElm.clientWidth; var dy = h - tableElm.clientHeight; w = w < 1 ? 30 : w; h = h < 1 ? 30 : h; if (set_w) tableElm.style.width = w + "px"; if ( !tinyMCE.isMSIE || tinyMCE.isMSIE7 || tinyMCE.isOpera ) // WordPress: do this later to avoid creeping toolbar bug in MSIE6 tableElm.style.height = h + "px"; iw = iframe.clientWidth + dx; ih = iframe.clientHeight + dy; iw = iw < 1 ? 30 : iw; ih = ih < 1 ? 30 : ih; /* WordPress found that this led to a shrinking editor with every resize. (Gray background creeps in 1px at a time.) if (tinyMCE.isGecko) { iw -= 2; ih -= 2; } */ if (set_w) iframe.style.width = iw + "px"; iframe.style.height = ih + "px"; // Is it to small, make it bigger again if (set_w) { var tableBodyElm = tableElm.firstChild; var minIframeWidth = tableBodyElm.scrollWidth; if (inst.iframeElement.clientWidth < minIframeWidth) { dx = minIframeWidth - inst.iframeElement.clientWidth; inst.iframeElement.style.width = (iw + dx) + "px"; } } tableElm.style.height = h + "px"; // WordPress: see above // Remove pesky table controls inst.useCSS = false; }, /** * Handles resizing events. */ _resizeEventHandler : function(e) { var resizer = TinyMCE_AdvancedTheme._resizer; // Do nothing if (!resizer.resizing) return; e = typeof(e) == "undefined" ? window.event : e; var dx = e.screenX - resizer.downX; var dy = e.screenY - resizer.downY; var resizeBox = resizer.resizeBox; var editorId = resizer.editorId; switch (e.type) { case "mousemove": var w, h; w = resizer.width + dx; h = resizer.height + dy; w = w < 1 ? 1 : w; h = h < 1 ? 1 : h; if (resizer.horizontal) resizeBox.style.width = w + "px"; resizeBox.style.height = h + "px"; break; case "mouseup": TinyMCE_AdvancedTheme._setResizing(e, editorId, false); TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal); // Expire in a month if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { var expires = new Date(); expires.setTime(expires.getTime() + 3600000 * 24 * 30); // Set the cookies TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires); TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires); } break; } }, /** * Starts/stops the editor resizing. */ _setResizing : function(e, editor_id, state) { e = typeof(e) == "undefined" ? window.event : e; var resizer = TinyMCE_AdvancedTheme._resizer; var editorContainer = document.getElementById(editor_id + '_parent'); var editorArea = document.getElementById(editor_id + '_parent').firstChild; var resizeBox = document.getElementById(editor_id + '_resize_box'); var inst = tinyMCE.getInstanceById(editor_id); if (state) { // Place box over editor area var width = editorArea.clientWidth; var height = editorArea.clientHeight; resizeBox.style.width = width + "px"; resizeBox.style.height = height + "px"; resizer.iframeWidth = inst.iframeElement.clientWidth; resizer.iframeHeight = inst.iframeElement.clientHeight; // Hide editor and show resize box editorArea.style.display = "none"; resizeBox.style.display = "block"; // Add event handlers, only once if (!resizer.eventHandlers) { if (tinyMCE.isMSIE) tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); else tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler); resizer.eventHandlers = true; } resizer.resizing = true; resizer.downX = e.screenX; resizer.downY = e.screenY; resizer.width = parseInt(resizeBox.style.width); resizer.height = parseInt(resizeBox.style.height); resizer.editorId = editor_id; resizer.resizeBox = resizeBox; resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true); } else { resizer.resizing = false; resizeBox.style.display = "none"; editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table"; tinyMCE.execCommand('mceResetDesignMode'); } }, _getColorHTML : function(id, n, cm) { var i, h, cl; h = ''; cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(','); h += ''; for (i=0; i'; if ((i+1) % 8 == 0) h += ''; } h += '
    '; if (tinyMCE.getParam("theme_advanced_more_colors", true)) h += '' + tinyMCE.getLang('lang_more_colors') + ''; return h; }, _pickColor : function(id, cm) { var inputColor, inst = tinyMCE.selectedInstance; if (cm == 'forecolor' && inst) inputColor = inst.foreColor; if ((cm == 'backcolor' || cm == 'HiliteColor') && inst) inputColor = inst.backColor; tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) { tinyMCE.execInstanceCommand(id, cm, false, c); }}); }, _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) { tinyMCE.execCommand('mceBeginUndoLevel'); if (src == "") return; if (!tinyMCE.imgElement && tinyMCE.isSafari) { var html = ""; html += '' + alt + ''; tinyMCE.execCommand("mceInsertContent", false, html); } else { if (!tinyMCE.imgElement && tinyMCE.selectedInstance) { if (tinyMCE.isSafari) tinyMCE.execCommand("mceInsertContent", false, ''); else tinyMCE.selectedInstance.contentDocument.execCommand("insertimage", false, tinyMCE.uniqueURL); tinyMCE.imgElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "img", "src", tinyMCE.uniqueURL); } } if (tinyMCE.imgElement) { var needsRepaint = false; var msrc = src; src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, tinyMCE.imgElement);"); if (tinyMCE.getParam('convert_urls')) msrc = src; if (onmouseover && onmouseover != "") onmouseover = "this.src='" + eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, tinyMCE.imgElement);") + "';"; if (onmouseout && onmouseout != "") onmouseout = "this.src='" + eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, tinyMCE.imgElement);") + "';"; // Use alt as title if it's undefined if (typeof(title) == "undefined") title = alt; if (width != tinyMCE.imgElement.getAttribute("width") || height != tinyMCE.imgElement.getAttribute("height") || align != tinyMCE.imgElement.getAttribute("align")) needsRepaint = true; tinyMCE.setAttrib(tinyMCE.imgElement, 'src', src); tinyMCE.setAttrib(tinyMCE.imgElement, 'mce_src', msrc); tinyMCE.setAttrib(tinyMCE.imgElement, 'alt', alt); tinyMCE.setAttrib(tinyMCE.imgElement, 'title', title); tinyMCE.setAttrib(tinyMCE.imgElement, 'align', align); tinyMCE.setAttrib(tinyMCE.imgElement, 'border', border, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'hspace', hspace, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'vspace', vspace, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'width', width, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'height', height, true); tinyMCE.setAttrib(tinyMCE.imgElement, 'onmouseover', onmouseover); tinyMCE.setAttrib(tinyMCE.imgElement, 'onmouseout', onmouseout); // Fix for bug #989846 - Image resize bug if (width && width != "") tinyMCE.imgElement.style.pixelWidth = width; if (height && height != "") tinyMCE.imgElement.style.pixelHeight = height; if (needsRepaint) tinyMCE.selectedInstance.repaint(); } tinyMCE.execCommand('mceEndUndoLevel'); }, _insertLink : function(href, target, title, onclick, style_class) { tinyMCE.execCommand('mceBeginUndoLevel'); if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { var doc = tinyMCE.selectedInstance.getDoc(); var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a"); var newLink = false; if (!linkElement) { linkElement = doc.createElement("a"); newLink = true; } var mhref = href; var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); mhref = tinyMCE.getParam('convert_urls') ? href : mhref; tinyMCE.setAttrib(linkElement, 'href', thref); tinyMCE.setAttrib(linkElement, 'mce_href', mhref); tinyMCE.setAttrib(linkElement, 'target', target); tinyMCE.setAttrib(linkElement, 'title', title); tinyMCE.setAttrib(linkElement, 'onclick', onclick); tinyMCE.setAttrib(linkElement, 'class', style_class); if (newLink) { linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true)); tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement); } return; } if (!tinyMCE.linkElement && tinyMCE.selectedInstance) { if (tinyMCE.isSafari) { tinyMCE.execCommand("mceInsertContent", false, '' + tinyMCE.selectedInstance.selection.getSelectedHTML() + ''); } else tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL); tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); for (var i=0; i {$lang_insert_image_title}
     
    x
    Qwordpress/wp-includes/js/tinymce/themes/advanced/.svn/text-base/link.htm.svn-base {$lang_insert_link_title}
     
    Zwordpress/wp-includes/js/tinymce/themes/advanced/.svn/text-base/source_editor.htm.svn-base {$lang_theme_code_title}
    {$lang_theme_code_title}

    4wordpress/wp-includes/js/tinymce/themes/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes/js/tinymce/themes svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 advanced dir 3wordpress/wp-includes/js/tinymce/themes/.svn/format8 4wordpress/wp-includes/js/tinymce/tiny_mce_config.php initArray = { mode : "specific_textareas", editor_selector : "mceEditor", width : "100%", theme : "advanced", theme_advanced_buttons1 : "", theme_advanced_buttons2 : "", theme_advanced_buttons3 : "", language : "", theme_advanced_toolbar_location : "top", theme_advanced_toolbar_align : "left", theme_advanced_path_location : "bottom", theme_advanced_resizing : true, browsers : "", dialog_type : "modal", theme_advanced_resize_horizontal : false, convert_urls : false, relative_urls : false, remove_script_host : false, force_p_newlines : true, force_br_newlines : false, convert_newlines_to_brs : false, remove_linebreaks : false, fix_list_elements : true, gecko_spellcheck : true, entities : "38,amp,60,lt,62,gt", button_tile_map : true, content_css : "", valid_elements : "", save_callback : 'TinyMCE_wordpressPlugin.saveCallback', imp_version : "", plugins : "" }; tinyMCE.init(initArray); 2wordpress/wp-includes/js/tinymce/tiny_mce_gzip.php(} -1) { // Write main script and patch some things if ( $index == 0 ) { // Add core $content .= wp_compact_tinymce_js(getFileContents("tiny_mce" . $suffix . ".js")); $content .= 'TinyMCE.prototype.orgLoadScript = TinyMCE.prototype.loadScript;'; $content .= 'TinyMCE.prototype.loadScript = function() {};var realTinyMCE = tinyMCE;'; } else $content .= 'tinyMCE = realTinyMCE;'; // Patch loading functions //$content .= "tinyMCE_GZ.start();"; // Do init based on index $content .= "tinyMCE.init(tinyMCECompressed.configs[" . $index . "]);"; // Load external plugins if ( $index == 0 ) $content .= "tinyMCECompressed.loadPlugins();"; // Add core languages $lang_content = ''; foreach ($languages as $lang) $lang_content .= getFileContents("langs/" . $lang . ".js"); if ( empty($lang_content) ) $lang_content .= getFileContents("langs/en.js"); $content .= $lang_content; // Add themes foreach ($themes as $theme) { $content .= wp_compact_tinymce_js(getFileContents( "themes/" . $theme . "/editor_template" . $suffix . ".js")); $lang_content = ''; foreach ($languages as $lang) $lang_content .= getFileContents("themes/" . $theme . "/langs/" . $lang . ".js"); if ( empty($lang_content) ) $lang_content .= getFileContents("themes/" . $theme . "/langs/en.js"); $content .= $lang_content; } // Add plugins foreach ($plugins as $plugin) { $content .= getFileContents("plugins/" . $plugin . "/editor_plugin" . $suffix . ".js"); $lang_content = ''; foreach ($languages as $lang) $lang_content .= getFileContents("plugins/" . $plugin . "/langs/" . $lang . ".js"); if ( empty($lang_content) ) $lang_content .= getFileContents("plugins/" . $plugin . "/langs/en.js"); $content .= $lang_content; } // Add custom files foreach ($custom as $file) $content .= getFileContents($file); // Reset tinyMCE compressor engine $content .= "tinyMCE = tinyMCECompressed;"; // Restore loading functions //$content .= "tinyMCE_GZ.end();"; // Generate GZIP'd content if ($supportsGzip) { if ($compress) { header("Content-Encoding: " . $enc); $cacheData = gzencode($content, 9, FORCE_GZIP); } else $cacheData = $content; // Write gz file if ($diskCache && $cacheKey != "") putFileContents($cacheFile, $cacheData); // Stream to client echo $cacheData; } else { // Stream uncompressed content echo $content; } die; } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ function getParam($name, $def = false) { if (!isset($_GET[$name])) return $def; return preg_replace("/[^0-9a-z\-_,]+/i", "", $_GET[$name]); // Remove anything but 0-9,a-z,-_ } function getFileContents($path) { $path = realpath($path); if (!$path || !@is_file($path)) return ""; if (function_exists("file_get_contents")) return @file_get_contents($path); $content = ""; $fp = @fopen($path, "r"); if (!$fp) return ""; while (!feof($fp)) $content .= fgets($fp); fclose($fp); return $content; } function putFileContents($path, $content) { if (function_exists("file_put_contents")) return @file_put_contents($path, $content); $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); } } // WP specific function wp_compact_tinymce_js($text) { // This function was custom-made for TinyMCE 2.0, not expected to work with any other JS. // Strip comments $text = preg_replace("!(^|\s+)//.*$!m", '', $text); $text = preg_replace("!/\*.*?\*/!s", '', $text); // Strip leading tabs, carriage returns and unnecessary line breaks. $text = preg_replace("!^\t+!m", '', $text); $text = str_replace("\r", '', $text); $text = preg_replace("!(^|{|}|;|:|\))\n!m", '\\1', $text); return "$text\n"; } ?> function TinyMCECompressed() { this.configs = new Array(); this.loadedFiles = new Array(); this.externalPlugins = new Array(); this.loadAdded = false; this.isLoaded = false; } TinyMCECompressed.prototype.init = function(settings) { var elements = document.getElementsByTagName('script'); var scriptURL = ""; for (var i=0; i'); if (!this.loadAdded) { tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCECompressed.prototype.onLoad); tinyMCE.addEvent(window, "load", TinyMCECompressed.prototype.onLoad); this.loadAdded = true; } } TinyMCECompressed.prototype.onLoad = function() { if (tinyMCE.isLoaded) return true; tinyMCE = realTinyMCE; TinyMCE_Engine.prototype.onLoad(); tinyMCE._addUnloadEvents(); tinyMCE.isLoaded = true; } TinyMCECompressed.prototype.addEvent = function(o, n, h) { if (o.attachEvent) o.attachEvent("on" + n, h); else o.addEventListener(n, h, false); } TinyMCECompressed.prototype.getOnce = function(str) { var ar = str.replace(/\s+/g, '').split(','); for (var i=0; i'); this._def("font_size_classes", ''); this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true); this._def("event_elements", 'a,img', true); this._def("convert_urls", true); this._def("table_inline_editing", false); this._def("object_resizing", true); this._def("custom_shortcuts", true); this._def("convert_on_click", false); this._def("content_css", ''); this._def("fix_list_elements", true); this._def("fix_table_elements", false); this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml'); this._def("hidden_tab_class", ''); this._def("display_tab_class", ''); this._def("gecko_spellcheck", false); this._def("hide_selects_on_submit", true); // Force strict loading mode to false on non Gecko browsers if (this.isMSIE && !this.isOpera) this.settings.strict_loading_mode = false; // Browser check IE if (this.isMSIE && this.settings['browsers'].indexOf('msie') == -1) return; // Browser check Gecko if (this.isGecko && this.settings['browsers'].indexOf('gecko') == -1) return; // Browser check Safari if (this.isSafari && this.settings['browsers'].indexOf('safari') == -1) return; // Browser check Opera if (this.isOpera && this.settings['browsers'].indexOf('opera') == -1) return; // If not super absolute make it so baseHREF = tinyMCE.settings['document_base_url']; var h = document.location.href; var p = h.indexOf('://'); if (p > 0 && document.location.protocol != "file:") { p = h.indexOf('/', p + 3); h = h.substring(0, p); if (baseHREF.indexOf('://') == -1) baseHREF = h + baseHREF; tinyMCE.settings['document_base_url'] = baseHREF; tinyMCE.settings['document_base_prefix'] = h; } // Trim away query part if (baseHREF.indexOf('?') != -1) baseHREF = baseHREF.substring(0, baseHREF.indexOf('?')); this.settings['base_href'] = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/"; theme = this.settings['theme']; this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment'; this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment'; this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP'; this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i"); this.posKeyCodes = new Array(13,45,36,35,33,34,37,38,39,40); this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL this.uniqueTag = ''; this.callbacks = new Array('onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance'); // Theme url this.settings['theme_href'] = tinyMCE.baseURL + "/themes/" + theme; if (!tinyMCE.isIE || tinyMCE.isOpera) this.settings['force_br_newlines'] = false; if (tinyMCE.getParam("popups_css", false)) { var cssPath = tinyMCE.getParam("popups_css", ""); // Is relative if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') this.settings['popups_css'] = this.documentBasePath + "/" + cssPath; else this.settings['popups_css'] = cssPath; } else this.settings['popups_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css"; if (tinyMCE.getParam("editor_css", false)) { var cssPath = tinyMCE.getParam("editor_css", ""); // Is relative if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') this.settings['editor_css'] = this.documentBasePath + "/" + cssPath; else this.settings['editor_css'] = cssPath; } else { if (this.settings.editor_css != '') this.settings['editor_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css"; } if (tinyMCE.settings['debug']) { var msg = "Debug: \n"; msg += "baseURL: " + this.baseURL + "\n"; msg += "documentBasePath: " + this.documentBasePath + "\n"; msg += "content_css: " + this.settings['content_css'] + "\n"; msg += "popups_css: " + this.settings['popups_css'] + "\n"; msg += "editor_css: " + this.settings['editor_css'] + "\n"; alert(msg); } // Only do this once if (this.configs.length == 0) { if (typeof(TinyMCECompressed) == "undefined") { tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad); if (tinyMCE.isRealIE) { if (document.body) tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad); else tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad); } tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad); tinyMCE._addUnloadEvents(); } } this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings['theme'] + '/editor_template' + tinyMCE.srcMode + '.js'); this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings['language'] + '.js'); this.loadCSS(this.settings['editor_css']); // Add plugins var p = tinyMCE.getParam('plugins', '', true, ','); if (p.length > 0) { for (var i=0; i&"\']', 'g'); this.xmlEncodeRe = new RegExp('[<>&"]', 'g'); // this.xmlEncodeEnts = {'&':'&','"':'"',"'":''','<':'<','>':'>'}; }, _addUnloadEvents : function() { if (tinyMCE.isIE) { if (tinyMCE.settings['add_unload_trigger']) { tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler); tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler); } } else { if (tinyMCE.settings['add_unload_trigger']) tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);}); } }, _def : function(key, def_val, t) { var v = tinyMCE.getParam(key, def_val); v = t ? v.replace(/\s+/g, "") : v; this.settings[key] = v; }, hasPlugin : function(n) { return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; }, addPlugin : function(n, p) { var op = this.plugins[n]; // Use the previous plugin object base URL used when loading external plugins p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n; this.plugins[n] = p; this.loadNextScript(); }, setPluginBaseURL : function(n, u) { var op = this.plugins[n]; if (op) op.baseURL = u; else this.plugins[n] = {baseURL : u}; }, loadPlugin : function(n, u) { u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u; u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u; this.plugins[n] = {baseURL : u}; this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js"); }, hasTheme : function(n) { return typeof(this.themes[n]) != "undefined" && this.themes[n] != null; }, addTheme : function(n, t) { this.themes[n] = t; this.loadNextScript(); }, addMenu : function(n, m) { this.menus[n] = m; }, hasMenu : function(n) { return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null; }, loadScript : function(url) { var i; for (i=0; i'); this.loadedFiles[this.loadedFiles.length] = url; }, loadNextScript : function() { var d = document, se; if (!tinyMCE.settings.strict_loading_mode) return; if (this.loadingIndex < this.pendingFiles.length) { se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script'); se.setAttribute('language', 'javascript'); se.setAttribute('type', 'text/javascript'); se.setAttribute('src', this.pendingFiles[this.loadingIndex++]); d.getElementsByTagName("head")[0].appendChild(se); } else this.loadingIndex = -1; // Done with loading }, loadCSS : function(url) { var ar = url.replace(/\s+/, '').split(','); var lflen = 0, csslen = 0; var skip = false; var x = 0, i = 0, nl, le; for (x = 0,csslen = ar.length; x 0) { /* Make sure it doesn't exist. */ for (i=0, lflen=this.loadedFiles.length; i'); this.loadedFiles[this.loadedFiles.length] = ar[x]; } } } }, importCSS : function(doc, css) { var css_ary = css.replace(/\s+/, '').split(','); var csslen, elm, headArr, x, css_file; for (x = 0, csslen = css_ary.length; x 0) { // Is relative, make absolute if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/') css_file = this.documentBasePath + "/" + css_file; if (typeof(doc.createStyleSheet) == "undefined") { elm = doc.createElement("link"); elm.rel = "stylesheet"; elm.href = css_file; if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0) headArr[0].appendChild(elm); } else doc.createStyleSheet(css_file); } } }, confirmAdd : function(e, settings) { var elm = tinyMCE.isIE ? event.srcElement : e.target; var elementId = elm.name ? elm.name : elm.id; tinyMCE.settings = settings; if (tinyMCE.settings['convert_on_click'] || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang['lang_edit_confirm']))) tinyMCE.addMCEControl(elm, elementId); elm.setAttribute('mce_noask', 'true'); }, updateContent : function(form_element_name) { // Find MCE instance linked to given form element and copy it's value var formElement = document.getElementById(form_element_name); for (var n in tinyMCE.instances) { var inst = tinyMCE.instances[n]; if (!tinyMCE.isInstance(inst)) continue; inst.switchSettings(); if (inst.formElement == formElement) { var doc = inst.getDoc(); tinyMCE._setHTML(doc, inst.formElement.value); if (!tinyMCE.isIE) doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid); } } }, addMCEControl : function(replace_element, form_element_name, target_document) { var id = "mce_editor_" + tinyMCE.idCounter++; var inst = new TinyMCE_Control(tinyMCE.settings); inst.editorId = id; this.instances[id] = inst; inst._onAdd(replace_element, form_element_name, target_document); }, removeInstance : function(ti) { var t = [], n, i; // Remove from instances for (n in tinyMCE.instances) { i = tinyMCE.instances[n]; if (tinyMCE.isInstance(i) && ti != i) t[n] = i; } tinyMCE.instances = t; // Remove from global undo/redo n = []; t = tinyMCE.undoLevels; for (i=0; i 0) { tinyMCE.nextUndoRedoAction = 'Undo'; inst = this.undoLevels[--this.undoIndex]; inst.select(); if (!tinyMCE.nextUndoRedoInstanceId) inst.execCommand('Undo'); } } else inst.execCommand('Undo'); return true; case "Redo": if (this.getParam('custom_undo_redo_global')) { if (this.undoIndex <= this.undoLevels.length - 1) { tinyMCE.nextUndoRedoAction = 'Redo'; inst = this.undoLevels[this.undoIndex++]; inst.select(); if (!tinyMCE.nextUndoRedoInstanceId) inst.execCommand('Redo'); } } else inst.execCommand('Redo'); return true; case 'mceFocus': var inst = tinyMCE.getInstanceById(value); if (inst) inst.getWin().focus(); return; case "mceAddControl": case "mceAddEditor": tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); return; case "mceAddFrameControl": tinyMCE.addMCEControl(tinyMCE._getElementById(value['element'], value['document']), value['element'], value['document']); return; case "mceRemoveControl": case "mceRemoveEditor": tinyMCE.removeMCEControl(value); return; case "mceToggleEditor": var inst = tinyMCE.getInstanceById(value), pe, te; if (inst) { pe = document.getElementById(inst.editorId + '_parent'); te = inst.oldTargetElement; if (typeof(inst.enabled) == 'undefined') inst.enabled = true; inst.enabled = !inst.enabled; if (!inst.enabled) { pe.style.display = 'none'; te.value = inst.getHTML(); te.style.display = inst.oldTargetDisplay; tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst); } else { pe.style.display = 'block'; te.style.display = 'none'; inst.setHTML(te.value); inst.useCSS = false; tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst); } } else tinyMCE.addMCEControl(tinyMCE._getElementById(value), value); return; case "mceResetDesignMode": // Resets the designmode state of the editors in Gecko if (!tinyMCE.isIE) { for (var n in tinyMCE.instances) { if (!tinyMCE.isInstance(tinyMCE.instances[n])) continue; try { tinyMCE.instances[n].getDoc().designMode = "on"; } catch (e) { // Ignore any errors } } } return; } if (inst) { inst.execCommand(command, user_interface, value); } else if (tinyMCE.settings['focus_alert']) alert(tinyMCELang['lang_focus_alert']); }, _createIFrame : function(replace_element, doc, win) { var iframe, id = replace_element.getAttribute("id"); var aw, ah; if (typeof(doc) == "undefined") doc = document; if (typeof(win) == "undefined") win = window; iframe = doc.createElement("iframe"); aw = "" + tinyMCE.settings['area_width']; ah = "" + tinyMCE.settings['area_height']; if (aw.indexOf('%') == -1) { aw = parseInt(aw); aw = (isNaN(aw) || aw < 0) ? 300 : aw; aw = aw + "px"; } if (ah.indexOf('%') == -1) { ah = parseInt(ah); ah = (isNaN(ah) || ah < 0) ? 240 : ah; ah = ah + "px"; } iframe.setAttribute("id", id); iframe.setAttribute("name", id); iframe.setAttribute("class", "mceEditorIframe"); iframe.setAttribute("border", "0"); iframe.setAttribute("frameBorder", "0"); iframe.setAttribute("marginWidth", "0"); iframe.setAttribute("marginHeight", "0"); iframe.setAttribute("leftMargin", "0"); iframe.setAttribute("topMargin", "0"); iframe.setAttribute("width", aw); iframe.setAttribute("height", ah); iframe.setAttribute("allowtransparency", "true"); iframe.className = 'mceEditorIframe'; if (tinyMCE.settings["auto_resize"]) iframe.setAttribute("scrolling", "no"); // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs if (tinyMCE.isRealIE) iframe.setAttribute("src", this.settings['default_document']); iframe.style.width = aw; iframe.style.height = ah; // Ugly hack for Gecko problem in strict mode if (tinyMCE.settings.strict_loading_mode) iframe.style.marginBottom = '-5px'; // MSIE 5.0 issue if (tinyMCE.isRealIE) replace_element.outerHTML = iframe.outerHTML; else replace_element.parentNode.replaceChild(iframe, replace_element); if (tinyMCE.isRealIE) return win.frames[id]; else return iframe; }, setupContent : function(editor_id) { var inst = tinyMCE.instances[editor_id], i; var doc = inst.getDoc(); var head = doc.getElementsByTagName('head').item(0); var content = inst.startContent; // HTML values get XML encoded in strict mode if (tinyMCE.settings.strict_loading_mode) { content = content.replace(/</g, '<'); content = content.replace(/>/g, '>'); content = content.replace(/"/g, '"'); content = content.replace(/&/g, '&'); } tinyMCE.selectedInstance = inst; inst.switchSettings(); // Not loaded correctly hit it again, Mozilla bug #997860 if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") { // This part will remove the designMode status // Failes first time in Firefox 1.5b2 on Mac try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {} window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000); return; } if (!head) { window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10); return; } // Import theme specific content CSS the user specific tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings['theme'] + "/css/editor_content.css"); tinyMCE.importCSS(inst.getDoc(), inst.settings['content_css']); tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst); // Setup keyboard shortcuts if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) { inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo'); inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo'); } // BlockFormat shortcuts keys for (i=1; i<=6; i++) inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, ''); inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '

    '); inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '

    '); inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '
    '); // Add default shortcuts for gecko if (tinyMCE.isGecko) { inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold'); inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic'); inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline'); } // Setup span styles if (tinyMCE.getParam("convert_fonts_to_spans")) inst.getBody().setAttribute('id', 'mceSpanFonts'); if (tinyMCE.settings['nowrap']) doc.body.style.whiteSpace = "nowrap"; doc.body.dir = this.settings['directionality']; doc.editorId = editor_id; // Add on document element in Mozilla if (!tinyMCE.isIE) doc.documentElement.editorId = editor_id; inst.setBaseHREF(tinyMCE.settings['base_href']); // Replace new line characters to BRs if (tinyMCE.settings['convert_newlines_to_brs']) { content = tinyMCE.regexpReplace(content, "\r\n", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\r", "
    ", "gi"); content = tinyMCE.regexpReplace(content, "\n", "
    ", "gi"); } // Open closed anchors // content = content.replace(new RegExp('', 'gi'), ''); // Call custom cleanup code content = tinyMCE.storeAwayURLs(content); content = tinyMCE._customCleanup(inst, "insert_to_editor", content); if (tinyMCE.isIE) { // Ugly!!! window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500); if (tinyMCE.settings["force_br_newlines"]) doc.styleSheets[0].addRule("p", "margin: 0;"); var body = inst.getBody(); body.editorId = editor_id; } content = tinyMCE.cleanupHTMLCode(content); // Fix for bug #958637 if (!tinyMCE.isIE) { var contentElement = inst.getDoc().createElement("body"); var doc = inst.getDoc(); contentElement.innerHTML = content; // Remove weridness! if (tinyMCE.isGecko && tinyMCE.settings['remove_lt_gt']) content = content.replace(new RegExp('<>', 'g'), ""); if (tinyMCE.settings['cleanup_on_startup']) tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement)); else tinyMCE.setInnerHTML(inst.getBody(), content); tinyMCE.convertAllRelativeURLs(inst.getBody()); } else { if (tinyMCE.settings['cleanup_on_startup']) { tinyMCE._setHTML(inst.getDoc(), content); // Produces permission denied error in MSIE 5.5 eval('try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}'); } else tinyMCE._setHTML(inst.getDoc(), content); } // Fix for bug #957681 //inst.getDoc().designMode = inst.getDoc().designMode; tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual'], inst); tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc()); // Re-add design mode on mozilla if (!tinyMCE.isIE) tinyMCE.addEventHandlers(inst); // Add blur handler if (tinyMCE.isIE) { tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch); tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953 // Workaround for drag drop/copy paste base href bug if (!tinyMCE.isOpera) { tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove); tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch); tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch); } } // Trigger node change, this call locks buttons for tables and so forth inst.select(); tinyMCE.selectedElement = inst.contentWindow.document.body; // Call custom DOM cleanup tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody()); tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody()); tinyMCE._setEventsEnabled(inst.getBody(), false); tinyMCE.cleanupAnchors(inst.getDoc()); if (tinyMCE.getParam("convert_fonts_to_spans")) tinyMCE.convertSpansToFonts(inst.getDoc()); inst.startContent = tinyMCE.trim(inst.getBody().innerHTML); inst.undoRedo.add({ content : inst.startContent }); // Cleanup any mess left from storyAwayURLs if (tinyMCE.isGecko) { // Remove mce_src from textnodes and comments tinyMCE.selectNodes(inst.getBody(), function(n) { if (n.nodeType == 3 || n.nodeType == 8) n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); return false; }); } // Remove Gecko spellchecking if (tinyMCE.isGecko) inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck"); // Cleanup any mess left from storyAwayURLs tinyMCE._removeInternal(inst.getBody()); inst.select(); tinyMCE.triggerNodeChange(false, true); }, storeAwayURLs : function(s) { // Remove all mce_src, mce_href and replace them with new ones // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); if (!s.match(/(mce_src|mce_href)/gi, s)) { s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"'); s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"'); } return s; }, _removeInternal : function(n) { if (tinyMCE.isGecko) { // Remove mce_src from textnodes and comments tinyMCE.selectNodes(n, function(n) { if (n.nodeType == 3 || n.nodeType == 8) n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), ""); return false; }); } }, removeTinyMCEFormElements : function(form_obj) { var i, elementId; // Skip form element removal if (!tinyMCE.getParam('hide_selects_on_submit')) return; // Check if form is valid if (typeof(form_obj) == "undefined" || form_obj == null) return; // If not a form, find the form if (form_obj.nodeName != "FORM") { if (form_obj.form) form_obj = form_obj.form; else form_obj = tinyMCE.getParentElement(form_obj, "form"); } // Still nothing if (form_obj == null) return; // Disable all UI form elements that TinyMCE created for (i=0; i"); rng.collapse(false); rng.select(); tinyMCE.execCommand("mceAddUndoLevel"); tinyMCE.triggerNodeChange(false); return false; } } // Backspace or delete if (e.keyCode == 8 || e.keyCode == 46) { tinyMCE.selectedElement = e.target; tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a"); tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img"); tinyMCE.triggerNodeChange(false); } return false; break; case "keyup": case "keydown": tinyMCE.hideMenus(); tinyMCE.hasMouseMoved = false; if (inst && inst.handleShortcut(e)) return false; if (e.target.editorId) tinyMCE.instances[e.target.editorId].select(); if (tinyMCE.selectedInstance) tinyMCE.selectedInstance.switchSettings(); var inst = tinyMCE.selectedInstance; // Handle backspace if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) { // Insert P element instead of BR if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) { // Cancel event tinyMCE.execCommand("mceAddUndoLevel"); e.preventDefault(); return false; } } tinyMCE.selectedElement = null; tinyMCE.selectedNode = null; var elm = tinyMCE.selectedInstance.getFocusElement(); tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a"); tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img"); tinyMCE.selectedElement = elm; // Update visualaids on tabs if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9) tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings['visual'], tinyMCE.selectedInstance); // Fix empty elements on return/enter, check where enter occured if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13) tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement(); // Fix empty elements on return/enter if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) { var elm = tinyMCE.enterKeyElement; if (elm) { var re = new RegExp('^HR|IMG|BR$','g'); // Skip these var dre = new RegExp('^H[1-6]$','g'); // Add double on these if (!elm.hasChildNodes() && !re.test(elm.nodeName)) { if (dre.test(elm.nodeName)) elm.innerHTML = "  "; else elm.innerHTML = " "; } } } // Check if it's a position key var keys = tinyMCE.posKeyCodes; var posKey = false; for (var i=0; i'; h += ''; h += ''; } else { // Normal button h += ''; h += ''; h += ''; } return h; }, getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) { var h = '', m, x; mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');'; cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\''; if (typeof(ui) != "undefined" && ui != null) cmd += ',' + ui; if (typeof(val) != "undefined" && val != null) cmd += ",'" + val + "'"; cmd += ');'; // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) { x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20); if (tinyMCE.isRealIE) h += ''; else h += ''; h += ''; h += ''; h += ''; h += ''; } else { if (tinyMCE.isRealIE) h += ''; else h += ''; h += ''; h += ''; h += ''; h += ''; } return h; }, _menuButtonEvent : function(e, o) { if (o.className == 'mceMenuButtonFocus') return; if (e == 'over') o.className = o.className + ' mceMenuHover'; else o.className = o.className.replace(/\s.*$/, ''); }, addButtonMap : function(m) { var i, a = m.replace(/\s+/, '').split(','); for (i=0; i 0); if (tinyMCE.settings['custom_undo_redo']) { undoIndex = inst.undoRedo.undoIndex; undoLevels = inst.undoRedo.undoLevels.length; } tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content); } if (this.selectedInstance && (typeof(focus) == "undefined" || focus)) this.selectedInstance.contentWindow.focus(); }, _customCleanup : function(inst, type, content) { var pl, po, i; // Call custom cleanup var customCleanup = tinyMCE.settings['cleanup_callback']; if (customCleanup != "" && eval("typeof(" + customCleanup + ")") != "undefined") content = eval(customCleanup + "(type, content, inst);"); // Trigger theme cleanup po = tinyMCE.themes[tinyMCE.settings['theme']]; if (po && po.cleanup) content = po.cleanup(type, content, inst); // Trigger plugin cleanups pl = inst.plugins; for (i=0; i 0) className += " "; className += classNames[i]; } return className; }, handleVisualAid : function(el, deep, state, inst, skip_dispatch) { if (!el) return; if (!skip_dispatch) tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst); var tableElement = null; switch (el.nodeName) { case "TABLE": var oldW = el.style.width; var oldH = el.style.height; var bo = tinyMCE.getAttrib(el, "border"); bo = bo == "" || bo == "0" ? true : false; tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo)); el.style.width = oldW; el.style.height = oldH; for (var y=0; y<\/o:p>", "
    "); html = tinyMCE.regexpReplace(html, " <\/o:p>", ""); html = tinyMCE.regexpReplace(html, "", ""); html = tinyMCE.regexpReplace(html, "

    <\/p>", ""); html = tinyMCE.regexpReplace(html, "

    <\/p>\r\n

    <\/p>", ""); html = tinyMCE.regexpReplace(html, "

     <\/p>", "
    "); html = tinyMCE.regexpReplace(html, "

    \s*(

    \s*)?", "

    "); html = tinyMCE.regexpReplace(html, "<\/p>\s*(<\/p>\s*)?", "

    "); }*/ // Always set the htmlText output tinyMCE.setInnerHTML(doc.body, html); } tinyMCE.cleanupAnchors(doc); if (tinyMCE.getParam("convert_fonts_to_spans")) tinyMCE.convertSpansToFonts(doc); }, getEditorId : function(form_element) { var inst = this.getInstanceById(form_element); if (!inst) return null; return inst.editorId; }, getInstanceById : function(editor_id) { var inst = this.instances[editor_id]; if (!inst) { for (var n in tinyMCE.instances) { var instance = tinyMCE.instances[n]; if (!tinyMCE.isInstance(instance)) continue; if (instance.formTargetElementId == editor_id) { inst = instance; break; } } } return inst; }, queryInstanceCommandValue : function(editor_id, command) { var inst = tinyMCE.getInstanceById(editor_id); if (inst) return inst.queryCommandValue(command); return false; }, queryInstanceCommandState : function(editor_id, command) { var inst = tinyMCE.getInstanceById(editor_id); if (inst) return inst.queryCommandState(command); return null; }, setWindowArg : function(n, v) { this.windowArgs[n] = v; }, getWindowArg : function(n, d) { return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n]; }, getCSSClasses : function(editor_id, doc) { var inst = tinyMCE.getInstanceById(editor_id); // Is cached, use that if (inst && inst.cssClasses.length > 0) return inst.cssClasses; if (typeof(editor_id) == "undefined" && typeof(doc) == "undefined") { var instance; for (var instanceName in tinyMCE.instances) { instance = tinyMCE.instances[instanceName]; if (!tinyMCE.isInstance(instance)) continue; break; } doc = instance.getDoc(); } if (typeof(doc) == "undefined") { var instance = tinyMCE.getInstanceById(editor_id); doc = instance.getDoc(); } if (doc) { var styles = doc.styleSheets; if (styles && styles.length > 0) { for (var x=0; x' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + '
    '; return tinyMCE.replaceVar(v, "pluginurl", o.baseURL); } } o = tinyMCE.themes[tinyMCE.settings['theme']]; if (o.getControlHTML && (v = o.getControlHTML(c)) != '') { if (rtl) return '' + v + ''; return v; } return ''; }, evalFunc : function(f, idx, a, o) { o = !o ? window : o; f = typeof(f) == 'function' ? f : o[f]; return f.apply(o, Array.prototype.slice.call(a, idx)); }, dispatchCallback : function(i, p, n) { return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments); }, executeCallback : function(i, p, n) { return this.callFunc(i, p, n, 1, this.executeCallback.arguments); }, execCommandCallback : function(i, p, n) { return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments); }, callFunc : function(ins, p, n, m, a) { var l, i, on, o, s, v; s = m == 2; l = tinyMCE.getParam(p, ''); if (l != '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0) return true; if (ins != null) { for (i=0, l = ins.plugins; i 0) return true; } } l = tinyMCE.themes; for (on in l) { o = l[on]; if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0) return true; } return false; }, xmlEncode : function(s, skip_apos) { return s ? ('' + s).replace(!skip_apos ? this.xmlEncodeAposRe : this.xmlEncodeRe, function (c, b) { switch (c) { case '&': return '&'; case '"': return '"'; case '\'': return '''; // ' is not working in MSIE case '<': return '<'; case '>': return '>'; } return c; }) : s; }, extend : function(p, np) { var o = {}; o.parent = p; for (n in p) o[n] = p[n]; for (n in np) o[n] = np[n]; return o; }, hideMenus : function() { var e = tinyMCE.lastSelectedMenuBtn; if (tinyMCE.lastMenu) { tinyMCE.lastMenu.hide(); tinyMCE.lastMenu = null; } if (e) { tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass); tinyMCE.lastSelectedMenuBtn = null; } } }; // Global instances var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors var tinyMCE = new TinyMCE_Engine(); var tinyMCELang = {}; /* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */ function TinyMCE_Control(settings) { var t, i, to, fu, p, x, fn, fu, pn, s = settings; this.undoRedoLevel = true; this.isTinyMCE_Control = true; // Default settings this.settings = s; this.settings['theme'] = tinyMCE.getParam("theme", "default"); this.settings['width'] = tinyMCE.getParam("width", -1); this.settings['height'] = tinyMCE.getParam("height", -1); this.selection = new TinyMCE_Selection(this); this.undoRedo = new TinyMCE_UndoRedo(this); this.cleanup = new TinyMCE_Cleanup(); this.shortcuts = new Array(); this.hasMouseMoved = false; this.foreColor = this.backColor = "#999999"; this.data = {}; this.cssClasses = []; this.cleanup.init({ valid_elements : s.valid_elements, extended_valid_elements : s.extended_valid_elements, valid_child_elements : s.valid_child_elements, entities : s.entities, entity_encoding : s.entity_encoding, debug : s.cleanup_debug, indent : s.apply_source_formatting, invalid_elements : s.invalid_elements, verify_html : s.verify_html, fix_content_duplication : s.fix_content_duplication, convert_fonts_to_spans : s.convert_fonts_to_spans }); // Wrap old theme t = this.settings['theme']; if (!tinyMCE.hasTheme(t)) { fn = tinyMCE.callbacks; to = {}; for (i=0; i 0) { for (i=0; i 1 && tinyMCE.currentConfig != this.settings['index']) { tinyMCE.settings = this.settings; tinyMCE.currentConfig = this.settings['index']; } }, select : function() { var oldInst = tinyMCE.selectedInstance; if (oldInst != this) { if (oldInst) oldInst.execCommand('mceEndTyping'); tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst); tinyMCE.selectedInstance = this; } }, getBody : function() { return this.contentBody ? this.contentBody : this.getDoc().body; }, getDoc : function() { // return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ? return this.contentWindow.document; }, getWin : function() { return this.contentWindow; }, getContainerWin : function() { return this.containerWindow ? this.containerWindow : window; }, getViewPort : function() { return tinyMCE.getViewPort(this.getWin()); }, getParentNode : function(n, f) { return tinyMCE.getParentNode(n, f, this.getBody()); }, getParentElement : function(n, na, f) { return tinyMCE.getParentElement(n, na, f, this.getBody()); }, getParentBlockElement : function(n) { return tinyMCE.getParentBlockElement(n, this.getBody()); }, resizeToContent : function() { var d = this.getDoc(), b = d.body, de = d.documentElement; this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px'; }, addShortcut : function(m, k, d, cmd, ui, va) { var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts; if (!tinyMCE.getParam('custom_shortcuts')) return false; m = m.toLowerCase(); k = ie && !n ? k.toUpperCase() : k; c = n ? null : k.charCodeAt(0); d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d; sc = { alt : m.indexOf('alt') != -1, ctrl : m.indexOf('ctrl') != -1, shift : m.indexOf('shift') != -1, charCode : c, keyCode : n ? k : (ie ? c : null), desc : d, cmd : cmd, ui : ui, val : va }; for (i=0; i 0) rng.pasteHTML('
    ' + rng.htmlText + "
    "); tinyMCE.triggerNodeChange(); return; } } } switch (command) { case "mceRepaint": this.repaint(); return true; case "unlink": // Unlink if caret is inside link if (tinyMCE.isGecko && this.getSel().isCollapsed) { focusElm = tinyMCE.getParentElement(focusElm, 'A'); if (focusElm) this.selection.selectNode(focusElm, false); } this.getDoc().execCommand(command, user_interface, value); tinyMCE.isGecko && this.getSel().collapseToEnd(); tinyMCE.triggerNodeChange(); return true; case "InsertUnorderedList": case "InsertOrderedList": this.getDoc().execCommand(command, user_interface, value); tinyMCE.triggerNodeChange(); break; case "Strikethrough": this.getDoc().execCommand(command, user_interface, value); tinyMCE.triggerNodeChange(); break; case "mceSelectNode": this.selection.selectNode(value); tinyMCE.triggerNodeChange(); tinyMCE.selectedNode = value; break; case "FormatBlock": if (value == null || value == "") { var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp"); if (elm) this.execCommand("mceRemoveNode", false, elm); } else { if (!this.cleanup.isValid(value)) return true; if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value)) value = value.replace(/[^a-z]/gi, ''); if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) { var b = this.selection.getBookmark(); this.getDoc().execCommand("FormatBlock", false, '

    '); tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value); this.selection.moveToBookmark(b); } else this.getDoc().execCommand("FormatBlock", false, value); } tinyMCE.triggerNodeChange(); break; case "mceRemoveNode": if (!value) value = tinyMCE.getParentElement(this.getFocusElement()); if (tinyMCE.isIE) { value.outerHTML = value.innerHTML; } else { var rng = value.ownerDocument.createRange(); rng.setStartBefore(value); rng.setEndAfter(value); rng.deleteContents(); rng.insertNode(rng.createContextualFragment(value.innerHTML)); } tinyMCE.triggerNodeChange(); break; case "mceSelectNodeDepth": var parentNode = this.getFocusElement(); for (var i=0; parentNode; i++) { if (parentNode.nodeName.toLowerCase() == "body") break; if (parentNode.nodeName.toLowerCase() == "#text") { i--; parentNode = parentNode.parentNode; continue; } if (i == value) { this.selection.selectNode(parentNode, false); tinyMCE.triggerNodeChange(); tinyMCE.selectedNode = parentNode; return; } parentNode = parentNode.parentNode; } break; case "mceSetStyleInfo": case "SetStyleInfo": var rng = this.getRng(); var sel = this.getSel(); var scmd = value['command']; var sname = value['name']; var svalue = value['value'] == null ? '' : value['value']; //var svalue = value['value'] == null ? '' : value['value']; var wrapper = value['wrapper'] ? value['wrapper'] : "span"; var parentElm = null; var invalidRe = new RegExp("^BODY|HTML$", "g"); var invalidParentsRe = tinyMCE.settings['merge_styles_invalid_parents'] != '' ? new RegExp(tinyMCE.settings['merge_styles_invalid_parents'], "gi") : null; // Whole element selected check if (tinyMCE.isIE) { // Control range if (rng.item) parentElm = rng.item(0); else { var pelm = rng.parentElement(); var prng = doc.selection.createRange(); prng.moveToElementText(pelm); if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) { if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName)) parentElm = pelm; } } } else { var felm = this.getFocusElement(); if (sel.isCollapsed || (new RegExp('td|tr|tbody|table', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode)) parentElm = felm; } // Whole element selected if (parentElm && !invalidRe.test(parentElm.nodeName)) { if (scmd == "setstyle") tinyMCE.setStyleAttrib(parentElm, sname, svalue); if (scmd == "setattrib") tinyMCE.setAttrib(parentElm, sname, svalue); if (scmd == "removeformat") { parentElm.style.cssText = ''; tinyMCE.setAttrib(parentElm, 'class', ''); } // Remove style/attribs from all children var ch = tinyMCE.getNodeTree(parentElm, new Array(), 1); for (var z=0; z=0; i--) { var elm = nodes[i]; var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true"; elm.removeAttribute("mce_new"); // Is only child a element if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) { //tinyMCE.debug("merge1" + isNew); this._mergeElements(scmd, elm, elm.childNodes[0], isNew); continue; } // Is I the only child if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) { //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName); if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName)) this._mergeElements(scmd, elm.parentNode, elm, false); } } // Remove empty wrappers var nodes = doc.getElementsByTagName(wrapper); for (var i=nodes.length-1; i>=0; i--) { var elm = nodes[i]; var isEmpty = true; // Check if it has any attribs var tmp = doc.createElement("body"); tmp.appendChild(elm.cloneNode(false)); // Is empty span, remove it tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), ''); //tinyMCE.debug(tmp.innerHTML); if (new RegExp('', 'gi').test(tmp.innerHTML)) { for (var x=0; x 0) { value = tinyMCE.replaceVar(value, "selection", selectedText); tinyMCE.execCommand('mceInsertContent', false, value); } tinyMCE.triggerNodeChange(); break; case "mceSetAttribute": if (typeof(value) == 'object') { var targetElms = (typeof(value['targets']) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value['targets']; var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms); if (targetNode) { targetNode.setAttribute(value['name'], value['value']); tinyMCE.triggerNodeChange(); } } break; case "mceSetCSSClass": this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value}); break; case "mceInsertRawHTML": var key = 'tiny_mce_marker'; this.execCommand('mceBeginUndoLevel'); // Insert marker key this.execCommand('mceInsertContent', false, key); // Store away scroll pos var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft; var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop; // Find marker and replace with RAW HTML var html = this.getBody().innerHTML; if ((pos = html.indexOf(key)) != -1) tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length)); // Restore scoll pos this.contentWindow.scrollTo(scrollX, scrollY); this.execCommand('mceEndUndoLevel'); break; case "mceInsertContent": // Force empty string if (!value) value = ''; var insertHTMLFailed = false; // Removed since it produced problems in IE // this.getWin().focus(); if (tinyMCE.isGecko || tinyMCE.isOpera) { try { // Is plain text or HTML, &,   etc will be encoded wrong in FF if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) { var r = this.getRng(); var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value)); var s = this.getSel(); var r2 = r.cloneRange(); // Insert text at cursor position s.removeAllRanges(); r.deleteContents(); r.insertNode(n); // Move the cursor to the end of text r2.selectNode(n); r2.collapse(false); s.removeAllRanges(); s.addRange(r2); } else { value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value); this.getDoc().execCommand('inserthtml', false, value); tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); } } catch (ex) { insertHTMLFailed = true; } if (!insertHTMLFailed) { tinyMCE.triggerNodeChange(); return; } } if (!tinyMCE.isIE) { var isHTML = value.indexOf('<') != -1; var sel = this.getSel(); var rng = this.getRng(); if (isHTML) { if (tinyMCE.isSafari) { var tmpRng = this.getDoc().createRange(); tmpRng.setStart(this.getBody(), 0); tmpRng.setEnd(this.getBody(), 0); value = tmpRng.createContextualFragment(value); } else value = rng.createContextualFragment(value); } else { // Setup text node var el = document.createElement("div"); el.innerHTML = value; value = el.firstChild.nodeValue; value = doc.createTextNode(value); } // Insert plain text in Safari if (tinyMCE.isSafari && !isHTML) { this.execCommand('InsertText', false, value.nodeValue); tinyMCE.triggerNodeChange(); return true; } else if (tinyMCE.isSafari && isHTML) { rng.deleteContents(); rng.insertNode(value); tinyMCE.triggerNodeChange(); return true; } rng.deleteContents(); // If target node is text do special treatment, (Mozilla 1.3 fix) if (rng.startContainer.nodeType == 3) { var node = rng.startContainer.splitText(rng.startOffset); node.parentNode.insertBefore(value, node); } else rng.insertNode(value); if (!isHTML) { // Removes weird selection trails sel.selectAllChildren(doc.body); sel.removeAllRanges(); // Move cursor to end of content var rng = doc.createRange(); rng.selectNode(value); rng.collapse(false); sel.addRange(rng); } else rng.collapse(false); tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); } else { var rng = doc.selection.createRange(), tmpRng = null; var c = value.indexOf('"; } if (hc) { cn = n.childNodes; for (i=0, l=cn.length; i'; return h; }, _serializeAttribute : function(n, r, an) { var av = '', t, os = this.settings.on_save; if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0)) return ''; if (os && this.mceAttribs[an]) av = this._getAttrib(n, this.mceAttribs[an]); if (av.length == 0) av = this._getAttrib(n, an); if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) { av = t; if (av == "mce_empty") return " " + an + '=""'; } if (r.forceAttribs && (t = r.forceAttribs[an])) av = t; if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an)) av = this._urlConverter(this, n, av); if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av)) return ""; if (av.length != 0 && av == "{$uid}") av = "uid_" + (this.idCount++); if (av.length != 0) { if (an.indexOf('on') != 0) av = this.xmlEncode(av, 1); return " " + an + "=" + '"' + av + '"'; } return ""; }, formatHTML : function(h) { var s = this.settings, p = '', i = 0, li = 0, o = '', l; // Replace BR in pre elements to \n h = h.replace(/]*)>(.*?)<\/pre>/gi, function (a, b, c) { c = c.replace(//gi, '\n'); return '' + c + ''; }); h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :) h = '\n' + h; h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting h = h.replace(this.nlBeforeRe, '\n<$1$2>'); h = h.replace(this.nlAfterRe, '<$1$2>\n'); h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n'); h += '\n'; //tinyMCE.debug(h); while ((i = h.indexOf('\n', i + 1)) != -1) { if ((l = h.substring(li + 1, i)).length != 0) { if (this.ouRe.test(l) && p.length >= s.indent_levels) p = p.substring(s.indent_levels); o += p + l + '\n'; if (this.inRe.test(l)) p += this.inStr; } li = i; } //tinyMCE.debug(h); return o; }, xmlEncode : function(s, skip_apos) { var cl = this, re = !skip_apos ? this.xmlEncodeAposRe : this.xmlEncodeRe; this._setupEntities(); // Will intialize lookup table switch (this.settings.entity_encoding) { case "raw": return tinyMCE.xmlEncode(s, skip_apos); case "named": return s.replace(re, function (c, b) { b = cl.entities[c.charCodeAt(0)]; return b ? '&' + b + ';' : c; }); case "numeric": return s.replace(re, function (c, b) { return b ? '&#' + c.charCodeAt(0) + ';' : c; }); } return s; }, split : function(re, s) { var c = s.split(re); var i, l, o = new Array(); for (i=0, l=c.length; i' : '>' + h + ''; return o; }; TinyMCE_Engine.prototype.createTag = function(d, tn, a, h) { var o = d.createElement(tn); if (a) { for (n in a) { if (typeof(a[n]) != 'function' && a[n] != null) tinyMCE.setAttrib(o, n, a[n]); } } if (h) o.innerHTML = h; return o; }; TinyMCE_Engine.prototype.getElementByAttributeValue = function(n, e, a, v) { return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0]; }; TinyMCE_Engine.prototype.getElementsByAttributeValue = function(n, e, a, v) { var i, nl = n.getElementsByTagName(e), o = new Array(); for (i=0; i]*)>/gi, ''); h = h.replace(/]*)>/gi, ''); h = h.replace(/]*)>/gi, ''); h = h.replace(/]*)>/gi, ''); h = h.replace(/<\/strong>/gi, ''); h = h.replace(/<\/em>/gi, ''); } if (tinyMCE.isRealIE) { // Since MSIE handles invalid HTML better that valid XHTML we // need to make some things invalid.


    gets converted to
    . h = h.replace(/\s\/>/g, '>'); // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones h = h.replace(/]*)>\u00A0?<\/p>/gi, ' 

    '); // Keep empty paragraphs h = h.replace(/]*)>\s* \s*<\/p>/gi, ' 

    '); // Keep empty paragraphs h = h.replace(/]*)>\s+<\/p>/gi, ' 

    '); // Keep empty paragraphs // Remove first comment e.innerHTML = tinyMCE.uniqueTag + h; e.firstChild.removeNode(true); // Remove weird auto generated empty paragraphs unless it's supposed to be there nl = e.getElementsByTagName("p"); for (i=nl.length-1; i>=0; i--) { n = nl[i]; if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep) n.parentNode.removeChild(n); } } else { h = this.fixGeckoBaseHREFBug(1, e, h); e.innerHTML = h; this.fixGeckoBaseHREFBug(2, e, h); } }; TinyMCE_Engine.prototype.getOuterHTML = function(e) { if (tinyMCE.isIE) return e.outerHTML; var d = e.ownerDocument.createElement("body"); d.appendChild(e.cloneNode(true)); return d.innerHTML; }; TinyMCE_Engine.prototype.setOuterHTML = function(e, h, d) { var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t; if (tinyMCE.isIE && e.nodeType == 1) e.outerHTML = h; else { t = d.createElement("body"); t.innerHTML = h; for (i=0, nl=t.childNodes; i-1; i--) { if (ar[i].specified && ar[i].nodeValue) ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue); } ar = e.childNodes; for (i=0; i= strTok2.length) { for (var i=0; i= strTok2.length || strTok1[i] != strTok2[i]) { breakPoint = i + 1; break; } } } if (strTok1.length < strTok2.length) { for (var i=0; i= strTok1.length || strTok1[i] != strTok2[i]) { breakPoint = i + 1; break; } } } if (breakPoint == 1) return targetURL.path; for (var i=0; i<(strTok1.length-(breakPoint-1)); i++) outPath += "../"; for (var i=breakPoint-1; i=0; i--) { if (baseURLParts[i].length == 0) continue; newBaseURLParts[newBaseURLParts.length] = baseURLParts[i]; } baseURLParts = newBaseURLParts.reverse(); // Merge relURLParts chunks var newRelURLParts = new Array(); var numBack = 0; for (var i=relURLParts.length-1; i>=0; i--) { if (relURLParts[i].length == 0 || relURLParts[i] == ".") continue; if (relURLParts[i] == '..') { numBack++; continue; } if (numBack > 0) { numBack--; continue; } newRelURLParts[newRelURLParts.length] = relURLParts[i]; } relURLParts = newRelURLParts.reverse(); // Remove end from absolute path var len = baseURLParts.length-numBack; var absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/'); var start = "", end = ""; // Build output URL relURL.protocol = baseURL.protocol; relURL.host = baseURL.host; relURL.port = baseURL.port; // Re-add trailing slash if it's removed if (relURL.path.charAt(relURL.path.length-1) == "/") absPath += "/"; relURL.path = absPath; return this.serializeURL(relURL); }; TinyMCE_Engine.prototype.convertURL = function(url, node, on_save) { var prot = document.location.protocol; var host = document.location.hostname; var port = document.location.port; // Pass through file protocol if (prot == "file:") return url; // Something is wrong, remove weirdness url = tinyMCE.regexpReplace(url, '(http|https):///', '/'); // Mailto link or anchor (Pass through) if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || tinyMCE.regexpReplace(url,'[ \t\r\n\+]|%20','').charAt(0) == "#") return url; // Fix relative/Mozilla if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/') return tinyMCE.settings['base_href'] + url; // Handle relative URLs if (on_save && tinyMCE.getParam('relative_urls')) { var curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url); if (curl.charAt(0) == '/') curl = tinyMCE.settings['document_base_prefix'] + curl; var urlParts = tinyMCE.parseURL(curl); var tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings['document_base_url']); // Force relative if (urlParts['host'] == tmpUrlParts['host'] && (urlParts['port'] == tmpUrlParts['port'])) return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings['document_base_url'], curl); } // Handle absolute URLs if (!tinyMCE.getParam('relative_urls')) { var urlParts = tinyMCE.parseURL(url); var baseUrlParts = tinyMCE.parseURL(tinyMCE.settings['base_href']); // Force absolute URLs from relative URLs url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url); // If anchor and path is the same page if (urlParts['anchor'] && urlParts['path'] == baseUrlParts['path']) return "#" + urlParts['anchor']; } // Remove current domain if (tinyMCE.getParam('remove_script_host')) { var start = "", portPart = ""; if (port != "") portPart = ":" + port; start = prot + "//" + host + portPart + "/"; if (url.indexOf(start) == 0) url = url.substring(start.length-1); } return url; }; TinyMCE_Engine.prototype.convertAllRelativeURLs = function(body) { var i, elms, src, href, mhref, msrc; // Convert all image URL:s to absolute URL elms = body.getElementsByTagName("img"); for (i=0; i bookmark.index) { try { rng.addElement(nl[bookmark.index]); } catch (ex) { // Might be thrown if the node no longer exists } } } else { // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs try { // Incorrect bookmark if (bookmark.start < 0) return true; rng = inst.getSel().createRange(); rng.moveToElementText(inst.getBody()); rng.collapse(true); rng.moveStart('character', bookmark.start); rng.moveEnd('character', bookmark.length); } catch (ex) { return true; } } rng.select(); win.scrollTo(bookmark.scrollX, bookmark.scrollY); return true; } if (tinyMCE.isGecko || tinyMCE.isOpera) { if (!sel) return false; if (bookmark.rng) { sel.removeAllRanges(); sel.addRange(bookmark.rng); } if (bookmark.start != -1 && bookmark.end != -1) { try { sd = this._getTextPos(b, bookmark.start, bookmark.end); rng = doc.createRange(); rng.setStart(sd.startNode, sd.startOffset); rng.setEnd(sd.endNode, sd.endOffset); sel.removeAllRanges(); sel.addRange(rng); win.focus(); } catch (ex) { // Ignore } } /* if (typeof(bookmark.index) != 'undefined') { tinyMCE.selectElements(b, 'IMG', function (n) { if (bookmark.index-- == 0) { // Select image in Gecko here } return false; }); } */ win.scrollTo(bookmark.scrollX, bookmark.scrollY); return true; } return false; }, _getPosText : function(r, sn, en) { var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; while ((n = w.nextNode()) != null) { if (n == sn) d.start = p; if (n == en) { d.end = p; return d; } p += n.nodeValue ? n.nodeValue.length : 0; } return null; }, _getTextPos : function(r, sp, ep) { var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; while ((n = w.nextNode()) != null) { p += n.nodeValue ? n.nodeValue.length : 0; if (p >= sp && !d.startNode) { d.startNode = n; d.startOffset = sp - (p - n.nodeValue.length); } if (p >= ep) { d.endNode = n; d.endOffset = ep - (p - n.nodeValue.length); return d; } } return null; }, selectNode : function(node, collapse, select_text_node, to_start) { var inst = this.instance, sel, rng, nodes; if (!node) return; if (typeof(collapse) == "undefined") collapse = true; if (typeof(select_text_node) == "undefined") select_text_node = false; if (typeof(to_start) == "undefined") to_start = true; if (inst.settings.auto_resize) inst.resizeToContent(); if (tinyMCE.isRealIE) { rng = inst.getDoc().body.createTextRange(); try { rng.moveToElementText(node); if (collapse) rng.collapse(to_start); rng.select(); } catch (e) { // Throws illigal agrument in MSIE some times } } else { sel = this.getSel(); if (!sel) return; if (tinyMCE.isSafari) { sel.setBaseAndExtent(node, 0, node, node.innerText.length); if (collapse) { if (to_start) sel.collapseToStart(); else sel.collapseToEnd(); } this.scrollToNode(node); return; } rng = inst.getDoc().createRange(); if (select_text_node) { // Find first textnode in tree nodes = tinyMCE.getNodeTree(node, new Array(), 3); if (nodes.length > 0) rng.selectNodeContents(nodes[0]); else rng.selectNodeContents(node); } else rng.selectNode(node); if (collapse) { // Special treatment of textnode collapse if (!to_start && node.nodeType == 3) { rng.setStart(node, node.nodeValue.length); rng.setEnd(node, node.nodeValue.length); } else rng.collapse(to_start); } sel.removeAllRanges(); sel.addRange(rng); } this.scrollToNode(node); // Set selected element tinyMCE.selectedElement = null; if (node.nodeType == 1) tinyMCE.selectedElement = node; }, scrollToNode : function(node) { var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin; // Only scroll if out of visible area if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25)) w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25); // Scroll container window if (inst.settings.auto_resize) { cwin = inst.getContainerWin(); cvp = tinyMCE.getViewPort(cwin); p = this.getAbsPosition(node); if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height) cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25); } }, getAbsPosition : function(n) { var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement); return { absLeft : ipos.absLeft + pos.absLeft, absTop : ipos.absTop + pos.absTop }; }, getSel : function() { var inst = this.instance; if (tinyMCE.isRealIE) return inst.getDoc().selection; return inst.contentWindow.getSelection(); }, getRng : function() { var s = this.getSel(); if (s == null) return null; if (tinyMCE.isRealIE) return s.createRange(); if (tinyMCE.isSafari && !s.getRangeAt) return '' + window.getSelection(); if (s.rangeCount > 0) return s.getRangeAt(0); return null; }, isCollapsed : function() { var r = this.getRng(); if (r.item) return false; return r.boundingWidth == 0 || this.getSel().isCollapsed; }, collapse : function(b) { var r = this.getRng(), s = this.getSel(); if (r.select) { r.collapse(b); r.select(); } else { if (b) s.collapseToStart(); else s.collapseToEnd(); } }, getFocusElement : function() { var inst = this.instance, doc, rng, sel, elm; if (tinyMCE.isRealIE) { doc = inst.getDoc(); rng = doc.selection.createRange(); // if (rng.collapse) // rng.collapse(true); elm = rng.item ? rng.item(0) : rng.parentElement(); } else { if (!tinyMCE.isSafari && inst.isHidden()) return inst.getBody(); sel = this.getSel(); rng = this.getRng(); if (!sel || !rng) return null; elm = rng.commonAncestorContainer; //elm = (sel && sel.anchorNode) ? sel.anchorNode : null; // Handle selection a image or other control like element such as anchors if (!rng.collapsed) { // Is selection small if (rng.startContainer == rng.endContainer) { if (rng.startOffset - rng.endOffset < 2) { if (rng.startContainer.hasChildNodes()) elm = rng.startContainer.childNodes[rng.startOffset]; } } } // Get the element parent of the node elm = tinyMCE.getParentElement(elm); //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") // elm = tinyMCE.selectedElement; } return elm; } }; /* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */ function TinyMCE_UndoRedo(inst) { this.instance = inst; this.undoLevels = new Array(); this.undoIndex = 0; this.typingUndoIndex = -1; this.undoRedo = true; }; TinyMCE_UndoRedo.prototype = { add : function(l) { var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur; if (l) { this.undoLevels[this.undoLevels.length] = l; return true; } if (this.typingUndoIndex != -1) { this.undoIndex = this.typingUndoIndex; if (tinyMCE.typingUndoIndex != -1) tinyMCE.undoIndex = tinyMCE.typingUndoIndex; } newHTML = tinyMCE.trim(inst.getBody().innerHTML); if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) { //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content); tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst); // Time to compress customUndoLevels = tinyMCE.settings['custom_undo_redo_levels']; if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) { for (i=0; i 0) { this.undoIndex--; tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); inst.repaint(); if (inst.settings.custom_undo_redo_restore_selection) inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); } }, redo : function() { var inst = this.instance; tinyMCE.execCommand("mceEndTyping"); if (this.undoIndex < (this.undoLevels.length-1)) { this.undoIndex++; tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); inst.repaint(); if (inst.settings.custom_undo_redo_restore_selection) inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); } tinyMCE.triggerNodeChange(); } }; /* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */ var TinyMCE_ForceParagraphs = { _insertPara : function(inst, e) { var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0); var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock; var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null; var paraBefore, paraAfter, startChop, endChop, contents; function isEmpty(para) { function isEmptyHTML(html) { return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == ""; } // Check for images if (para.getElementsByTagName("img").length > 0) return false; // Check for tables if (para.getElementsByTagName("table").length > 0) return false; // Check for HRs if (para.getElementsByTagName("hr").length > 0) return false; // Check all textnodes var nodes = tinyMCE.getNodeTree(para, new Array(), 3); for (var i=0; i <" + blockName + "> "; paraAfter = body.childNodes[1]; } inst.selection.moveToBookmark(b); inst.selection.selectNode(paraAfter, true, true); return true; } // Place first part within new paragraph if (startChop.nodeName == blockName) rngBefore.setStart(startChop, 0); else rngBefore.setStartBefore(startChop); rngBefore.setEnd(startNode, startOffset); paraBefore.appendChild(rngBefore.cloneContents()); // Place secound part within new paragraph rngAfter.setEndAfter(endChop); rngAfter.setStart(endNode, endOffset); contents = rngAfter.cloneContents(); if (contents.firstChild && contents.firstChild.nodeName == blockName) { /* var nodes = contents.firstChild.childNodes; for (var i=0; i= r.startOffset && nv.charAt(r.startOffset - 1) == ' ') s = true;*/ // Only remove BRs if we are at the end of line #bug 1464152 if (nv != null && r.startOffset == nv.length) sn.nextSibling.parentNode.removeChild(sn.nextSibling); } if (inst.settings.auto_resize) inst.resizeToContent(); return s; } }; /* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */ function TinyMCE_Layer(id, bm) { this.id = id; this.blockerElement = null; this.events = false; this.element = null; this.blockMode = typeof(bm) != 'undefined' ? bm : true; this.doc = document; }; TinyMCE_Layer.prototype = { moveRelativeTo : function(re, p) { var rep = this.getAbsPosition(re); var w = parseInt(re.offsetWidth); var h = parseInt(re.offsetHeight); var e = this.getElement(); var ew = parseInt(e.offsetWidth); var eh = parseInt(e.offsetHeight); var x, y; switch (p) { case "tl": x = rep.absLeft; y = rep.absTop; break; case "tr": x = rep.absLeft + w; y = rep.absTop; break; case "bl": x = rep.absLeft; y = rep.absTop + h; break; case "br": x = rep.absLeft + w; y = rep.absTop + h; break; case "cc": x = rep.absLeft + (w / 2) - (ew / 2); y = rep.absTop + (h / 2) - (eh / 2); break; } this.moveTo(x, y); }, moveBy : function(x, y) { var e = this.getElement(); this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y); }, moveTo : function(x, y) { var e = this.getElement(); e.style.left = x + "px"; e.style.top = y + "px"; this.updateBlocker(); }, resizeBy : function(w, h) { var e = this.getElement(); this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h); }, resizeTo : function(w, h) { var e = this.getElement(); if (w != null) e.style.width = w + "px"; if (h != null) e.style.height = h + "px"; this.updateBlocker(); }, show : function() { var el = this.getElement(); if (el) { el.style.display = 'block'; this.updateBlocker(); } }, hide : function() { var el = this.getElement(); if (el) { el.style.display = 'none'; this.updateBlocker(); } }, isVisible : function() { return this.getElement().style.display == 'block'; }, getElement : function() { if (!this.element) this.element = this.doc.getElementById(this.id); return this.element; }, setBlockMode : function(s) { this.blockMode = s; }, updateBlocker : function() { var e, b, x, y, w, h; b = this.getBlocker(); if (b) { if (this.blockMode) { e = this.getElement(); x = this.parseInt(e.style.left); y = this.parseInt(e.style.top); w = this.parseInt(e.offsetWidth); h = this.parseInt(e.offsetHeight); b.style.left = x + 'px'; b.style.top = y + 'px'; b.style.width = w + 'px'; b.style.height = h + 'px'; b.style.display = e.style.display; } else b.style.display = 'none'; } }, getBlocker : function() { var d, b; if (!this.blockerElement && this.blockMode) { d = this.doc; b = d.getElementById(this.id + "_blocker"); if (!b) { b = d.createElement("iframe"); b.setAttribute('id', this.id + "_blocker"); b.style.cssText = 'display: none; position: absolute; left: 0; top: 0'; b.src = 'javascript:false;'; b.frameBorder = '0'; b.scrolling = 'no'; d.body.appendChild(b); } this.blockerElement = b; } return this.blockerElement; }, getAbsPosition : function(n) { var p = {absLeft : 0, absTop : 0}; while (n) { p.absLeft += n.offsetLeft; p.absTop += n.offsetTop; n = n.offsetParent; } return p; }, create : function(n, c, p, h) { var d = this.doc, e = d.createElement(n); e.setAttribute('id', this.id); if (c) e.className = c; if (!p) p = d.body; if (h) e.innerHTML = h; p.appendChild(e); return this.element = e; }, exists : function() { return this.doc.getElementById(this.id) != null; }, parseInt : function(s) { if (s == null || s == '') return 0; return parseInt(s); }, remove : function() { var e = this.getElement(), b = this.getBlocker(); if (e) e.parentNode.removeChild(e); if (b) b.parentNode.removeChild(b); } }; /* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */ function TinyMCE_Menu() { var id; if (typeof(tinyMCE.menuCounter) == "undefined") tinyMCE.menuCounter = 0; id = "mc_menu_" + tinyMCE.menuCounter++; TinyMCE_Layer.call(this, id, true); this.id = id; this.items = new Array(); this.needsUpdate = true; }; TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, { init : function(s) { var n; // Default params this.settings = { separator_class : 'mceMenuSeparator', title_class : 'mceMenuTitle', disabled_class : 'mceMenuDisabled', menu_class : 'mceMenu', drop_menu : true }; for (n in s) this.settings[n] = s[n]; this.create('div', this.settings.menu_class); }, clear : function() { this.items = new Array(); }, addTitle : function(t) { this.add({type : 'title', text : t}); }, addDisabled : function(t) { this.add({type : 'disabled', text : t}); }, addSeparator : function() { this.add({type : 'separator'}); }, addItem : function(t, js) { this.add({text : t, js : js}); }, add : function(mi) { this.items[this.items.length] = mi; this.needsUpdate = true; }, update : function() { var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings; if (this.settings.drop_menu) h += ''; h += ''; for (i=0; i'; } h += '
    '; break; case 'title': h += '
    ' + t + ''; break; case 'disabled': h += '
    ' + t + ''; break; default: h += '
    ' + t + ''; } h += '
    '; e.innerHTML = h; this.needsUpdate = false; this.updateBlocker(); }, show : function() { var nl, i; if (tinyMCE.lastMenu == this) return; if (this.needsUpdate) this.update(); if (tinyMCE.lastMenu && tinyMCE.lastMenu != this) tinyMCE.lastMenu.hide(); TinyMCE_Layer.prototype.show.call(this); if (!tinyMCE.isOpera) { // Accessibility stuff /* nl = this.getElement().getElementsByTagName("a"); if (nl.length > 0) nl[0].focus();*/ } tinyMCE.lastMenu = this; } }); /* file:jscripts/tiny_mce/classes/TinyMCE_Compatibility.class.js */ if (!Function.prototype.call) { Function.prototype.call = function() { var a = arguments, s = a[0], i, as = '', r, o; for (i=1; i 1 ? ',' : '') + 'a[' + i + ']'; o = s._fu; s._fu = this; r = eval('s._fu(' + as + ')'); s._fu = o; return r; }; }; /* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */ TinyMCE_Engine.prototype.debug = function() { var m = "", a, i, l = tinyMCE.log.length; for (i=0, a = this.debug.arguments; i'); if (tinyMCE.getParam("popups_css_add")) { c = tinyMCE.getParam("popups_css_add"); // Is relative if (c.indexOf('://') == -1 && c.charAt(0) != '/') c = tinyMCE.documentBasePath + "/" + c; document.write(''); } tinyMCE.addEvent(window, "load", this.onLoad); }, onLoad : function() { var dir, i, elms, body = document.body; if (tinyMCE.getWindowArg('mce_replacevariables', true)) body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); dir = tinyMCE.selectedInstance.settings['directionality']; if (dir == "rtl" && document.forms && document.forms.length > 0) { elms = document.forms[0].elements; for (i=0; i=0; i--) { if (wrapper.hasChildNodes()) wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); else wrapper.appendChild(nodes[i].cloneNode(true)); nodes[i].parentNode.removeChild(nodes[i]); } // Add wrapper doc.body.appendChild(wrapper); // Create iframe iframe = document.createElement("iframe"); iframe.id = "mcWinIframe"; iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings['default_document']; iframe.width = "100%"; iframe.height = "100%"; iframe.style.margin = '0'; // Add iframe doc.body.appendChild(iframe); // Measure iframe iframe = document.getElementById('mcWinIframe'); dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; // Resize window // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); window.resizeBy(dx, dy); // Hide iframe and show wrapper body.style.margin = oldMargin; iframe.style.display = 'none'; wrapper.style.display = 'block'; } }, resizeToContent : function() { var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); var isOpera = (navigator.userAgent.indexOf("Opera") != -1); if (isOpera) return; if (isMSIE) { try { window.resizeTo(10, 10); } catch (e) {} var elm = document.body; var width = elm.offsetWidth; var height = elm.offsetHeight; var dx = (elm.scrollWidth - width) + 4; var dy = elm.scrollHeight - height; try { window.resizeBy(dx, dy); } catch (e) {} } else { window.scrollBy(1000, 1000); if (window.scrollX > 0 || window.scrollY > 0) { window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); window.sizeToContent(); window.scrollTo(0, 0); var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); window.moveTo(x, y); } } }, getWindowArg : function(name, default_value) { return tinyMCE.getWindowArg(name, default_value); }, restoreSelection : function() { if (this.storeSelection) { var inst = tinyMCE.selectedInstance; inst.getWin().focus(); if (inst.selectionBookmark) inst.selection.moveToBookmark(inst.selectionBookmark); } }, execCommand : function(command, user_interface, value) { var inst = tinyMCE.selectedInstance; this.restoreSelection(); inst.execCommand(command, user_interface, value); // Store selection if (this.storeSelection) inst.selectionBookmark = inst.selection.getBookmark(true); }, close : function() { tinyMCE.closeWindow(window); }, pickColor : function(e, element_id) { tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { element_id : element_id, document : document, window : window, store_selection : false }); }, openBrowser : function(element_id, type, option) { var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); var url = document.getElementById(element_id).value; tinyMCE.setWindowArg("window", window); tinyMCE.setWindowArg("document", document); // Call to external callback if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") alert("Callback function: " + cb + " could not be found."); else eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); }, importClass : function(c) { window[c] = function() {}; for (var n in window.opener[c].prototype) window[c].prototype[n] = window.opener[c].prototype[n]; window[c].constructor = window.opener[c].constructor; } }; // Setup global instance var tinyMCEPopup = new TinyMCE_Popup(); tinyMCEPopup.init(); :wordpress/wp-includes/js/tinymce/utils/editable_selects.js/** * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $ * * Makes select boxes editable. * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ var TinyMCE_EditableSelects = { editSelectElm : null, init : function() { var nl = document.getElementsByTagName("select"), i, d = document, o; for (i=0; i'; h += ''; return h; } function pickColor(e, target_form_element) { if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") tinyMCEPopup.pickColor(e, target_form_element); } function updateColor(img_id, form_element_id) { document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; } function setBrowserDisabled(id, state) { var img = document.getElementById(id); var lnk = document.getElementById(id + "_link"); if (lnk) { if (state) { lnk.setAttribute("realhref", lnk.getAttribute("href")); lnk.removeAttribute("href"); tinyMCE.switchClass(img, 'mceButtonDisabled', true); } else { lnk.setAttribute("href", lnk.getAttribute("realhref")); tinyMCE.switchClass(img, 'mceButtonNormal', false); } } } function getBrowserHTML(id, target_form_element, type, prefix) { var option = prefix + "_" + type + "_browser_callback"; var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); if (cb == null) return ""; var html = ""; html += ''; html += ''; return html; } function openBrower(img_id, target_form_element, type, option) { var img = document.getElementById(img_id); if (img.className != "mceButtonDisabled") tinyMCEPopup.openBrowser(target_form_element, type, option); } function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { if (!form_obj || !form_obj.elements[field_name]) return; var sel = form_obj.elements[field_name]; var found = false; for (var i=0; i x && mx < x + w && my > y && my < y + h)) { MCLayer.visibleLayer = null; if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) return true; l.hide(); } } }, addCSSClass : function(e, c) { this.removeCSSClass(e, c); var a = this.explode(' ', e.className); a[a.length] = c; e.className = a.join(' '); }, removeCSSClass : function(e, c) { var a = this.explode(' ', e.className), i; for (i=0; i'; h += ''; return h; } function pickColor(e, target_form_element) { if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") tinyMCEPopup.pickColor(e, target_form_element); } function updateColor(img_id, form_element_id) { document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; } function setBrowserDisabled(id, state) { var img = document.getElementById(id); var lnk = document.getElementById(id + "_link"); if (lnk) { if (state) { lnk.setAttribute("realhref", lnk.getAttribute("href")); lnk.removeAttribute("href"); tinyMCE.switchClass(img, 'mceButtonDisabled', true); } else { lnk.setAttribute("href", lnk.getAttribute("realhref")); tinyMCE.switchClass(img, 'mceButtonNormal', false); } } } function getBrowserHTML(id, target_form_element, type, prefix) { var option = prefix + "_" + type + "_browser_callback"; var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); if (cb == null) return ""; var html = ""; html += ''; html += ''; return html; } function openBrower(img_id, target_form_element, type, option) { var img = document.getElementById(img_id); if (img.className != "mceButtonDisabled") tinyMCEPopup.openBrowser(target_form_element, type, option); } function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { if (!form_obj || !form_obj.elements[field_name]) return; var sel = form_obj.elements[field_name]; var found = false; for (var i=0; i x && mx < x + w && my > y && my < y + h)) { MCLayer.visibleLayer = null; if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) return true; l.hide(); } } }, addCSSClass : function(e, c) { this.removeCSSClass(e, c); var a = this.explode(' ', e.className); a[a.length] = c; e.className = a.join(' '); }, removeCSSClass : function(e, c) { var a = this.explode(' ', e.className), i; for (i=0; i parseInt(v)) st = this.mark(f, n); } } return st; }, hasClass : function(n, c, d) { return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); }, getNum : function(n, c) { c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; c = c.replace(/[^0-9]/g, ''); return c; }, addClass : function(n, c, b) { var o = this.removeClass(n, c); n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; }, removeClass : function(n, c) { c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); return n.className = c != ' ' ? c : ''; }, tags : function(f, s) { return f.getElementsByTagName(s); }, mark : function(f, n) { var s = this.settings; this.addClass(n, s.invalid_cls); this.markLabels(f, n, s.invalid_cls); return false; }, markLabels : function(f, n, ic) { var nl, i; nl = this.tags(f, "label"); for (i=0; i parseInt(v)) st = this.mark(f, n); } } return st; }, hasClass : function(n, c, d) { return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); }, getNum : function(n, c) { c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; c = c.replace(/[^0-9]/g, ''); return c; }, addClass : function(n, c, b) { var o = this.removeClass(n, c); n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; }, removeClass : function(n, c) { c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); return n.className = c != ' ' ? c : ''; }, tags : function(f, s) { return f.getElementsByTagName(s); }, mark : function(f, n) { var s = this.settings; this.addClass(n, s.invalid_cls); this.markLabels(f, n, s.invalid_cls); return false; }, markLabels : function(f, n, ic) { var nl, i; nl = this.tags(f, "label"); for (i=0; i > <?php _e('Rich Editor Help') ?> text_direction) ) : ?> text_direction) ) : ?>

    Rich editing, also called WYSIWYG for What You See Is What You Get, means your text is formatted as you type. The rich editor creates HTML code behind the scenes while you concentrate on writing. Font styles, links and images all appear approximately as they will on the internet.') ?>

    #wordpress/wp-includes/js/tw-sack.jsi/* Simple AJAX Code-Kit (SACK) v1.6.1 */ /* 2005 Gregory Wild-Smith */ /* www.twilightuniverse.com */ /* Software licenced under a modified X11 licence, see documentation or authors website for more details */ function sack(file) { this.xmlhttp = null; this.resetData = function() { this.method = "POST"; this.queryStringSeparator = "?"; this.argumentSeparator = "&"; this.URLString = ""; this.encodeURIString = true; this.execute = false; this.element = null; this.elementObj = null; this.requestFile = file; this.vars = new Object(); this.responseStatus = new Array(2); }; this.resetFunctions = function() { this.onLoading = function() { }; this.onLoaded = function() { }; this.onInteractive = function() { }; this.onCompletion = function() { }; this.onError = function() { }; this.onFail = function() { }; }; this.reset = function() { this.resetFunctions(); this.resetData(); }; this.createAJAX = function() { try { this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { this.xmlhttp = null; } } if (! this.xmlhttp) { if (typeof XMLHttpRequest != "undefined") { this.xmlhttp = new XMLHttpRequest(); } else { this.failed = true; } } }; this.setVar = function(name, value){ this.vars[name] = Array(value, false); }; this.encVar = function(name, value, returnvars) { if (true == returnvars) { return Array(encodeURIComponent(name), encodeURIComponent(value)); } else { this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true); } } this.processURLString = function(string, encode) { encoded = encodeURIComponent(this.argumentSeparator); regexp = new RegExp(this.argumentSeparator + "|" + encoded); varArray = string.split(regexp); for (i = 0; i < varArray.length; i++){ urlVars = varArray[i].split("="); if (true == encode){ this.encVar(urlVars[0], urlVars[1]); } else { this.setVar(urlVars[0], urlVars[1]); } } } this.createURLString = function(urlstring) { if (this.encodeURIString && this.URLString.length) { this.processURLString(this.URLString, true); } if (urlstring) { if (this.URLString.length) { this.URLString += this.argumentSeparator + urlstring; } else { this.URLString = urlstring; } } // prevents caching of URLString this.setVar("rndval", new Date().getTime()); urlstringtemp = new Array(); for (key in this.vars) { if (false == this.vars[key][1] && true == this.encodeURIString) { encoded = this.encVar(key, this.vars[key][0], true); delete this.vars[key]; this.vars[encoded[0]] = Array(encoded[1], true); key = encoded[0]; } urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0]; } if (urlstring){ this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator); } else { this.URLString += urlstringtemp.join(this.argumentSeparator); } } this.runResponse = function() { eval(this.response); } this.runAJAX = function(urlstring) { if (this.failed) { this.onFail(); } else { this.createURLString(urlstring); if (this.element) { this.elementObj = document.getElementById(this.element); } if (this.xmlhttp) { var self = this; if (this.method == "GET") { totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString; this.xmlhttp.open(this.method, totalurlstring, true); } else { this.xmlhttp.open(this.method, this.requestFile, true); try { this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") } catch (e) { } } this.xmlhttp.onreadystatechange = function() { switch (self.xmlhttp.readyState) { case 1: self.onLoading(); break; case 2: self.onLoaded(); break; case 3: self.onInteractive(); break; case 4: self.response = self.xmlhttp.responseText; self.responseXML = self.xmlhttp.responseXML; self.responseStatus[0] = self.xmlhttp.status; self.responseStatus[1] = self.xmlhttp.statusText; if (self.execute) { self.runResponse(); } if (self.elementObj) { elemNodeName = self.elementObj.nodeName; elemNodeName.toLowerCase(); if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea") { self.elementObj.value = self.response; } else { self.elementObj.innerHTML = self.response; } } if (self.responseStatus[0] == "200") { self.onCompletion(); } else { self.onError(); } self.URLString = ""; break; } }; this.xmlhttp.send(this.URLString); } } }; this.reset(); this.createAJAX(); } #wordpress/wp-includes/js/wp-ajax.js"var WPAjax = Class.create(); Object.extend(WPAjax.prototype, Ajax.Request.prototype); Object.extend(WPAjax.prototype, { WPComplete: false, // onComplete function WPError: false, // onWPError function defaultUrl: '', // We get these from WPAjaxL10n permText: '', strangeText: '', whoaText: '', initialize: function(url, responseEl) { var tempObj = this; this.transport = Ajax.getTransport(); if ( !this.transport ) return false; this.setOptions( { parameters: 'cookie=' + encodeURIComponent(document.cookie), onComplete: function(transport) { // transport = XMLHttpRequest object if ( tempObj.parseAjaxResponse() ) { if ( 'function' == typeof tempObj.WPComplete ) tempObj.WPComplete(transport); } else if ( 'function' == typeof tempObj.WPError ) // if response corresponds to an error (bad data, say, not 404) tempObj.WPError(transport); } }); this.url = url ? url : this.defaultUrl; this.getResponseElement(responseEl); }, addArg: function(key, value) { var a = $H(); a[encodeURIComponent(key)] = encodeURIComponent(value); this.options.parameters = $H(this.options.parameters).merge(a); }, getResponseElement: function(r) { var p = $(r + '-p'); if ( !p ) { new Insertion.Bottom(r, ""); var p = $(r + '-p'); } this.myResponseElement = p; }, parseAjaxResponse: function() { // 1 = good, 0 = strange (bad data?), -1 = you lack permission if ( this.transport.responseXML && typeof this.transport.responseXML == 'object' && ( this.transport.responseXML.xml || 'undefined' == typeof this.transport.responseXML.xml ) ) { var err = this.transport.responseXML.getElementsByTagName('wp_error'); if ( err[0] ) { var msg = $A(err).inject( '', function(a, b) { return a + '

    ' + b.firstChild.nodeValue + '

    '; } ); Element.update(this.myResponseElement,'
    ' + msg + '
    '); return false; } return true; } var r = this.transport.responseText; if ( isNaN(r) ) { Element.update(this.myResponseElement,'

    ' + r + '

    '); return false; } var r = parseInt(r,10); if ( -1 == r ) { Element.update(this.myResponseElement,"

    " + this.permText + "

    "); return false; } else if ( 0 == r ) { Element.update(this.myResponseElement,"

    " + this.strangeText + "

    "); return false; } return true; }, addOnComplete: function(f) { if ( 'function' == typeof f ) { var of = this.WPComplete; this.WPComplete = function(t) { if ( of ) of(t); f(t); } } }, addOnWPError: function(f) { if ( 'function' == typeof f ) { var of = this.WPError; this.WPError = function(t) { if ( of ) of(t); f(t); } } }, notInitialized: function() { return this.transport ? false : true; } }); Event.observe( window, 'load', function() { Object.extend(WPAjax.prototype, WPAjaxL10n); }, false ) Ajax.activeSendCount = 0; Ajax.Responders.register( { onCreate: function() { Ajax.activeSendCount++; if ( 1 != Ajax.activeSendCount ) return; wpBeforeUnload = window.onbeforeunload; window.onbeforeunload = function() { return WPAjax.whoaText; } }, onLoading: function() { // Can switch to onLoaded if we lose data Ajax.activeSendCount--; if ( 0 != Ajax.activeSendCount ) return; window.onbeforeunload = wpBeforeUnload; } }); //Pretty func adapted from ALA http://www.alistapart.com/articles/gettingstartedwithajax function getNodeValue(tree,el){try { var r = tree.getElementsByTagName(el)[0].firstChild.nodeValue; } catch(err) { var r = null; } return r; } wordpress/wp-includes/kses.php[ array (), 'a' => array ('href' => array (), 'title' => array (), 'rel' => array (), 'rev' => array (), 'name' => array ()), 'abbr' => array ('title' => array ()), 'acronym' => array ('title' => array ()), 'b' => array (), 'big' => array (), 'blockquote' => array ('cite' => array ()), 'br' => array (), 'button' => array ('disabled' => array (), 'name' => array (), 'type' => array (), 'value' => array ()), 'caption' => array ('align' => array ()), 'code' => array (), 'col' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'span' => array (), 'valign' => array (), 'width' => array ()), 'del' => array ('datetime' => array ()), 'dd' => array (), 'div' => array ('align' => array ()), 'dl' => array (), 'dt' => array (), 'em' => array (), 'fieldset' => array (), 'font' => array ('color' => array (), 'face' => array (), 'size' => array ()), 'form' => array ('action' => array (), 'accept' => array (), 'accept-charset' => array (), 'enctype' => array (), 'method' => array (), 'name' => array (), 'target' => array ()), 'h1' => array ('align' => array ()), 'h2' => array ('align' => array ()), 'h3' => array ('align' => array ()), 'h4' => array ('align' => array ()), 'h5' => array ('align' => array ()), 'h6' => array ('align' => array ()), 'hr' => array ('align' => array (), 'noshade' => array (), 'size' => array (), 'width' => array ()), 'i' => array (), 'img' => array ('alt' => array (), 'align' => array (), 'border' => array (), 'height' => array (), 'hspace' => array (), 'longdesc' => array (), 'vspace' => array (), 'src' => array (), 'width' => array ()), 'ins' => array ('datetime' => array (), 'cite' => array ()), 'kbd' => array (), 'label' => array ('for' => array ()), 'legend' => array ('align' => array ()), 'li' => array (), 'p' => array ('align' => array ()), 'pre' => array ('width' => array ()), 'q' => array ('cite' => array ()), 's' => array (), 'strike' => array (), 'strong' => array (), 'sub' => array (), 'sup' => array (), 'table' => array ('align' => array (), 'bgcolor' => array (), 'border' => array (), 'cellpadding' => array (), 'cellspacing' => array (), 'rules' => array (), 'summary' => array (), 'width' => array ()), 'tbody' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'td' => array ('abbr' => array (), 'align' => array (), 'axis' => array (), 'bgcolor' => array (), 'char' => array (), 'charoff' => array (), 'colspan' => array (), 'headers' => array (), 'height' => array (), 'nowrap' => array (), 'rowspan' => array (), 'scope' => array (), 'valign' => array (), 'width' => array ()), 'textarea' => array ('cols' => array (), 'rows' => array (), 'disabled' => array (), 'name' => array (), 'readonly' => array ()), 'tfoot' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'th' => array ('abbr' => array (), 'align' => array (), 'axis' => array (), 'bgcolor' => array (), 'char' => array (), 'charoff' => array (), 'colspan' => array (), 'headers' => array (), 'height' => array (), 'nowrap' => array (), 'rowspan' => array (), 'scope' => array (), 'valign' => array (), 'width' => array ()), 'thead' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'title' => array (), 'tr' => array ('align' => array (), 'bgcolor' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'tt' => array (), 'u' => array (), 'ul' => array (), 'ol' => array (), 'var' => array () ); $allowedtags = array ('a' => array ('href' => array (), 'title' => array ()), 'abbr' => array ('title' => array ()), 'acronym' => array ('title' => array ()), 'b' => array (), 'blockquote' => array ('cite' => array ()), // 'br' => array(), 'code' => array (), // 'del' => array('datetime' => array()), // 'dd' => array(), // 'dl' => array(), // 'dt' => array(), 'em' => array (), 'i' => array (), // 'ins' => array('datetime' => array(), 'cite' => array()), // 'li' => array(), // 'ol' => array(), // 'p' => array(), // 'q' => array(), 'strike' => array (), 'strong' => array (), // 'sub' => array(), // 'sup' => array(), // 'u' => array(), // 'ul' => array(), ); } function wp_kses($string, $allowed_html, $allowed_protocols = array ('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet')) ############################################################################### # This function makes sure that only the allowed HTML element names, attribute # names and attribute values plus only sane HTML entities will occur in # $string. You have to remove any slashes from PHP's magic quotes before you # call this function. ############################################################################### { $string = wp_kses_no_null($string); $string = wp_kses_js_entities($string); $string = wp_kses_normalize_entities($string); $string = wp_kses_hook($string); $allowed_html_fixed = wp_kses_array_lc($allowed_html); return wp_kses_split($string, $allowed_html_fixed, $allowed_protocols); } # function wp_kses function wp_kses_hook($string) ############################################################################### # You add any kses hooks here. ############################################################################### { return $string; } # function wp_kses_hook function wp_kses_version() ############################################################################### # This function returns kses' version number. ############################################################################### { return '0.2.2'; } # function wp_kses_version function wp_kses_split($string, $allowed_html, $allowed_protocols) ############################################################################### # This function searches for HTML tags, no matter how malformed. It also # matches stray ">" characters. ############################################################################### { return preg_replace('%((|$))|(<[^>]*(>|$)|>))%e', "wp_kses_split2('\\1', \$allowed_html, ".'$allowed_protocols)', $string); } # function wp_kses_split function wp_kses_split2($string, $allowed_html, $allowed_protocols) ############################################################################### # This function does a lot of work. It rejects some very malformed things # like <:::>. It returns an empty string, if the element isn't allowed (look # ma, no strip_tags()!). Otherwise it splits the tag into an element and an # attribute list. ############################################################################### { $string = wp_kses_stripslashes($string); if (substr($string, 0, 1) != '<') return '>'; # It matched a ">" character if (preg_match('%^)?$%', $string, $matches)) { $string = str_replace(array(''), '', $matches[1]); while ( $string != $newstring = wp_kses($string, $allowed_html, $allowed_protocols) ) $string = $newstring; if ( $string == '' ) return ''; return ""; } # Allow HTML comments if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9]+)([^>]*)>?$%', $string, $matches)) return ''; # It's seriously malformed $slash = trim($matches[1]); $elem = $matches[2]; $attrlist = $matches[3]; if (!@isset($allowed_html[strtolower($elem)])) return ''; # They are using a not allowed HTML element if ($slash != '') return "<$slash$elem>"; # No attributes are allowed for closing elements return wp_kses_attr("$slash$elem", $attrlist, $allowed_html, $allowed_protocols); } # function wp_kses_split2 function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) ############################################################################### # This function removes all attributes, if none are allowed for this element. # If some are allowed it calls wp_kses_hair() to split them further, and then it # builds up new HTML code from the data that kses_hair() returns. It also # removes "<" and ">" characters, if there are any left. One more thing it # does is to check if the tag has a closing XHTML slash, and if it does, # it puts one in the returned code as well. ############################################################################### { # Is there a closing XHTML slash at the end of the attributes? $xhtml_slash = ''; if (preg_match('%\s/\s*$%', $attr)) $xhtml_slash = ' /'; # Are any attributes allowed at all for this element? if (@ count($allowed_html[strtolower($element)]) == 0) return "<$element$xhtml_slash>"; # Split it $attrarr = wp_kses_hair($attr, $allowed_protocols); # Go through $attrarr, and save the allowed attributes for this element # in $attr2 $attr2 = ''; foreach ($attrarr as $arreach) { if (!@ isset ($allowed_html[strtolower($element)][strtolower($arreach['name'])])) continue; # the attribute is not allowed $current = $allowed_html[strtolower($element)][strtolower($arreach['name'])]; if ($current == '') continue; # the attribute is not allowed if (!is_array($current)) $attr2 .= ' '.$arreach['whole']; # there are no checks else { # there are some checks $ok = true; foreach ($current as $currkey => $currval) if (!wp_kses_check_attr_val($arreach['value'], $arreach['vless'], $currkey, $currval)) { $ok = false; break; } if ($ok) $attr2 .= ' '.$arreach['whole']; # it passed them } # if !is_array($current) } # foreach # Remove any "<" or ">" characters $attr2 = preg_replace('/[<>]/', '', $attr2); return "<$element$attr2$xhtml_slash>"; } # function wp_kses_attr function wp_kses_hair($attr, $allowed_protocols) ############################################################################### # This function does a lot of work. It parses an attribute list into an array # with attribute data, and tries to do the right thing even if it gets weird # input. It will add quotes around attribute values that don't have any quotes # or apostrophes around them, to make it easier to produce HTML code that will # conform to W3C's HTML specification. It will also remove bad URL protocols # from attribute values. ############################################################################### { $attrarr = array (); $mode = 0; $attrname = ''; # Loop through the whole attribute list while (strlen($attr) != 0) { $working = 0; # Was the last operation successful? switch ($mode) { case 0 : # attribute name, href for instance if (preg_match('/^([-a-zA-Z]+)/', $attr, $match)) { $attrname = $match[1]; $working = $mode = 1; $attr = preg_replace('/^[-a-zA-Z]+/', '', $attr); } break; case 1 : # equals sign or valueless ("selected") if (preg_match('/^\s*=\s*/', $attr)) # equals sign { $working = 1; $mode = 2; $attr = preg_replace('/^\s*=\s*/', '', $attr); break; } if (preg_match('/^\s+/', $attr)) # valueless { $working = 1; $mode = 0; $attrarr[] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); $attr = preg_replace('/^\s+/', '', $attr); } break; case 2 : # attribute value, a URL after href= for instance if (preg_match('/^"([^"]*)"(\s+|$)/', $attr, $match)) # "value" { $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); $working = 1; $mode = 0; $attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); break; } if (preg_match("/^'([^']*)'(\s+|$)/", $attr, $match)) # 'value' { $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname='$thisval'", 'vless' => 'n'); $working = 1; $mode = 0; $attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); break; } if (preg_match("%^([^\s\"']+)(\s+|$)%", $attr, $match)) # value { $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); # We add quotes to conform to W3C's HTML spec. $working = 1; $mode = 0; $attr = preg_replace("%^[^\s\"']+(\s+|$)%", '', $attr); } break; } # switch if ($working == 0) # not well formed, remove and try again { $attr = wp_kses_html_error($attr); $mode = 0; } } # while if ($mode == 1) # special case, for when the attribute list ends with a valueless # attribute like "selected" $attrarr[] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); return $attrarr; } # function wp_kses_hair function wp_kses_check_attr_val($value, $vless, $checkname, $checkvalue) ############################################################################### # This function performs different checks for attribute values. The currently # implemented checks are "maxlen", "minlen", "maxval", "minval" and "valueless" # with even more checks to come soon. ############################################################################### { $ok = true; switch (strtolower($checkname)) { case 'maxlen' : # The maxlen check makes sure that the attribute value has a length not # greater than the given value. This can be used to avoid Buffer Overflows # in WWW clients and various Internet servers. if (strlen($value) > $checkvalue) $ok = false; break; case 'minlen' : # The minlen check makes sure that the attribute value has a length not # smaller than the given value. if (strlen($value) < $checkvalue) $ok = false; break; case 'maxval' : # The maxval check does two things: it checks that the attribute value is # an integer from 0 and up, without an excessive amount of zeroes or # whitespace (to avoid Buffer Overflows). It also checks that the attribute # value is not greater than the given value. # This check can be used to avoid Denial of Service attacks. if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value)) $ok = false; if ($value > $checkvalue) $ok = false; break; case 'minval' : # The minval check checks that the attribute value is a positive integer, # and that it is not smaller than the given value. if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value)) $ok = false; if ($value < $checkvalue) $ok = false; break; case 'valueless' : # The valueless check checks if the attribute has a value # (like ) or not ('; break; case 'id': default: echo ''; break; } } function get_permalink($id = 0) { $rewritecode = array( '%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%', '%postname%', '%post_id%', '%category%', '%author%', '%pagename%' ); $post = &get_post($id); if ( $post->post_type == 'page' ) return get_page_link($post->ID); elseif ($post->post_type == 'attachment') return get_attachment_link($post->ID); $permalink = get_option('permalink_structure'); if ( '' != $permalink && 'draft' != $post->post_status ) { $unixtime = strtotime($post->post_date); $category = ''; if (strpos($permalink, '%category%') != false) { $cats = get_the_category($post->ID); if ( $cats ) usort($cats, '_get_the_category_usort_by_ID'); // order by ID $category = $cats[0]->category_nicename; if ( $parent=$cats[0]->category_parent ) $category = get_category_parents($parent, FALSE, '/', TRUE) . $category; } $authordata = get_userdata($post->post_author); $author = $authordata->user_nicename; $date = explode(" ",date('Y m d H i s', $unixtime)); $rewritereplace = array( $date[0], $date[1], $date[2], $date[3], $date[4], $date[5], $post->post_name, $post->ID, $category, $author, $post->post_name, ); $permalink = get_option('home') . str_replace($rewritecode, $rewritereplace, $permalink); $permalink = user_trailingslashit($permalink, 'single'); return apply_filters('post_link', $permalink, $post); } else { // if they're not using the fancy permalink option $permalink = get_option('home') . '/?p=' . $post->ID; return apply_filters('post_link', $permalink, $post); } } // get permalink from post ID function post_permalink($post_id = 0, $mode = '') { // $mode legacy return get_permalink($post_id); } // Respects page_on_front. Use this one. function get_page_link($id = false) { global $post; $id = (int) $id; if ( !$id ) $id = (int) $post->ID; if ( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') ) $link = get_option('home'); else $link = _get_page_link( $id ); return apply_filters('page_link', $link, $id); } // Ignores page_on_front. Internal use only. function _get_page_link( $id = false ) { global $post, $wp_rewrite; if ( !$id ) $id = (int) $post->ID; $pagestruct = $wp_rewrite->get_page_permastruct(); if ( '' != $pagestruct && 'draft' != $post->post_status ) { $link = get_page_uri($id); $link = str_replace('%pagename%', $link, $pagestruct); $link = get_option('home') . "/$link"; $link = user_trailingslashit($link, 'page'); } else { $link = get_option('home') . "/?page_id=$id"; } return apply_filters( '_get_page_link', $link, $id ); } function get_attachment_link($id = false) { global $post, $wp_rewrite; $link = false; if (! $id) { $id = (int) $post->ID; } $object = get_post($id); if ( $wp_rewrite->using_permalinks() && ($object->post_parent > 0) && ($object->post_parent != $id) ) { $parent = get_post($object->post_parent); if ( 'page' == $parent->post_type ) $parentlink = _get_page_link( $object->post_parent ); // Ignores page_on_front else $parentlink = get_permalink( $object->post_parent ); if (strpos($parentlink, '?') == false) $link = trim($parentlink, '/') . '/' . $object->post_name . '/'; } if (! $link ) { $link = get_bloginfo('url') . "/?attachment_id=$id"; } return apply_filters('attachment_link', $link, $id); } function get_year_link($year) { global $wp_rewrite; if ( !$year ) $year = gmdate('Y', time()+(get_option('gmt_offset') * 3600)); $yearlink = $wp_rewrite->get_year_permastruct(); if ( !empty($yearlink) ) { $yearlink = str_replace('%year%', $year, $yearlink); return apply_filters('year_link', get_option('home') . user_trailingslashit($yearlink, 'year'), $year); } else { return apply_filters('year_link', get_option('home') . '/?m=' . $year, $year); } } function get_month_link($year, $month) { global $wp_rewrite; if ( !$year ) $year = gmdate('Y', time()+(get_option('gmt_offset') * 3600)); if ( !$month ) $month = gmdate('m', time()+(get_option('gmt_offset') * 3600)); $monthlink = $wp_rewrite->get_month_permastruct(); if ( !empty($monthlink) ) { $monthlink = str_replace('%year%', $year, $monthlink); $monthlink = str_replace('%monthnum%', zeroise(intval($month), 2), $monthlink); return apply_filters('month_link', get_option('home') . user_trailingslashit($monthlink, 'month'), $year, $month); } else { return apply_filters('month_link', get_option('home') . '/?m=' . $year . zeroise($month, 2), $year, $month); } } function get_day_link($year, $month, $day) { global $wp_rewrite; if ( !$year ) $year = gmdate('Y', time()+(get_option('gmt_offset') * 3600)); if ( !$month ) $month = gmdate('m', time()+(get_option('gmt_offset') * 3600)); if ( !$day ) $day = gmdate('j', time()+(get_option('gmt_offset') * 3600)); $daylink = $wp_rewrite->get_day_permastruct(); if ( !empty($daylink) ) { $daylink = str_replace('%year%', $year, $daylink); $daylink = str_replace('%monthnum%', zeroise(intval($month), 2), $daylink); $daylink = str_replace('%day%', zeroise(intval($day), 2), $daylink); return apply_filters('day_link', get_option('home') . user_trailingslashit($daylink, 'day'), $year, $month, $day); } else { return apply_filters('day_link', get_option('home') . '/?m=' . $year . zeroise($month, 2) . zeroise($day, 2), $year, $month, $day); } } function get_feed_link($feed='rss2') { global $wp_rewrite; $do_perma = 0; $feed_url = get_option('siteurl'); $comment_feed_url = $feed_url; $permalink = $wp_rewrite->get_feed_permastruct(); if ( '' != $permalink ) { if ( false != strpos($feed, 'comments_') ) { $feed = str_replace('comments_', '', $feed); $permalink = $wp_rewrite->get_comment_feed_permastruct(); } if ( 'rss2' == $feed ) $feed = ''; $permalink = str_replace('%feed%', $feed, $permalink); $permalink = preg_replace('#/+#', '/', "/$permalink"); $output = get_option('home') . user_trailingslashit($permalink, 'feed'); } else { if ( false != strpos($feed, 'comments_') ) $feed = str_replace('comments_', 'comments-', $feed); $output = get_option('home') . "/?feed={$feed}"; } return apply_filters('feed_link', $output, $feed); } function get_post_comments_feed_link($post_id = '', $feed = 'rss2') { global $id; if ( empty($post_id) ) $post_id = (int) $id; if ( '' != get_option('permalink_structure') ) { $url = trailingslashit( get_permalink() ) . 'feed'; if ( 'rss2' != $feed ) $url .= "/$feed"; $url = user_trailingslashit($url, 'single_feed'); } else { $url = get_option('home') . "/?feed=$feed&p=$id"; } return apply_filters('post_comments_feed_link', $url); } function edit_post_link($link = 'Edit This', $before = '', $after = '') { global $post; if ( is_attachment() ) return; if( $post->post_type == 'page' ) { if ( ! current_user_can('edit_page', $post->ID) ) return; $file = 'page'; } else { if ( ! current_user_can('edit_post', $post->ID) ) return; $file = 'post'; } $location = get_option('siteurl') . "/wp-admin/{$file}.php?action=edit&post=$post->ID"; echo $before . "$link" . $after; } function edit_comment_link($link = 'Edit This', $before = '', $after = '') { global $post, $comment; if( $post->post_type == 'page' ){ if ( ! current_user_can('edit_page', $post->ID) ) return; } else { if ( ! current_user_can('edit_post', $post->ID) ) return; } $location = get_option('siteurl') . "/wp-admin/comment.php?action=editcomment&c=$comment->comment_ID"; echo $before . "$link" . $after; } // Navigation links function get_previous_post($in_same_cat = false, $excluded_categories = '') { global $post, $wpdb; if( !is_single() || is_attachment() ) return null; $current_post_date = $post->post_date; $join = ''; if ( $in_same_cat ) { $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id "; $cat_array = get_the_category($post->ID); $join .= ' AND (category_id = ' . intval($cat_array[0]->cat_ID); for ( $i = 1; $i < (count($cat_array)); $i++ ) { $join .= ' OR category_id = ' . intval($cat_array[$i]->cat_ID); } $join .= ')'; } $sql_exclude_cats = ''; if ( !empty($excluded_categories) ) { $blah = explode(' and ', $excluded_categories); foreach ( $blah as $category ) { $category = intval($category); $sql_cat_ids = " OR pc.category_ID = '$category'"; } $posts_in_ex_cats = $wpdb->get_col("SELECT p.ID FROM $wpdb->posts p LEFT JOIN $wpdb->post2cat pc ON pc.post_id=p.ID WHERE 1 = 0 $sql_cat_ids GROUP BY p.ID"); $posts_in_ex_cats_sql = 'AND ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')'; } $join = apply_filters( 'get_previous_post_join', $join, $in_same_cat, $excluded_categories ); $where = apply_filters( 'get_previous_post_where', "WHERE post_date < '$current_post_date' AND post_type = 'post' AND post_status = 'publish' $posts_in_ex_cats_sql", $in_same_cat, $excluded_categories ); $sort = apply_filters( 'get_previous_post_sort', 'ORDER BY post_date DESC' ); // LIMIT 1 return @$wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts $join $where $sort"); } function get_next_post($in_same_cat = false, $excluded_categories = '') { global $post, $wpdb; if( !is_single() || is_attachment() ) return null; $current_post_date = $post->post_date; $join = ''; if ( $in_same_cat ) { $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id "; $cat_array = get_the_category($post->ID); $join .= ' AND (category_id = ' . intval($cat_array[0]->cat_ID); for ( $i = 1; $i < (count($cat_array)); $i++ ) { $join .= ' OR category_id = ' . intval($cat_array[$i]->cat_ID); } $join .= ')'; } $sql_exclude_cats = ''; if ( !empty($excluded_categories) ) { $blah = explode(' and ', $excluded_categories); foreach ( $blah as $category ) { $category = intval($category); $sql_cat_ids = " OR pc.category_ID = '$category'"; } $posts_in_ex_cats = $wpdb->get_col("SELECT p.ID from $wpdb->posts p LEFT JOIN $wpdb->post2cat pc ON pc.post_id = p.ID WHERE 1 = 0 $sql_cat_ids GROUP BY p.ID"); $posts_in_ex_cats_sql = 'AND ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')'; } $join = apply_filters( 'get_next_post_join', $join, $in_same_cat, $excluded_categories ); $where = apply_filters( 'get_next_post_where', "WHERE post_date > '$current_post_date' AND post_type = 'post' AND post_status = 'publish' $posts_in_ex_cats_sql AND ID <> " . $post->ID, $in_same_cat, $excluded_categories ); $sort = apply_filters( 'get_next_post_sort', 'ORDER BY post_date ASC' ); // LIMIT 1 return @$wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts $join $where $sort"); } function previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') { if ( is_attachment() ) $post = & get_post($GLOBALS['post']->post_parent); else $post = get_previous_post($in_same_cat, $excluded_categories); if ( !$post ) return; $title = apply_filters('the_title', $post->post_title, $post); $string = ''; $link = str_replace('%title', $title, $link); $link = $pre . $string . $link . ''; $format = str_replace('%link', $link, $format); echo $format; } function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { $post = get_next_post($in_same_cat, $excluded_categories); if ( !$post ) return; $title = apply_filters('the_title', $post->post_title, $post); $string = ''; $link = str_replace('%title', $title, $link); $link = $string . $link . ''; $format = str_replace('%link', $link, $format); echo $format; } function get_pagenum_link($pagenum = 1) { global $wp_rewrite; $qstr = $_SERVER['REQUEST_URI']; $page_querystring = "paged"; $page_modstring = "page/"; $page_modregex = "page/?"; $permalink = 0; $home_root = parse_url(get_option('home')); $home_root = $home_root['path']; $home_root = trailingslashit($home_root); $qstr = preg_replace('|^'. $home_root . '|', '', $qstr); $qstr = preg_replace('|^/+|', '', $qstr); $index = $_SERVER['PHP_SELF']; $index = preg_replace('|^'. $home_root . '|', '', $index); $index = preg_replace('|^/+|', '', $index); // if we already have a QUERY style page string if ( stripos( $qstr, $page_querystring ) != false ) { $replacement = "$page_querystring=$pagenum"; $qstr = preg_replace("/".$page_querystring."[^\d]+\d+/", $replacement, $qstr); // if we already have a mod_rewrite style page string } elseif ( preg_match( '|'.$page_modregex.'\d+|', $qstr ) ) { $permalink = 1; $qstr = preg_replace('|'.$page_modregex.'\d+|',"$page_modstring$pagenum",$qstr); // if we don't have a page string at all ... // lets see what sort of URL we have... } else { // we need to know the way queries are being written // if there's a querystring_start (a "?" usually), it's definitely not mod_rewritten if ( stripos( $qstr, '?' ) != false ) { // so append the query string (using &, since we already have ?) $qstr .= '&' . $page_querystring . '=' . $pagenum; // otherwise, it could be rewritten, OR just the default index ... } elseif( '' != get_option('permalink_structure') && ! is_admin() ) { $permalink = 1; $index = $wp_rewrite->index; // If it's not a path info permalink structure, trim the index. if ( !$wp_rewrite->using_index_permalinks() ) { $qstr = preg_replace("#/*" . $index . "/*#", '/', $qstr); } else { // If using path info style permalinks, make sure the index is in // the URL. if ( strpos($qstr, $index) == false ) $qstr = '/' . $index . $qstr; } $qstr = trailingslashit($qstr) . $page_modstring . $pagenum; } else { $qstr = $index . '?' . $page_querystring . '=' . $pagenum; } } $qstr = preg_replace('|^/+|', '', $qstr); if ( $permalink ) $qstr = user_trailingslashit($qstr, 'paged'); // showing /page/1/ or ?paged=1 is redundant if ( 1 == $pagenum ) { $qstr = str_replace(user_trailingslashit('index.php/page/1', 'paged'), '', $qstr); // for PATHINFO style $qstr = str_replace(user_trailingslashit('page/1', 'paged'), '', $qstr); // for mod_rewrite style $qstr = remove_query_arg('paged', $qstr); // for query style } $qstr = preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', trailingslashit( get_option('home') ) . $qstr ); return $qstr; } function get_next_posts_page_link($max_page = 0) { global $paged, $pagenow; if ( !is_single() ) { if ( !$paged ) $paged = 1; $nextpage = intval($paged) + 1; if ( !$max_page || $max_page >= $nextpage ) return get_pagenum_link($nextpage); } } function next_posts($max_page = 0) { echo clean_url(get_next_posts_page_link($max_page)); } function next_posts_link($label='Next Page »', $max_page=0) { global $paged, $wpdb, $wp_query; if ( !$max_page ) { $max_page = $wp_query->max_num_pages; } if ( !$paged ) $paged = 1; $nextpage = intval($paged) + 1; if ( (! is_single()) && (empty($paged) || $nextpage <= $max_page) ) { echo ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; } } function get_previous_posts_page_link() { global $paged, $pagenow; if ( !is_single() ) { $nextpage = intval($paged) - 1; if ( $nextpage < 1 ) $nextpage = 1; return get_pagenum_link($nextpage); } } function previous_posts() { echo clean_url(get_previous_posts_page_link()); } function previous_posts_link($label='« Previous Page') { global $paged; if ( (!is_single()) && ($paged > 1) ) { echo ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; } } function posts_nav_link($sep=' — ', $prelabel='« Previous Page', $nxtlabel='Next Page »') { global $wp_query; if ( !is_singular() ) { $max_num_pages = $wp_query->max_num_pages; $paged = get_query_var('paged'); //only have sep if there's both prev and next results if ($paged < 2 || $paged >= $max_num_pages) { $sep = ''; } if ( $max_num_pages > 1 ) { previous_posts_link($prelabel); echo preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $sep); next_posts_link($nxtlabel); } } } ?> wordpress/wp-includes/locale.phpZweekday[0] = __('Sunday'); $this->weekday[1] = __('Monday'); $this->weekday[2] = __('Tuesday'); $this->weekday[3] = __('Wednesday'); $this->weekday[4] = __('Thursday'); $this->weekday[5] = __('Friday'); $this->weekday[6] = __('Saturday'); // The first letter of each day. The _%day%_initial suffix is a hack to make // sure the day initials are unique. $this->weekday_initial[__('Sunday')] = __('S_Sunday_initial'); $this->weekday_initial[__('Monday')] = __('M_Monday_initial'); $this->weekday_initial[__('Tuesday')] = __('T_Tuesday_initial'); $this->weekday_initial[__('Wednesday')] = __('W_Wednesday_initial'); $this->weekday_initial[__('Thursday')] = __('T_Thursday_initial'); $this->weekday_initial[__('Friday')] = __('F_Friday_initial'); $this->weekday_initial[__('Saturday')] = __('S_Saturday_initial'); foreach ($this->weekday_initial as $weekday_ => $weekday_initial_) { $this->weekday_initial[$weekday_] = preg_replace('/_.+_initial$/', '', $weekday_initial_); } // Abbreviations for each day. $this->weekday_abbrev[__('Sunday')] = __('Sun'); $this->weekday_abbrev[__('Monday')] = __('Mon'); $this->weekday_abbrev[__('Tuesday')] = __('Tue'); $this->weekday_abbrev[__('Wednesday')] = __('Wed'); $this->weekday_abbrev[__('Thursday')] = __('Thu'); $this->weekday_abbrev[__('Friday')] = __('Fri'); $this->weekday_abbrev[__('Saturday')] = __('Sat'); // The Months $this->month['01'] = __('January'); $this->month['02'] = __('February'); $this->month['03'] = __('March'); $this->month['04'] = __('April'); $this->month['05'] = __('May'); $this->month['06'] = __('June'); $this->month['07'] = __('July'); $this->month['08'] = __('August'); $this->month['09'] = __('September'); $this->month['10'] = __('October'); $this->month['11'] = __('November'); $this->month['12'] = __('December'); // Abbreviations for each month. Uses the same hack as above to get around the // 'May' duplication. $this->month_abbrev[__('January')] = __('Jan_January_abbreviation'); $this->month_abbrev[__('February')] = __('Feb_February_abbreviation'); $this->month_abbrev[__('March')] = __('Mar_March_abbreviation'); $this->month_abbrev[__('April')] = __('Apr_April_abbreviation'); $this->month_abbrev[__('May')] = __('May_May_abbreviation'); $this->month_abbrev[__('June')] = __('Jun_June_abbreviation'); $this->month_abbrev[__('July')] = __('Jul_July_abbreviation'); $this->month_abbrev[__('August')] = __('Aug_August_abbreviation'); $this->month_abbrev[__('September')] = __('Sep_September_abbreviation'); $this->month_abbrev[__('October')] = __('Oct_October_abbreviation'); $this->month_abbrev[__('November')] = __('Nov_November_abbreviation'); $this->month_abbrev[__('December')] = __('Dec_December_abbreviation'); foreach ($this->month_abbrev as $month_ => $month_abbrev_) { $this->month_abbrev[$month_] = preg_replace('/_.+_abbreviation$/', '', $month_abbrev_); } // The Meridiems $this->meridiem['am'] = __('am'); $this->meridiem['pm'] = __('pm'); $this->meridiem['AM'] = __('AM'); $this->meridiem['PM'] = __('PM'); // Import global locale vars set during inclusion of $locale.php. foreach ( $this->locale_vars as $var ) { if ( isset($GLOBALS[$var]) ) $this->$var = $GLOBALS[$var]; } } function get_weekday($weekday_number) { return $this->weekday[$weekday_number]; } function get_weekday_initial($weekday_name) { return $this->weekday_initial[$weekday_name]; } function get_weekday_abbrev($weekday_name) { return $this->weekday_abbrev[$weekday_name]; } function get_month($month_number) { return $this->month[zeroise($month_number, 2)]; } function get_month_initial($month_name) { return $this->month_initial[$month_name]; } function get_month_abbrev($month_name) { return $this->month_abbrev[$month_name]; } function get_meridiem($meridiem) { return $this->meridiem[$meridiem]; } // Global variables are deprecated. For backwards compatibility only. function register_globals() { $GLOBALS['weekday'] = $this->weekday; $GLOBALS['weekday_initial'] = $this->weekday_initial; $GLOBALS['weekday_abbrev'] = $this->weekday_abbrev; $GLOBALS['month'] = $this->month; $GLOBALS['month_abbrev'] = $this->month_abbrev; } function WP_Locale() { $this->init(); $this->register_globals(); } } ?>#wordpress/wp-includes/pluggable.phpMID) ) return $current_user; $current_user = new WP_User($id, $name); setup_userdata($current_user->ID); do_action('set_current_user'); return $current_user; } endif; if ( !function_exists('wp_get_current_user') ) : function wp_get_current_user() { global $current_user; get_currentuserinfo(); return $current_user; } endif; if ( !function_exists('get_currentuserinfo') ) : function get_currentuserinfo() { global $current_user; if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) return false; if ( ! empty($current_user) ) return; if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) || !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true) ) { wp_set_current_user(0); return false; } $user_login = $_COOKIE[USER_COOKIE]; wp_set_current_user(0, $user_login); } endif; if ( !function_exists('get_userdata') ) : function get_userdata( $user_id ) { global $wpdb; $user_id = (int) $user_id; if ( $user_id == 0 ) return false; $user = wp_cache_get($user_id, 'users'); if ( $user ) return $user; if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID = " . $user_id) ) // LIMIT 1 return false; $wpdb->hide_errors(); $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user_id); $wpdb->show_errors(); if ($metavalues) { foreach ( $metavalues as $meta ) { $value = maybe_unserialize($meta->meta_value); $user->{$meta->meta_key} = $value; // We need to set user_level from meta, not row if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) $user->user_level = $meta->meta_value; } // end foreach } //end if // For backwards compat. if ( isset($user->first_name) ) $user->user_firstname = $user->first_name; if ( isset($user->last_name) ) $user->user_lastname = $user->last_name; if ( isset($user->description) ) $user->user_description = $user->description; wp_cache_add($user_id, $user, 'users'); wp_cache_add($user->user_login, $user_id, 'userlogins'); return $user; } endif; if ( !function_exists('update_user_cache') ) : function update_user_cache() { return true; } endif; if ( !function_exists('get_userdatabylogin') ) : function get_userdatabylogin($user_login) { global $wpdb; $user_login = sanitize_user( $user_login ); if ( empty( $user_login ) ) return false; $user_id = wp_cache_get($user_login, 'userlogins'); $userdata = wp_cache_get($user_id, 'users'); if ( $userdata ) return $userdata; $user_login = $wpdb->escape($user_login); if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") ) return false; $wpdb->hide_errors(); $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user->ID); $wpdb->show_errors(); if ($metavalues) { foreach ( $metavalues as $meta ) { $value = maybe_unserialize($meta->meta_value); $user->{$meta->meta_key} = $value; // We need to set user_level from meta, not row if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) $user->user_level = $meta->meta_value; } } // For backwards compat. if ( isset($user->first_name) ) $user->user_firstname = $user->first_name; if ( isset($user->last_name) ) $user->user_lastname = $user->last_name; if ( isset($user->description) ) $user->user_description = $user->description; wp_cache_add($user->ID, $user, 'users'); wp_cache_add($user->user_login, $user->ID, 'userlogins'); return $user; } endif; if ( !function_exists( 'wp_mail' ) ) : function wp_mail($to, $subject, $message, $headers = '') { global $phpmailer; if ( !is_object( $phpmailer ) ) { require_once(ABSPATH . WPINC . '/class-phpmailer.php'); require_once(ABSPATH . WPINC . '/class-smtp.php'); $phpmailer = new PHPMailer(); } $mail = compact('to', 'subject', 'message', 'headers'); $mail = apply_filters('wp_mail', $mail); extract($mail, EXTR_SKIP); if ( $headers == '' ) { $headers = "MIME-Version: 1.0\n" . "From: " . apply_filters('wp_mail_from', "wordpress@" . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']))) . "\n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n"; } $phpmailer->ClearAddresses(); $phpmailer->ClearCCs(); $phpmailer->ClearBCCs(); $phpmailer->ClearReplyTos(); $phpmailer->ClearAllRecipients(); $phpmailer->ClearCustomHeaders(); $phpmailer->FromName = "WordPress"; $phpmailer->AddAddress("$to", ""); $phpmailer->Subject = $subject; $phpmailer->Body = $message; $phpmailer->IsHTML(false); $phpmailer->IsMail(); // set mailer to use php mail() do_action_ref_array('phpmailer_init', array(&$phpmailer)); $mailheaders = (array) explode( "\n", $headers ); foreach ( $mailheaders as $line ) { $header = explode( ":", $line ); switch ( trim( $header[0] ) ) { case "From": $from = trim( str_replace( '"', '', $header[1] ) ); if ( strpos( $from, '<' ) ) { $phpmailer->FromName = str_replace( '"', '', substr( $header[1], 0, strpos( $header[1], '<' ) - 1 ) ); $from = trim( substr( $from, strpos( $from, '<' ) + 1 ) ); $from = str_replace( '>', '', $from ); } else { $phpmailer->FromName = $from; } $phpmailer->From = trim( $from ); break; default: if ( $line != '' && $header[0] != 'MIME-Version' && $header[0] != 'Content-Type' ) $phpmailer->AddCustomHeader( $line ); break; } } $result = @$phpmailer->Send(); return $result; } endif; if ( !function_exists('wp_login') ) : function wp_login($username, $password, $already_md5 = false) { global $wpdb, $error; $username = sanitize_user($username); if ( '' == $username ) return false; if ( '' == $password ) { $error = __('ERROR: The password field is empty.'); return false; } $login = get_userdatabylogin($username); //$login = $wpdb->get_row("SELECT ID, user_login, user_pass FROM $wpdb->users WHERE user_login = '$username'"); if (!$login) { $error = __('ERROR: Invalid username.'); return false; } else { // If the password is already_md5, it has been double hashed. // Otherwise, it is plain text. if ( ($already_md5 && md5($login->user_pass) == $password) || ($login->user_login == $username && $login->user_pass == md5($password)) ) { return true; } else { $error = __('ERROR: Incorrect password.'); $pwd = ''; return false; } } } endif; if ( !function_exists('is_user_logged_in') ) : function is_user_logged_in() { $user = wp_get_current_user(); if ( $user->id == 0 ) return false; return true; } endif; if ( !function_exists('auth_redirect') ) : function auth_redirect() { // Checks if a user is logged in, if not redirects them to the login page if ( (!empty($_COOKIE[USER_COOKIE]) && !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) || (empty($_COOKIE[USER_COOKIE])) ) { nocache_headers(); wp_redirect(get_option('siteurl') . '/wp-login.php?redirect_to=' . urlencode($_SERVER['REQUEST_URI'])); exit(); } } endif; if ( !function_exists('check_admin_referer') ) : function check_admin_referer($action = -1) { $adminurl = strtolower(get_option('siteurl')).'/wp-admin'; $referer = strtolower(wp_get_referer()); if ( !wp_verify_nonce($_REQUEST['_wpnonce'], $action) && !(-1 == $action && strpos($referer, $adminurl) != false)) { wp_nonce_ays($action); die(); } do_action('check_admin_referer', $action); }endif; if ( !function_exists('check_ajax_referer') ) : function check_ajax_referer() { $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie foreach ( $cookie as $tasty ) { if ( false != strpos($tasty, USER_COOKIE) ) $user = substr(strstr($tasty, '='), 1); if ( false != strpos($tasty, PASS_COOKIE) ) $pass = substr(strstr($tasty, '='), 1); } if ( !wp_login( $user, $pass, true ) ) die('-1'); do_action('check_ajax_referer'); } endif; // Cookie safe redirect. Works around IIS Set-Cookie bug. // http://support.microsoft.com/kb/q176113/ if ( !function_exists('wp_redirect') ) : function wp_redirect($location, $status = 302) { global $is_IIS; $location = apply_filters('wp_redirect', $location, $status); if ( !$location ) // allows the wp_redirect filter to cancel a redirect return false; $location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%]|i', '', $location); $location = wp_kses_no_null($location); // remove %0d and %0a from location $strip = array('%0d', '%0a'); $found = true; while($found) { $found = false; foreach($strip as $val) { while(strpos($location, $val) != false) { $found = true; $location = str_replace($val, '', $location); } } } if ( $is_IIS ) { header("Refresh: 0;url=$location"); } else { if ( php_sapi_name() != 'cgi-fcgi' ) status_header($status); // This causes problems on IIS and some FastCGI setups header("Location: $location"); } } endif; if ( !function_exists('wp_get_cookie_login') ): function wp_get_cookie_login() { if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) ) return false; return array('login' => $_COOKIE[USER_COOKIE], 'password' => $_COOKIE[PASS_COOKIE]); } endif; if ( !function_exists('wp_setcookie') ) : function wp_setcookie($username, $password, $already_md5 = false, $home = '', $siteurl = '', $remember = false) { if ( !$already_md5 ) $password = md5( md5($password) ); // Double hash the password in the cookie. if ( empty($home) ) $cookiepath = COOKIEPATH; else $cookiepath = preg_replace('|https?://[^/]+|i', '', $home . '/' ); if ( empty($siteurl) ) { $sitecookiepath = SITECOOKIEPATH; $cookiehash = COOKIEHASH; } else { $sitecookiepath = preg_replace('|https?://[^/]+|i', '', $siteurl . '/' ); $cookiehash = md5($siteurl); } if ( $remember ) $expire = time() + 31536000; else $expire = 0; setcookie(USER_COOKIE, $username, $expire, $cookiepath, COOKIE_DOMAIN); setcookie(PASS_COOKIE, $password, $expire, $cookiepath, COOKIE_DOMAIN); if ( $cookiepath != $sitecookiepath ) { setcookie(USER_COOKIE, $username, $expire, $sitecookiepath, COOKIE_DOMAIN); setcookie(PASS_COOKIE, $password, $expire, $sitecookiepath, COOKIE_DOMAIN); } } endif; if ( !function_exists('wp_clearcookie') ) : function wp_clearcookie() { setcookie(USER_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN); setcookie(PASS_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN); setcookie(USER_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN); setcookie(PASS_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN); } endif; if ( ! function_exists('wp_notify_postauthor') ) : function wp_notify_postauthor($comment_id, $comment_type='') { global $wpdb; $comment = get_comment($comment_id); $post = get_post($comment->comment_post_ID); $user = get_userdata( $post->post_author ); if ('' == $user->user_email) return false; // If there's no email to send the comment to $comment_author_domain = @gethostbyaddr($comment->comment_author_IP); $blogname = get_option('blogname'); if ( empty( $comment_type ) ) $comment_type = 'comment'; if ('comment' == $comment_type) { $notify_message = sprintf( __('New comment on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n"; $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= sprintf( __('Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s'), $comment->comment_author_IP ) . "\r\n"; $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= __('You can see all comments on this post here: ') . "\r\n"; $subject = sprintf( __('[%1$s] Comment: "%2$s"'), $blogname, $post->post_title ); } elseif ('trackback' == $comment_type) { $notify_message = sprintf( __('New trackback on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n"; $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= __('Excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= __('You can see all trackbacks on this post here: ') . "\r\n"; $subject = sprintf( __('[%1$s] Trackback: "%2$s"'), $blogname, $post->post_title ); } elseif ('pingback' == $comment_type) { $notify_message = sprintf( __('New pingback on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n"; $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= __('Excerpt: ') . "\r\n" . sprintf('[...] %s [...]', $comment->comment_content ) . "\r\n\r\n"; $notify_message .= __('You can see all pingbacks on this post here: ') . "\r\n"; $subject = sprintf( __('[%1$s] Pingback: "%2$s"'), $blogname, $post->post_title ); } $notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n"; $notify_message .= sprintf( __('Delete it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Spam it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&dt=spam&c=$comment_id" ) . "\r\n"; $wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); if ( '' == $comment->comment_author ) { $from = "From: \"$blogname\" <$wp_email>"; if ( '' != $comment->comment_author_email ) $reply_to = "Reply-To: $comment->comment_author_email"; } else { $from = "From: \"$comment->comment_author\" <$wp_email>"; if ( '' != $comment->comment_author_email ) $reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>"; } $message_headers = "MIME-Version: 1.0\n" . "$from\n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n"; if ( isset($reply_to) ) $message_headers .= $reply_to . "\n"; $notify_message = apply_filters('comment_notification_text', $notify_message, $comment_id); $subject = apply_filters('comment_notification_subject', $subject, $comment_id); $message_headers = apply_filters('comment_notification_headers', $message_headers, $comment_id); @wp_mail($user->user_email, $subject, $notify_message, $message_headers); return true; } endif; /* wp_notify_moderator notifies the moderator of the blog (usually the admin) about a new comment that waits for approval always returns true */ if ( !function_exists('wp_notify_moderator') ) : function wp_notify_moderator($comment_id) { global $wpdb; if( get_option( "moderation_notify" ) == 0 ) return true; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = ". $comment_id); // LIMIT 1 $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID); // LIMIT 1 $comment_author_domain = @gethostbyaddr($comment->comment_author_IP); $comments_waiting = $wpdb->get_var("SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'"); $notify_message = sprintf( __('A new comment on the post #%1$s "%2$s" is waiting for your approval'), $post->ID, $post->post_title ) . "\r\n"; $notify_message .= get_permalink($comment->comment_post_ID) . "\r\n\r\n"; $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= sprintf( __('Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s'), $comment->comment_author_IP ) . "\r\n"; $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= sprintf( __('Approve it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=mac&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Delete it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Spam it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&dt=spam&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Currently %s comments are waiting for approval. Please visit the moderation panel:'), $comments_waiting ) . "\r\n"; $notify_message .= get_option('siteurl') . "/wp-admin/moderation.php\r\n"; $subject = sprintf( __('[%1$s] Please moderate: "%2$s"'), get_option('blogname'), $post->post_title ); $admin_email = get_option('admin_email'); $notify_message = apply_filters('comment_moderation_text', $notify_message, $comment_id); $subject = apply_filters('comment_moderation_subject', $subject, $comment_id); @wp_mail($admin_email, $subject, $notify_message); return true; } endif; if ( !function_exists('wp_new_user_notification') ) : function wp_new_user_notification($user_id, $plaintext_pass = '') { $user = new WP_User($user_id); $user_login = stripslashes($user->user_login); $user_email = stripslashes($user->user_email); $message = sprintf(__('New user registration on your blog %s:'), get_option('blogname')) . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n"; @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), get_option('blogname')), $message); if ( empty($plaintext_pass) ) return; $message = sprintf(__('Username: %s'), $user_login) . "\r\n"; $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n"; $message .= get_option('siteurl') . "/wp-login.php\r\n"; wp_mail($user_email, sprintf(__('[%s] Your username and password'), get_option('blogname')), $message); } endif; if ( !function_exists('wp_verify_nonce') ) : function wp_verify_nonce($nonce, $action = -1) { $user = wp_get_current_user(); $uid = (int) $user->id; $i = ceil(time() / 43200); //Allow for expanding range, but only do one check if we can if( substr(wp_hash($i . $action . $uid), -12, 10) == $nonce || substr(wp_hash(($i - 1) . $action . $uid), -12, 10) == $nonce ) return true; return false; } endif; if ( !function_exists('wp_create_nonce') ) : function wp_create_nonce($action = -1) { $user = wp_get_current_user(); $uid = (int) $user->id; $i = ceil(time() / 43200); return substr(wp_hash($i . $action . $uid), -12, 10); } endif; if ( !function_exists('wp_salt') ) : function wp_salt() { $salt = get_option('secret'); if ( empty($salt) ) $salt = DB_PASSWORD . DB_USER . DB_NAME . DB_HOST . ABSPATH; return $salt; } endif; if ( !function_exists('wp_hash') ) : function wp_hash($data) { $salt = wp_salt(); if ( function_exists('hash_hmac') ) { return hash_hmac('md5', $data, $salt); } else { return md5($data . $salt); } } endif; ?> wordpress/wp-includes/plugin.php1$function_to_add to. * @param callback $function_to_add The name of the function to be called when the filter is applied. * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action. * @param int $accepted_args optional. The number of arguments the function accept (default 1). In WordPress 1.5.1+, hooked functions can take extra arguments that are set when the matching do_action() or apply_filters() call is run. * @return boolean true if the $function_to_add is added succesfully to filter $tag. How many arguments your function takes. In WordPress 1.5.1+, hooked functions can take extra arguments that are set when the matching do_action() or apply_filters() call is run. For example, the action comment_id_not_found will pass any functions that hook onto it the ID of the requested comment. */ function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; // So the format is wp_filter['tag']['array of priorities']['array of functions serialized']['array of ['array (functions, accepted_args)]'] $wp_filter[$tag][$priority][_wp_filter_build_unique_id($tag, $function_to_add, $priority)] = array('function' => $function_to_add, 'accepted_args' => $accepted_args); unset( $merged_filters[ $tag ] ); return true; } /** * Call the functions added to a filter hook. * * The callback functions attached to filter hook $tag are invoked by * calling this function. This function can be used to create a new filter hook * by simply calling this function with the name of the new hook specified using * the $tag parameter. * @uses merge_filters Merges the filter hooks using this function. * @param string $tag The name of the filter hook. * @param string $string The text on which the filters hooked to $tag are applied on. * @param mixed $var,... Additional variables passed to the functions hooked to $tag. * @return string The text in $string after all hooked functions are applied to it. */ function apply_filters($tag, $string) { global $wp_filter, $merged_filters; if ( !isset( $merged_filters[ $tag ] ) ) merge_filters($tag); if ( !isset($wp_filter[$tag]) ) return $string; reset( $wp_filter[ $tag ] ); $args = func_get_args(); do{ foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ){ $args[1] = $string; $string = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args'])); } } while ( next($wp_filter[$tag]) ); return $string; } /** * Merge the filter functions of a specific filter hook with generic filter functions. * * It is possible to defined generic filter functions using the filter hook * all. These functions are called for every filter tag. This function * merges the functions attached to the all hook with the functions * of a specific hoook defined by $tag. * @param string $tag The filter hook of which the functions should be merged. */ function merge_filters($tag) { global $wp_filter, $merged_filters; if ( isset($wp_filter['all']) && is_array($wp_filter['all']) ) $wp_filter[$tag] = array_merge($wp_filter['all'], (array) $wp_filter[$tag]); if ( isset($wp_filter[$tag]) ){ reset($wp_filter[$tag]); uksort($wp_filter[$tag], "strnatcasecmp"); } $merged_filters[ $tag ] = true; } /** * Removes a function from a specified filter hook. * * This function removes a function attached to a specified filter hook. This * method can be used to remove default functions attached to a specific filter * hook and possibly replace them with a substitute. * @param string $tag The filter hook to which the function to be removed is hooked. * @param callback $function_to_remove The name of the function which should be removed. * @param int $priority optional. The priority of the function (default: 10). * @param int $accepted_args optional. The number of arguments the function accpets (default: 1). * @return boolean Whether the function is removed. */ function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; unset($GLOBALS['wp_filter'][$tag][$priority][_wp_filter_build_unique_id($tag, $function_to_remove, $priority)]); unset( $merged_filters[ $tag ] ); return true; } /** * Hooks a function on to a specific action. * * Actions are the hooks that the WordPress core launches at specific points * during execution, or when specific events occur. Plugins can specify that * one or more of its PHP functions are executed at these points, using the * Action API. * * @param string $tag The name of the action to which the $function_to-add is hooked. * @param callback $function_to_add The name of the function you wish to be called. Note: any of the syntaxes explained in the PHP documentation for the 'callback' type (http://us2.php.net/manual/en/language.pseudo-types.php#language.types.callback) are valid. * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action. * @param int $accepted_args optional. The number of arguments the function accept (default 1). In WordPress 1.5.1+, hooked functions can take extra arguments that are set when the matching do_action() or apply_filters() call is run. * @return boolean Always true. */ function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { add_filter($tag, $function_to_add, $priority, $accepted_args); } /** * Execute functions hooked on a specific action hook. * * This function invokes all functions attached to action hook $tag. * It is possible to create new action hooks by simply calling this function, * specifying the name of the new hook using the $tag parameter. * @uses merge_filters * @param string $tag The name of the action to be executed. * @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action. */ function do_action($tag, $arg = '') { global $wp_filter, $wp_actions; if ( is_array($wp_actions) ) $wp_actions[] = $tag; else $wp_actions = array($tag); $args = array(); if ( is_array($arg) && 1 == count($arg) && is_object($arg[0]) ) // array(&$this) $args[] =& $arg[0]; else $args[] = $arg; for ( $a = 2; $a < func_num_args(); $a++ ) $args[] = func_get_arg($a); merge_filters($tag); if ( !isset($wp_filter[$tag]) ) return; do{ foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ) call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); } while ( next($wp_filter[$tag]) ); } /** * Return the number times an action is fired. * @param string $tag The name of the action hook. * @return int The number of times action hook $tag is fired */ function did_action($tag) { global $wp_actions; if ( empty($wp_actions) ) return 0; return count(array_keys($wp_actions, $tag)); } /** * Execute functions hooked on a specific action hook, specifying arguments in a array. * * This function is identical to {@link do_action}, but the argumetns passe to * the functions hooked to $tag are supplied using an array. * @param string $tag The name of the action to be executed. * @param array $args The arguments supplied to the functions hooked to $tag */ function do_action_ref_array($tag, $args) { global $wp_filter, $wp_actions; if ( !is_array($wp_actions) ) $wp_actions = array($tag); else $wp_actions[] = $tag; merge_filters($tag); if ( !isset($wp_filter[$tag]) ) return; do{ foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ) call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); } while ( next($wp_filter[$tag]) ); } /** * Removes a function from a specified action hook. * * This function removes a function attached to a specified action hook. This * method can be used to remove default functions attached to a specific filter * hook and possibly replace them with a substitute. * @param string $tag The action hook to which the function to be removed is hooked. * @param callback $function_to_remove The name of the function which should be removed. * @param int $priority optional The priority of the function (default: 10). * @param int $accepted_args optional. The number of arguments the function accpets (default: 1). * @return boolean Whether the function is removed. */ function remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { remove_filter($tag, $function_to_remove, $priority, $accepted_args); } // // Functions for handling plugins. // /** * Gets the basename of a plugin. * * This method extract the name of a plugin from its filename. * @param string $file The filename of plugin. * @return string The name of a plugin. */ function plugin_basename($file) { $file = str_replace('\\','/',$file); // sanitize for Win32 installs $file = preg_replace('|/+|','/', $file); // remove any duplicate slash $file = preg_replace('|^.*/wp-content/plugins/|','',$file); // get relative path from plugins dir return $file; } /** * Hook a function on a plugin activation action hook. * * When a plugin is activated, the action 'activate_PLUGINNAME' hook is * activated. In the name of this hook, PLUGINNAME is replaced with the name of * the plugin, including the optional subdirectory. For example, when the plugin * is located in wp-content/plugin/sampleplugin/sample.php, then the * name of this hook will become 'activate_sampleplugin/sample.php'. * When the plugin consists of only one file and is (as by default) located at * wp-content/plugin/sample.php the name of this hook will be * 'activate_sample.php'. * @param string $file The filename of the plugin including the path. * @param string $function the function hooked to the 'activate_PLUGIN' action. */ function register_activation_hook($file, $function) { $file = plugin_basename($file); add_action('activate_' . $file, $function); } /** * Hook a function on a plugin deactivation action hook. * * When a plugin is deactivated, the action 'deactivate_PLUGINNAME' hook is * deactivated. In the name of this hook, PLUGINNAME is replaced with the name of * the plugin, including the optional subdirectory. For example, when the plugin * is located in wp-content/plugin/sampleplugin/sample.php, then the * name of this hook will become 'activate_sampleplugin/sample.php'. * When the plugin consists of only one file and is (as by default) located at * wp-content/plugin/sample.php the name of this hook will be * 'activate_sample.php'. * @param string $file The filename of the plugin including the path. * @param string $function the function hooked to the 'activate_PLUGIN' action. */ function register_deactivation_hook($file, $function) { $file = plugin_basename($file); add_action('deactivate_' . $file, $function); } function _wp_filter_build_unique_id($tag, $function, $priority = 10) { global $wp_filter; // If function then just skip all of the tests and not overwrite the following. if( is_string($function) ) return $function; // Object Class Calling else if(is_object($function[0]) ) { $obj_idx = get_class($function[0]).$function[1]; if( is_null($function[0]->wp_filter_id) ) { $count = count((array)$wp_filter[$tag][$priority]); $function[0]->wp_filter_id = $count; $obj_idx .= $count; unset($count); } else $obj_idx .= $function[0]->wp_filter_id; return $obj_idx; } // Static Calling else if( is_string($function[0]) ) return $function[0].$function[1]; } ?>wordpress/wp-includes/post.php & $GLOBALS['post']->post_parent); else return false; } elseif ( is_object($args) ) $r = array('post_parent' => $post->post_parent); elseif ( is_numeric($args) ) $r = array('post_parent' => $args); elseif ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('numberposts' => -1, 'post_type' => '', 'post_status' => '', 'post_parent' => 0); $r = array_merge($defaults, $r); $children = get_posts( $r ); if ( $children ) { foreach ( $children as $key => $child ) { $post_cache[$blog_id][$child->ID] =& $children[$key]; $kids[$child->ID] =& $children[$key]; } } else { return false; } if ( $output == OBJECT ) { return $kids; } elseif ( $output == ARRAY_A ) { foreach ( $kids as $kid ) $weeuns[$kid->ID] = get_object_vars($kids[$kid->ID]); return $weeuns; } elseif ( $output == ARRAY_N ) { foreach ( $kids as $kid ) $babes[$kid->ID] = array_values(get_object_vars($kids[$kid->ID])); return $babes; } else { return $kids; } } // get extended entry info () function get_extended($post) { //Match the new style more links if ( preg_match('//', $post, $matches) ) { list($main, $extended) = explode($matches[0], $post, 2); } else { $main = $post; $extended = ''; } // Strip leading and trailing whitespace $main = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $main); $extended = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $extended); return array('main' => $main, 'extended' => $extended); } // Retrieves post data given a post ID or post object. // Handles post caching. function &get_post(&$post, $output = OBJECT) { global $post_cache, $wpdb, $blog_id; if ( empty($post) ) { if ( isset($GLOBALS['post']) ) $_post = & $GLOBALS['post']; else $_post = null; } elseif ( is_object($post) ) { if ( 'page' == $post->post_type ) return get_page($post, $output); if ( !isset($post_cache[$blog_id][$post->ID]) ) $post_cache[$blog_id][$post->ID] = &$post; $_post = & $post_cache[$blog_id][$post->ID]; } else { $post = (int) $post; if ( isset($post_cache[$blog_id][$post]) ) $_post = & $post_cache[$blog_id][$post]; elseif ( $_post = wp_cache_get($post, 'pages') ) return get_page($_post, $output); else { $query = "SELECT * FROM $wpdb->posts WHERE ID = " . $post; // LIMIT 1 $_post = & $wpdb->get_row($query); if ( 'page' == $_post->post_type ) return get_page($_post, $output); $post_cache[$blog_id][$post] = & $_post; } } if ( defined('WP_IMPORTING') ) unset($post_cache[$blog_id]); if ( $output == OBJECT ) { return $_post; } elseif ( $output == ARRAY_A ) { return get_object_vars($_post); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_post)); } else { return $_post; } } // Takes a post ID, returns its mime type. function get_post_mime_type($ID = '') { $post = & get_post($ID); if ( is_object($post) ) return $post->post_mime_type; return false; } function get_post_status($ID = '') { $post = get_post($ID); if ( is_object($post) ) { if ( ('attachment' == $post->post_type) && $post->post_parent && ($post->ID != $post->post_parent) ) return get_post_status($post->post_parent); else return $post->post_status; } return false; } function get_post_type($post = false) { global $wpdb, $posts; if ( false == $post ) $post = $posts[0]; elseif ( (int) $post ) $post = get_post($post, OBJECT); if ( is_object($post) ) return $post->post_type; return false; } function get_posts($args) { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('numberposts' => 5, 'offset' => 0, 'category' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' =>'', 'post_type' => 'post', 'post_status' => 'publish', 'post_parent' => 0); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $numberposts = (int) $numberposts; $offset = (int) $offset; $category = (int) $category; $post_parent = (int) $post_parent; $inclusions = ''; if ( !empty($include) ) { $offset = 0; //ignore offset, category, exclude, meta_key, and meta_value, post_parent if using include $category = 0; $exclude = ''; $meta_key = ''; $meta_value = ''; $post_parent = 0; $incposts = preg_split('/[\s,]+/',$include); $numberposts = count($incposts); // only the number of posts included if ( count($incposts) ) { foreach ( $incposts as $incpost ) { if (empty($inclusions)) $inclusions = ' AND ( ID = ' . intval($incpost) . ' '; else $inclusions .= ' OR ID = ' . intval($incpost) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $exclusions = ''; if ( !empty($exclude) ) { $exposts = preg_split('/[\s,]+/',$exclude); if ( count($exposts) ) { foreach ( $exposts as $expost ) { if (empty($exclusions)) $exclusions = ' AND ( ID <> ' . intval($expost) . ' '; else $exclusions .= ' AND ID <> ' . intval($expost) . ' '; } } } if (!empty($exclusions)) $exclusions .= ')'; $query = "SELECT DISTINCT * FROM $wpdb->posts "; $query .= empty( $category ) ? '' : ", $wpdb->post2cat "; $query .= empty( $meta_key ) ? '' : ", $wpdb->postmeta "; $query .= " WHERE 1=1 "; $query .= empty( $post_type ) ? '' : "AND post_type = '$post_type' "; $query .= empty( $post_status ) ? '' : "AND post_status = '$post_status' "; $query .= "$exclusions $inclusions " ; $query .= empty( $category ) ? '' : "AND ($wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. ") "; $query .= empty( $post_parent ) ? '' : "AND $wpdb->posts.post_parent = " . $post_parent . " "; $query .= empty( $meta_key ) | empty($meta_value) ? '' : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )"; $query .= $orderby . ' ' . $order; // if ( 0 < $numberposts ) // $query .= " LIMIT " . $offset . ',' . $numberposts; $posts = $wpdb->get_results($query); update_post_caches($posts); return $posts; } // // Post meta functions // function add_post_meta($post_id, $key, $value, $unique = false) { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; if ( $unique ) { if ( $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = '$key' AND post_id = " . $post_id ) ) { return false; } } $post_meta_cache[$blog_id][$post_id][$key][] = $value; $value = maybe_serialize($value); $value = $wpdb->escape($value); $wpdb->query("INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (" . $post_id . ",'$key','$value')"); return true; } function delete_post_meta($post_id, $key, $value = '') { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; if ( empty($value) ) { $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key'"); } else { $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key' AND meta_value = '$value'"); } if ( !$meta_id ) return false; if ( empty($value) ) { $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key'"); unset($post_meta_cache[$blog_id][$post_id][$key]); } else { $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key' AND meta_value = '$value'"); $cache_key = $post_meta_cache[$blog_id][$post_id][$key]; if ($cache_key) foreach ( $cache_key as $index => $data ) if ( $data == $value ) unset($post_meta_cache[$blog_id][$post_id][$key][$index]); } unset($post_meta_cache[$blog_id][$post_id][$key]); return true; } function get_post_meta($post_id, $key, $single = false) { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; if ( isset($post_meta_cache[$blog_id][$post_id][$key]) ) { if ( $single ) { return maybe_unserialize( $post_meta_cache[$blog_id][$post_id][$key][0] ); } else { return maybe_unserialize( $post_meta_cache[$blog_id][$post_id][$key] ); } } if ( !isset($post_meta_cache[$blog_id][$post_id]) ) update_postmeta_cache($post_id); if ( $single ) { if ( isset($post_meta_cache[$blog_id][$post_id][$key][0]) ) return maybe_unserialize($post_meta_cache[$blog_id][$post_id][$key][0]); else return ''; } else { return maybe_unserialize($post_meta_cache[$blog_id][$post_id][$key]); } } function update_post_meta($post_id, $key, $value, $prev_value = '') { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; $original_value = $value; $value = maybe_serialize($value); $value = $wpdb->escape($value); $original_prev = $prev_value; $prev_value = maybe_serialize($prev_value); $prev_value = $wpdb->escape($prev_value); if (! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = '$key' AND post_id = " . $post_id ) ) { return false; } if ( empty($prev_value) ) { $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE meta_key = '$key' AND post_id = " . $post_id ); $cache_key = $post_meta_cache[$blog_id][$post_id][$key]; if ( !empty($cache_key) ) foreach ($cache_key as $index => $data) $post_meta_cache[$blog_id][$post_id][$key][$index] = $original_value; } else { $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE meta_key = '$key' AND post_id = " . $post_id . " AND meta_value = '$prev_value'"); $cache_key = $post_meta_cache[$blog_id][$post_id][$key]; if ( !empty($cache_key) ) foreach ($cache_key as $index => $data) if ( $data == $original_prev ) $post_meta_cache[$blog_id][$post_id][$key][$index] = $original_value; } return true; } function get_post_custom($post_id = 0) { global $id, $post_meta_cache, $wpdb, $blog_id; if ( !$post_id ) $post_id = (int) $id; $post_id = (int) $post_id; if ( !isset($post_meta_cache[$blog_id][$post_id]) ) update_postmeta_cache($post_id); return $post_meta_cache[$blog_id][$post_id]; } function get_post_custom_keys( $post_id = 0 ) { $custom = get_post_custom( $post_id ); if ( !is_array($custom) ) return; if ( $keys = array_keys($custom) ) return $keys; } function get_post_custom_values( $key = '', $post_id = 0 ) { $custom = get_post_custom($post_id); return $custom[$key]; } function wp_delete_post($postid = 0) { global $wpdb, $wp_rewrite; $postid = (int) $postid; if ( !$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $postid ) ) return $post; if ( 'attachment' == $post->post_type ) return wp_delete_attachment($postid); do_action('delete_post', $postid); if ( 'publish' == $post->post_status && 'post' == $post->post_type ) { $categories = wp_get_post_categories($post->ID); if( is_array( $categories ) ) { foreach ( $categories as $cat_id ) { wp_cache_delete($cat_id, 'category'); do_action('edit_category', $cat_id); } } } if ( 'page' == $post->post_type ) $wpdb->query("UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = " . $postid . " AND post_type = 'page'"); $wpdb->query("UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = " . $postid . " AND post_type = 'attachment'"); $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = " . $postid); $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $postid); if ( 'page' == $post->post_type ) { clean_page_cache($postid); $wp_rewrite->flush_rules(); } do_action('deleted_post', $postid); return $post; } function wp_get_post_categories($post_id = 0) { $post_id = (int) $post_id; $cats = &get_the_category($post_id); $cat_ids = array(); foreach ( $cats as $cat ) $cat_ids[] = (int) $cat->cat_ID; return array_unique($cat_ids); } function wp_get_recent_posts($num = 10) { global $wpdb; // Set the limit clause, if we got a limit $num = (int) $num; if ($num) { $limit = "LIMIT $num"; } $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC"; // $limit $result = $wpdb->get_results($sql,ARRAY_A); return $result?$result:array(); } function wp_get_single_post($postid = 0, $mode = OBJECT) { global $wpdb; $postid = (int) $postid; $post = get_post($postid, $mode); // Set categories if($mode == OBJECT) { $post->post_category = wp_get_post_categories($postid); } else { $post['post_category'] = wp_get_post_categories($postid); } return $post; } function wp_insert_post($postarr = array()) { global $wpdb, $wp_rewrite, $allowedtags, $user_ID; if ( is_object($postarr) ) $postarr = get_object_vars($postarr); // export array as variables extract($postarr, EXTR_SKIP); // Are we updating or creating? $update = false; if ( !empty($ID) ) { $update = true; $post = & get_post($ID); $previous_status = $post->post_status; } // Get the basics. if ( empty($no_filter) ) { $post_content = apply_filters('content_save_pre', $post_content); $post_content_filtered = apply_filters('content_filtered_save_pre', $post_content_filtered); $post_excerpt = apply_filters('excerpt_save_pre', $post_excerpt); $post_title = apply_filters('title_save_pre', $post_title); $post_category = apply_filters('category_save_pre', $post_category); $post_status = apply_filters('status_save_pre', $post_status); $post_name = apply_filters('name_save_pre', $post_name); $comment_status = apply_filters('comment_status_pre', $comment_status); $ping_status = apply_filters('ping_status_pre', $ping_status); } if ( ('' == $post_content) && ('' == $post_title) && ('' == $post_excerpt) ) return 0; // Make sure we set a valid category if (0 == count($post_category) || !is_array($post_category)) { $post_category = array(get_option('default_category')); } $post_cat = $post_category[0]; if ( empty($post_author) ) $post_author = $user_ID; if ( empty($post_status) ) $post_status = 'draft'; if ( empty($post_type) ) $post_type = 'post'; // Get the post ID. if ( $update ) $post_ID = (int) $ID; // Create a valid post name. Drafts are allowed to have an empty // post name. if ( empty($post_name) ) { if ( 'draft' != $post_status ) $post_name = sanitize_title($post_title); } else { $post_name = sanitize_title($post_name); } // If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now if (empty($post_date)) { if ( 'draft' != $post_status ) $post_date = current_time('mysql'); } if (empty($post_date_gmt)) { if ( 'draft' != $post_status ) $post_date_gmt = get_gmt_from_date($post_date); } if ( 'publish' == $post_status ) { $now = gmdate('Y-m-d H:i:59'); if ( mysql2date('U', $post_date_gmt) > mysql2date('U', $now) ) $post_status = 'future'; } if ( empty($comment_status) ) { if ( $update ) $comment_status = 'closed'; else $comment_status = get_option('default_comment_status'); } if ( empty($ping_status) ) $ping_status = get_option('default_ping_status'); if ( empty($post_pingback) ) $post_pingback = get_option('default_pingback_flag'); if ( isset($to_ping) ) $to_ping = preg_replace('|\s+|', "\n", $to_ping); else $to_ping = ''; if ( ! isset($pinged) ) $pinged = ''; if ( isset($post_parent) ) $post_parent = (int) $post_parent; else $post_parent = 0; if ( isset($menu_order) ) $menu_order = (int) $menu_order; else $menu_order = 0; if ( !isset($post_password) ) $post_password = ''; if ( 'draft' != $post_status && 'publish' != $post_status ) { $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$post_name' AND post_type = '$post_type' AND ID <> ". $post_ID ." AND post_parent = $post_parent"); if ($post_name_check || in_array($post_name, $wp_rewrite->feeds) ) { $suffix = 2; do { $alt_post_name = $post_name . "-$suffix"; $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$alt_post_name' AND post_type = '$post_type' AND ID <>" . $post_ID . " AND post_parent = $post_parent"); // LIMIT 1 $suffix++; } while ($post_name_check); $post_name = $alt_post_name; } } if ($update) { $wpdb->query( "UPDATE $wpdb->posts SET post_author = '$post_author', post_date = '$post_date', post_date_gmt = '$post_date_gmt', post_content = '$post_content', post_content_filtered = '$post_content_filtered', post_title = '$post_title', post_excerpt = '$post_excerpt', post_status = '$post_status', post_type = '$post_type', comment_status = '$comment_status', ping_status = '$ping_status', post_password = '$post_password', post_name = '$post_name', to_ping = '$to_ping', pinged = '$pinged', post_modified = '".current_time('mysql')."', post_modified_gmt = '".current_time('mysql',1)."', post_parent = '$post_parent', menu_order = '$menu_order' WHERE ID = " . $post_ID ); } else { $wpdb->insert( "INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type) VALUES ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type')", $wpdb->posts, "id"); $post_ID = (int) $wpdb->insert_id; } if ( empty($post_name) && 'draft' != $post_status ) { $post_name = sanitize_title($post_title, $post_ID); $wpdb->query( "UPDATE $wpdb->posts SET post_name = '$post_name' WHERE ID = " . $post_ID ); } wp_set_post_categories($post_ID, $post_category); if ( 'page' == $post_type ) { clean_page_cache($post_ID); $wp_rewrite->flush_rules(); } else { clean_post_cache($post_ID); } // Set GUID if ( ! $update ) $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post_ID) . "' WHERE ID = " . $post_ID); if ( $update) { if ($previous_status != 'publish' && $post_status == 'publish') { // Reset GUID if transitioning to publish. $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post_ID) . "' WHERE ID = " . $post_ID); do_action('private_to_published', $post_ID); } do_action('edit_post', $post_ID); } if ($post_status == 'publish' && $post_type == 'post') { do_action('publish_post', $post_ID); if ( defined('XMLRPC_REQUEST') ) do_action('xmlrpc_publish_post', $post_ID); if ( defined('APP_REQUEST') ) do_action('app_publish_post', $post_ID); if ( !defined('WP_IMPORTING') ) { if ( $post_pingback ) $result = $wpdb->query(" INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (" . $post_ID . ",'_pingme','1') "); $result = $wpdb->query(" INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (" . $post_ID . ",'_encloseme','1') "); wp_schedule_single_event(time(), 'do_pings'); } } else if ($post_type == 'page') { if ( !empty($page_template) ) if ( ! update_post_meta($post_ID, '_wp_page_template', $page_template)) add_post_meta($post_ID, '_wp_page_template', $page_template, true); if ( $post_status == 'publish' ) do_action('publish_page', $post_ID); } // Always clears the hook in case the post status bounced from future to draft. wp_clear_scheduled_hook('publish_future_post', $post_ID); // Schedule publication. if ( 'future' == $post_status ) wp_schedule_single_event(strtotime($post_date_gmt. ' GMT'), 'publish_future_post', array($post_ID)); do_action('save_post', $post_ID); do_action('wp_insert_post', $post_ID); return $post_ID; } function wp_update_post($postarr = array()) { global $wpdb; if ( is_object($postarr) ) $postarr = get_object_vars($postarr); // First, get all of the original fields $post = wp_get_single_post($postarr['ID'], ARRAY_A); // Escape data pulled from DB. $post = add_magic_quotes($post); // Passed post category list overwrites existing category list if not empty. if ( isset($postarr['post_category']) && is_array($postarr['post_category']) && 0 != count($postarr['post_category']) ) $post_cats = $postarr['post_category']; else $post_cats = $post['post_category']; // Drafts shouldn't be assigned a date unless explicitly done so by the user if ( 'draft' == $post['post_status'] && empty($postarr['edit_date']) && empty($postarr['post_date']) && ('0000-00-00 00:00:00' == $post['post_date']) ) $clear_date = true; else $clear_date = false; // Merge old and new fields with new fields overwriting old ones. $postarr = array_merge($post, $postarr); $postarr['post_category'] = $post_cats; if ( $clear_date ) { $postarr['post_date'] = ''; $postarr['post_date_gmt'] = ''; } if ($postarr['post_type'] == 'attachment') return wp_insert_attachment($postarr); return wp_insert_post($postarr); } function wp_publish_post($post_id) { $post = get_post($post_id); if ( empty($post) ) return; if ( 'publish' == $post->post_status ) return; return wp_update_post(array('post_status' => 'publish', 'ID' => $post_id, 'no_filter' => true)); } function wp_set_post_categories($post_ID = 0, $post_categories = array()) { global $wpdb; $post_ID = (int) $post_ID; // If $post_categories isn't already an array, make it one: if (!is_array($post_categories) || 0 == count($post_categories) || empty($post_categories)) $post_categories = array(get_option('default_category')); $post_categories = array_unique($post_categories); // First the old categories $old_categories = $wpdb->get_col(" SELECT category_id FROM $wpdb->post2cat WHERE post_id = " . $post_ID ); if (!$old_categories) { $old_categories = array(); } else { $old_categories = array_unique($old_categories); } // Delete any? $delete_cats = array_diff($old_categories,$post_categories); if ($delete_cats) { foreach ($delete_cats as $del) { $wpdb->query("DELETE FROM $wpdb->post2cat WHERE category_id = ". (int) $del . " AND post_id = " . $post_ID ); } } // Add any? $add_cats = array_diff($post_categories, $old_categories); if ($add_cats) { foreach ($add_cats as $new_cat) { $new_cat = (int) $new_cat; if ( !empty($new_cat) ) $wpdb->query("INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES (" . $post_ID . "," . $new_cat . ")"); } } // Update category counts. $all_affected_cats = array_unique(array_merge($post_categories, $old_categories)); foreach ( $all_affected_cats as $cat_id ) { $count = (int)$wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = " . (int) $cat_id ); $wpdb->query("UPDATE $wpdb->categories SET category_count = " . $count . "WHERE cat_ID = " . (int)$cat_id); clean_category_cache($cat_id); do_action('edit_category', $cat_id); } } // wp_set_post_categories() // // Trackback and ping functions // function add_ping($post_id, $uri) { // Add a URL to those already pung global $wpdb; $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = " . $post_id); $pung = trim($pung); $pung = preg_split('/\s/', $pung); $pung[] = $uri; $new = implode("\n", $pung); $new = apply_filters('add_ping', $new); return $wpdb->query("UPDATE $wpdb->posts SET pinged = '$new' WHERE ID = " . $post_id); } function get_enclosed($post_id) { // Get enclosures already enclosed for a post global $wpdb; $custom_fields = get_post_custom( $post_id ); $pung = array(); if ( !is_array( $custom_fields ) ) return $pung; foreach ( $custom_fields as $key => $val ) { if ( 'enclosure' != $key || !is_array( $val ) ) continue; foreach( $val as $enc ) { $enclosure = split( "\n", $enc ); $pung[] = trim( $enclosure[ 0 ] ); } } $pung = apply_filters('get_enclosed', $pung); return $pung; } function get_pung($post_id) { // Get URLs already pung for a post global $wpdb; $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = " . $post_id); $pung = trim($pung); $pung = preg_split('/\s/', $pung); $pung = apply_filters('get_pung', $pung); return $pung; } function get_to_ping($post_id) { // Get any URLs in the todo list global $wpdb; $to_ping = $wpdb->get_var("SELECT to_ping FROM $wpdb->posts WHERE ID = " . $post_id); $to_ping = trim($to_ping); $to_ping = preg_split('/\s/', $to_ping, -1, PREG_SPLIT_NO_EMPTY); $to_ping = apply_filters('get_to_ping', $to_ping); return $to_ping; } // do trackbacks for a list of urls // accepts a comma-separated list of trackback urls and a post id function trackback_url_list($tb_list, $post_id) { if (!empty($tb_list)) { // get post data $postdata = wp_get_single_post($post_id, ARRAY_A); // import postdata as variables extract($postdata, EXTR_SKIP); // form an excerpt $excerpt = strip_tags($post_excerpt?$post_excerpt:$post_content); if (strlen($excerpt) > 255) { $excerpt = substr($excerpt,0,252) . '...'; } $trackback_urls = explode(',', $tb_list); foreach($trackback_urls as $tb_url) { $tb_url = trim($tb_url); trackback($tb_url, stripslashes($post_title), $excerpt, $post_id); } } } // // Page functions // function get_all_page_ids() { global $wpdb; if ( ! $page_ids = wp_cache_get('all_page_ids', 'pages') ) { $page_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'page'"); wp_cache_add('all_page_ids', $page_ids, 'pages'); } return $page_ids; } // Retrieves page data given a page ID or page object. // Handles page caching. function &get_page(&$page, $output = OBJECT) { global $wpdb, $blog_id; if ( empty($page) ) { if ( isset($GLOBALS['page']) ) { $_page = & $GLOBALS['page']; wp_cache_add($_page->ID, $_page, 'pages'); } else { // shouldn't we just return NULL at this point? ~ Mark $_page = null; } } elseif ( is_object($page) ) { if ( 'post' == $page->post_type ) return get_post($page, $output); wp_cache_add($page->ID, $page, 'pages'); $_page = $page; } else { $page = (int) $page; // first, check the cache if ( ! ( $_page = wp_cache_get($page, 'pages') ) ) { // not in the page cache? if ( isset($GLOBALS['page']->ID) && ($page == $GLOBALS['page']->ID) ) { // for is_page() views // I don't think this code ever gets executed ~ Mark $_page = & $GLOBALS['page']; wp_cache_add($_page->ID, $_page, 'pages'); } elseif ( isset($GLOBALS['post_cache'][$blog_id][$page]) ) { // it's actually a page, and is cached return get_post($page, $output); } else { // it's not in any caches, so off to the DB we go // Why are we using assignment for this query? $_page = & $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID= " . $page); // LIMIT 1 if ( 'post' == $_page->post_type ) return get_post($_page, $output); // Potential issue: we're not checking to see if the post_type = 'page' // So all non-'post' posts will get cached as pages. wp_cache_add($_page->ID, $_page, 'pages'); } } } // at this point, one way or another, $_post contains the page object if ( $output == OBJECT ) { return $_page; } elseif ( $output == ARRAY_A ) { return get_object_vars($_page); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_page)); } else { return $_page; } } function get_page_by_path($page_path, $output = OBJECT) { global $wpdb; $page_path = rawurlencode(urldecode($page_path)); $page_path = str_replace('%2F', '/', $page_path); $page_path = str_replace('%20', ' ', $page_path); $page_paths = '/' . trim($page_path, '/'); $leaf_path = sanitize_title(basename($page_paths)); $page_paths = explode('/', $page_paths); foreach($page_paths as $pathdir) $full_path .= ($pathdir!=''?'/':'') . sanitize_title($pathdir); $pages = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = '$leaf_path' AND post_type='page'"); if ( empty($pages) ) return NULL; foreach ($pages as $page) { $path = '/' . $leaf_path; $curpage = $page; while ($curpage->post_parent != 0) { $curpage = $wpdb->get_row("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = '$curpage->post_parent' and post_type='page'"); $path = '/' . $curpage->post_name . $path; } if ( $path == $full_path ) return get_page($page->ID, $output); } return NULL; } function get_page_by_title($page_title, $output = OBJECT) { global $wpdb; $page_title = $wpdb->escape($page_title); $page = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$page_title' AND post_type='page'"); if ( $page ) return get_page($page, $output); return NULL; } function &get_page_children($page_id, $pages) { global $page_cache, $blog_id; if ( empty($pages) ) $pages = &$page_cache[$blog_id]; $page_list = array(); foreach ( $pages as $page ) { if ( $page->post_parent == $page_id ) { $page_list[] = $page; if ( $children = get_page_children($page->ID, $pages) ) $page_list = array_merge($page_list, $children); } } return $page_list; } //fetches the pages returned as a FLAT list, but arranged in order of their hierarchy, i.e., child parents //immediately follow their parents function get_page_hierarchy($posts, $parent = 0) { $result = array ( ); if ($posts) { foreach ($posts as $post) { if ($post->post_parent == $parent) { $result[$post->ID] = $post->post_name; $children = get_page_hierarchy($posts, $post->ID); $result += $children; //append $children to $result } } } return $result; } function get_page_uri($page_id) { $page = get_page($page_id); $uri = urldecode($page->post_name); // A page cannot be it's own parent. if ( $page->post_parent == $page->ID ) return $uri; while ($page->post_parent != 0) { $page = get_page($page->post_parent); $uri = urldecode($page->post_name) . "/" . $uri; } return $uri; } function &get_pages($args = '') { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => '', 'authors' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $key = md5( serialize( $r ) ); if ( $cache = wp_cache_get( 'get_pages', 'page' ) ) if ( isset( $cache[ $key ] ) ) return apply_filters('get_pages', $cache[ $key ], $r ); $inclusions = ''; if ( !empty($include) ) { $child_of = 0; //ignore child_of, exclude, meta_key, and meta_value params if using include $exclude = ''; $meta_key = ''; $meta_value = ''; $incpages = preg_split('/[\s,]+/',$include); if ( count($incpages) ) { foreach ( $incpages as $incpage ) { if (empty($inclusions)) $inclusions = ' AND ( ID = ' . intval($incpage) . ' '; else $inclusions .= ' OR ID = ' . intval($incpage) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $exclusions = ''; if ( !empty($exclude) ) { $expages = preg_split('/[\s,]+/',$exclude); if ( count($expages) ) { foreach ( $expages as $expage ) { if (empty($exclusions)) $exclusions = ' AND ( ID <> ' . intval($expage) . ' '; else $exclusions .= ' AND ID <> ' . intval($expage) . ' '; } } } if (!empty($exclusions)) $exclusions .= ')'; $author_query = ''; if (!empty($authors)) { $post_authors = preg_split('/[\s,]+/',$authors); if ( count($post_authors) ) { foreach ( $post_authors as $post_author ) { //Do we have an author id or an author login? if ( 0 == intval($post_author) ) { $post_author = get_userdatabylogin($post_author); if ( empty($post_author) ) continue; if ( empty($post_author->ID) ) continue; $post_author = $post_author->ID; } if ( '' == $author_query ) $author_query = ' post_author = ' . intval($post_author) . ' '; else $author_query .= ' OR post_author = ' . intval($post_author) . ' '; } if ( '' != $author_query ) $author_query = " AND ($author_query)"; } } $query = "SELECT * FROM $wpdb->posts " ; $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " ) ; $query .= " WHERE (post_type = 'page' AND post_status = 'publish') $exclusions $inclusions " ; $query .= ( empty( $meta_key ) | empty($meta_value) ? "" : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )" ) ; $query .= $author_query; $query .= " ORDER BY " . $sort_column . " " . $sort_order ; $pages = $wpdb->get_results($query); $pages = apply_filters('get_pages', $pages, $r); if ( empty($pages) ) return array(); // Update cache. update_page_cache($pages); if ( $child_of || $hierarchical ) $pages = & get_page_children($child_of, $pages); $cache[ $key ] = $pages; wp_cache_set( 'get_pages', $cache, 'page' ); return $pages; } function generate_page_uri_index() { global $wpdb; //get pages in order of hierarchy, i.e. children after parents $posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page'")); //now reverse it, because we need parents after children for rewrite rules to work properly $posts = array_reverse($posts, true); $page_uris = array(); $page_attachment_uris = array(); if ($posts) { foreach ($posts as $id => $post) { // URL => page name $uri = get_page_uri($id); $attachments = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = " . $id ); if ( $attachments ) { foreach ( $attachments as $attachment ) { $attach_uri = get_page_uri($attachment->ID); $page_attachment_uris[$attach_uri] = $attachment->ID; } } $page_uris[$uri] = $id; } delete_option('page_uris'); update_option('page_uris', $page_uris); if ( $page_attachment_uris ) { delete_option('page_attachment_uris'); update_option('page_attachment_uris', $page_attachment_uris); } } } // // Attachment functions // function is_local_attachment($url) { if (strpos($url, get_bloginfo('url')) == false) return false; if (strpos($url, get_bloginfo('url') . '/?attachment_id=') != false) return true; if ( $id = url_to_postid($url) ) { $post = & get_post($id); if ( 'attachment' == $post->post_type ) return true; } return false; } function wp_insert_attachment($object, $file = false, $post_parent = 0) { global $wpdb, $user_ID; if ( is_object($object) ) $object = get_object_vars($object); // Export array as variables extract($object, EXTR_SKIP); // Get the basics. $post_content = apply_filters('content_save_pre', $post_content); $post_content_filtered = apply_filters('content_filtered_save_pre', $post_content_filtered); $post_excerpt = apply_filters('excerpt_save_pre', $post_excerpt); $post_title = apply_filters('title_save_pre', $post_title); $post_category = apply_filters('category_save_pre', $post_category); $post_name = apply_filters('name_save_pre', $post_name); $comment_status = apply_filters('comment_status_pre', $comment_status); $ping_status = apply_filters('ping_status_pre', $ping_status); $post_mime_type = apply_filters('post_mime_type_pre', $post_mime_type); // Make sure we set a valid category if (0 == count($post_category) || !is_array($post_category)) { $post_category = array(get_option('default_category')); } $post_cat = $post_category[0]; if ( empty($post_author) ) $post_author = $user_ID; $post_type = 'attachment'; $post_status = 'inherit'; // Are we updating or creating? $update = false; if ( !empty($ID) ) { $update = true; $post_ID = (int) $ID; } // Create a valid post name. if ( empty($post_name) ) $post_name = sanitize_title($post_title); else $post_name = sanitize_title($post_name); if ($update) { $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$post_name' AND post_status = 'inherit' AND ID <> " . $post_ID); // LIMIT 1 if ($post_name_check) { $suffix = 2; while ($post_name_check) { $alt_post_name = $post_name . "-$suffix"; $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = ' $alt_post_name' AND post_status = 'inherit' AND ID <> " . $post_ID . " AND post_parent = " . $post_parent); // LIMIT 1 $suffix++; } $post_name = $alt_post_name; } } if (empty($post_date)) $post_date = current_time('mysql'); if (empty($post_date_gmt)) $post_date_gmt = current_time('mysql', 1); if ( empty($comment_status) ) { if ( $update ) $comment_status = 'closed'; else $comment_status = get_option('default_comment_status'); } if ( empty($ping_status) ) $ping_status = get_option('default_ping_status'); if ( empty($post_pingback) ) $post_pingback = get_option('default_pingback_flag'); if ( isset($to_ping) ) $to_ping = preg_replace('|\s+|', "\n", $to_ping); else $to_ping = ''; if ( isset($post_parent) ) $post_parent = (int) $post_parent; else $post_parent = 0; if ( isset($menu_order) ) $menu_order = (int) $menu_order; else $menu_order = 0; if ( !isset($post_password) ) $post_password = ''; if ( isset($to_ping) ) $to_ping = preg_replace('|\s+|', "\n", $to_ping); else $to_ping = ''; if ( ! isset($pinged) ) $pinged = ''; if ($update) { $wpdb->query( "UPDATE $wpdb->posts SET post_author = '$post_author', post_date = '$post_date', post_date_gmt = '$post_date_gmt', post_content = '$post_content', post_content_filtered = '$post_content_filtered', post_title = '$post_title', post_excerpt = '$post_excerpt', post_status = '$post_status', post_type = '$post_type', comment_status = '$comment_status', ping_status = '$ping_status', post_password = '$post_password', post_name = '$post_name', to_ping = '$to_ping', pinged = '$pinged', post_modified = '".current_time('mysql')."', post_modified_gmt = '".current_time('mysql',1)."', post_parent = '$post_parent', menu_order = '$menu_order', post_mime_type = '$post_mime_type', guid = '$guid' WHERE ID = $post_ID"); } else { $wpdb->insert( "INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, guid) VALUES ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type', '$guid')",$wpdb->posts , "id"); $post_ID = (int) $wpdb->insert_id; } if ( empty($post_name) ) { $post_name = sanitize_title($post_title, $post_ID); $wpdb->query( "UPDATE $wpdb->posts SET post_name = '$post_name' WHERE ID = " . $post_ID ); } wp_set_post_categories($post_ID, $post_category); if ( $file ) update_attached_file( $post_ID, $file ); clean_post_cache($post_ID); if ( $update) { do_action('edit_attachment', $post_ID); } else { do_action('add_attachment', $post_ID); } return $post_ID; } function wp_delete_attachment($postid) { global $wpdb; $postid = (int) $postid; if ( !$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $postid) ) return $post; if ( 'attachment' != $post->post_type ) return false; $meta = wp_get_attachment_metadata( $postid ); $file = get_attached_file( $postid ); $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = " . $postid); $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $postid); if ( ! empty($meta['thumb']) ) { // Don't delete the thumb if another attachment uses it if (! $wpdb->get_row("SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%".$wpdb->escape($meta['thumb'])."%' AND post_id <> " . $postid )) { $thumbfile = str_replace(basename($file), $meta['thumb'], $file); $thumbfile = apply_filters('wp_delete_file', $thumbfile); @ unlink($thumbfile); } } $file = apply_filters('wp_delete_file', $file); if ( ! empty($file) ) @ unlink($file); do_action('delete_attachment', $postid); return $post; } function wp_get_attachment_metadata( $post_id, $unfiltered = false ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; $data = get_post_meta( $post->ID, '_wp_attachment_metadata', true ); if ( $unfiltered ) return $data; return apply_filters( 'wp_get_attachment_metadata', $data, $post->ID ); } function wp_update_attachment_metadata( $post_id, $data ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; $old_data = wp_get_attachment_metadata( $post->ID, true ); $data = apply_filters( 'wp_update_attachment_metadata', $data, $post->ID ); if ( $old_data ) return update_post_meta( $post->ID, '_wp_attachment_metadata', $data, $old_data ); else return add_post_meta( $post->ID, '_wp_attachment_metadata', $data ); } function wp_get_attachment_url( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; $url = get_the_guid( $post->ID ); if ( 'attachment' != $post->post_type || !$url ) return false; return apply_filters( 'wp_get_attachment_url', $url, $post->ID ); } function wp_get_attachment_thumb_file( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; if ( !$imagedata = wp_get_attachment_metadata( $post->ID ) ) return false; $file = get_attached_file( $post->ID ); if ( !empty($imagedata['thumb']) && ($thumbfile = str_replace(basename($file), $imagedata['thumb'], $file)) && file_exists($thumbfile) ) return apply_filters( 'wp_get_attachment_thumb_file', $thumbfile, $post->ID ); return false; } function wp_get_attachment_thumb_url( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; if ( !$url = wp_get_attachment_url( $post->ID ) ) return false; if ( !$thumb = wp_get_attachment_thumb_file( $post->ID ) ) return false; $url = str_replace(basename($url), basename($thumb), $url); return apply_filters( 'wp_get_attachment_thumb_url', $url, $post->ID ); } function wp_attachment_is_image( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; if ( !$file = get_attached_file( $post->ID ) ) return false; $ext = preg_match('/\.([^.]+)$/', $file, $matches) ? strtolower($matches[1]) : false; $image_exts = array('jpg', 'jpeg', 'gif', 'png'); if ( 'image/' == substr($post->post_mime_type, 0, 6) || $ext && 'import' == $post->post_mime_type && in_array($ext, $image_exts) ) return true; return false; } function wp_mime_type_icon( $mime = 0 ) { $post_id = 0; if ( is_numeric($mime) ) { $mime = (int) $mime; if ( !$post =& get_post( $mime ) ) return false; $post_id = (int) $post->ID; $mime = $post->post_mime_type; } if ( empty($mime) ) return false; $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); $icon_dir_uri = apply_filters( 'icon_dir_uri', get_template_directory_uri() . '/images' ); $types = array( substr($mime, 0, strpos($mime, '/')), substr($mime, strpos($mime, '/') + 1), str_replace('/', '_', $mime) ); $exts = array('jpg', 'gif', 'png'); $src = false; foreach ( $types as $type ) { foreach ( $exts as $ext ) { $src_file = "$icon_dir/$type.$ext"; if ( file_exists($src_file) ) { $src = "$icon_dir_uri/$type.$ext"; break 2; } } } return apply_filters( 'wp_mime_type_icon', $src, $mime, $post_id ); // Last arg is 0 if function pass mime type. } function wp_check_for_changed_slugs($post_id) { if ( !strlen($_POST['wp-old-slug']) ) return $post_id; $post = &get_post($post_id); // we're only concerned with published posts if ( $post->post_status != 'publish' || $post->post_type != 'post' ) return $post_id; // only bother if the slug has changed if ( $post->post_name == $_POST['wp-old-slug'] ) return $post_id; $old_slugs = (array) get_post_meta($post_id, '_wp_old_slug'); // if we haven't added this old slug before, add it now if ( !count($old_slugs) || !in_array($_POST['wp-old-slug'], $old_slugs) ) add_post_meta($post_id, '_wp_old_slug', $_POST['wp-old-slug']); // if the new slug was used previously, delete it from the list if ( in_array($post->post_name, $old_slugs) ) delete_post_meta($post_id, '_wp_old_slug', $post->post_name); return $post_id; } /** * This function provides a standardized way to appropriately select on * the post_status of posts/pages. The function will return a piece of * SQL code that can be added to a WHERE clause; this SQL is constructed * to allow all published posts, and all private posts to which the user * has access. * * @param string $post_type currently only supports 'post' or 'page'. * @return string SQL code that can be added to a where clause. */ function get_private_posts_cap_sql($post_type) { global $user_ID; $cap = ''; // Private posts if ($post_type == 'post') { $cap = 'read_private_posts'; // Private pages } elseif ($post_type == 'page') { $cap = 'read_private_pages'; // Dunno what it is, maybe plugins have their own post type? } else { $cap = apply_filters('pub_priv_sql_capability', $cap); if (empty($cap)) { // We don't know what it is, filters don't change anything, // so set the SQL up to return nothing. return '1 = 0'; } } $sql = '(post_status = \'publish\''; if (current_user_can($cap)) { // Does the user have the capability to view private posts? Guess so. $sql .= ' OR post_status = \'private\''; } elseif (is_user_logged_in()) { // Users can view their own private posts. $sql .= ' OR post_status = \'private\' AND post_author = \'' . $user_ID . '\''; } $sql .= ')'; return $sql; } ?>'wordpress/wp-includes/post-template.php1 0 ) { $title = apply_filters('the_title', $before . $title . $after, $before, $after); if ( $echo ) echo $title; else return $title; } } function get_the_title($id = 0) { $post = &get_post($id); $title = $post->post_title; if ( !empty($post->post_password) ) $title = sprintf(__('Protected: %s'), $title); else if ( 'private' == $post->post_status ) $title = sprintf(__('Private: %s'), $title); return $title; } function the_guid( $id = 0 ) { echo get_the_guid($id); } function get_the_guid( $id = 0 ) { $post = &get_post($id); return apply_filters('get_the_guid', $post->guid); } function the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { $content = get_the_content($more_link_text, $stripteaser, $more_file); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); echo $content; } function get_the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { global $id, $post, $more, $single, $withcomments, $page, $pages, $multipage, $numpages; global $preview; global $pagenow; $output = ''; if ( !empty($post->post_password) ) { // if there's a password if ( stripslashes($_COOKIE['wp-postpass_'.COOKIEHASH]) != $post->post_password ) { // and it doesn't match the cookie $output = get_the_password_form(); return $output; } } if ( $more_file != '' ) $file = $more_file; else $file = $pagenow; //$_SERVER['PHP_SELF']; if ( $page > count($pages) ) // if the requested page doesn't exist $page = count($pages); // give them the highest numbered page that DOES exist $content = $pages[$page-1]; if ( preg_match('//', $content, $matches) ) { $content = explode($matches[0], $content, 2); if ( !empty($matches[1]) && !empty($more_link_text) ) $more_link_text = strip_tags(wp_kses_no_null(trim($matches[1]))); } else { $content = array($content); } if ( (false != strpos($post->post_content, '') && ((!$multipage) || ($page==1))) ) $stripteaser = 1; $teaser = $content[0]; if ( ($more) && ($stripteaser) ) $teaser = ''; $output .= $teaser; if ( count($content) > 1 ) { if ( $more ) { $output .= ''.$content[1]; } else { $output = balanceTags($output); if ( ! empty($more_link_text) ) $output .= ' $more_link_text"; } } if ( $preview ) // preview fix for javascript bug with foreign languages $output = preg_replace('/\%u([0-9A-F]{4,4})/e', "'&#'.base_convert('\\1',16,10).';'", $output); return $output; } function the_excerpt() { echo apply_filters('the_excerpt', get_the_excerpt()); } function get_the_excerpt($fakeit = true) { global $id, $post; $output = ''; $output = $post->post_excerpt; if ( !empty($post->post_password) ) { // if there's a password if ( $_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password ) { // and it doesn't match the cookie $output = __('There is no excerpt because this is a protected post.'); return $output; } } return apply_filters('get_the_excerpt', $output); } function wp_link_pages($args = '') { global $post; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('before' => '

    ' . __('Pages:'), 'after' => '

    ', 'next_or_number' => 'number', 'nextpagelink' => __('Next page'), 'previouspagelink' => __('Previous page'), 'pagelink' => '%', 'more_file' => '', 'echo' => 1); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); global $id, $page, $numpages, $multipage, $more, $pagenow; if ( $more_file != '' ) $file = $more_file; else $file = $pagenow; $output = ''; if ( $multipage ) { if ( 'number' == $next_or_number ) { $output .= $before; for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) { $j = str_replace('%',"$i",$pagelink); $output .= ' '; if ( ($i != $page) || ((!$more) && ($page==1)) ) { if ( 1 == $i ) { $output .= ''; } else { if ( '' == get_option('permalink_structure') || 'draft' == $post->post_status ) $output .= ''; else $output .= ''; } } $output .= $j; if ( ($i != $page) || ((!$more) && ($page==1)) ) $output .= ''; } $output .= $after; } else { if ( $more ) { $output .= $before; $i = $page - 1; if ( $i && $more ) { if ( 1 == $i ) { $output .= '' . $previouspagelink . ''; } else { if ( '' == get_option('permalink_structure') || 'draft' == $post->post_status ) $output .= '' . $previouspagelink . ''; else $output .= '' . $previouspagelink . ''; } } $i = $page + 1; if ( $i <= $numpages && $more ) { if ( 1 == $i ) { $output .= '' . $nextpagelink . ''; } else { if ( '' == get_option('permalink_structure') || 'draft' == $post->post_status ) $output .= '' . $nextpagelink . ''; else $output .= '' . $nextpagelink . ''; } } $output .= $after; } } } if ( $echo ) echo $output; return $output; } // // Post-meta: Custom per-post fields. // function post_custom( $key = '' ) { $custom = get_post_custom(); if ( 1 == count($custom[$key]) ) return $custom[$key][0]; else return $custom[$key]; } // this will probably change at some point... function the_meta() { global $id; if ( $keys = get_post_custom_keys() ) { echo "\n"; } } // // Pages // function wp_dropdown_pages($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('depth' => 0, 'child_of' => 0, 'selected' => 0, 'echo' => 1, 'name' => 'page_id', 'show_option_none' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $pages = get_pages($r); $output = ''; if ( ! empty($pages) ) { $output = "\n"; } $output = apply_filters('wp_dropdown_pages', $output); if ( $echo ) echo $output; return $output; } function wp_list_pages($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('depth' => 0, 'show_date' => '', 'date_format' => get_option('date_format'), 'child_of' => 0, 'exclude' => '', 'title_li' => __('Pages'), 'echo' => 1, 'authors' => '', 'sort_column' => 'menu_order, post_title'); $r = array_merge($defaults, $r); $output = ''; $current_page = 0; // sanitize, mostly to keep spaces out $r['exclude'] = preg_replace('[^0-9,]', '', $r['exclude']); // Allow plugins to filter an array of excluded pages $r['exclude'] = implode(',', apply_filters('wp_list_pages_excludes', explode(',', $r['exclude']))); // Query pages. $pages = get_pages($r); if ( !empty($pages) ) { if ( $r['title_li'] ) $output .= ''; } $output = apply_filters('wp_list_pages', $output); if ( $r['echo'] ) echo $output; else return $output; } // // Page helpers // function walk_page_tree() { $walker = new Walker_Page; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } function walk_page_dropdown_tree() { $walker = new Walker_PageDropdown; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } // // Attachments // function the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { echo get_the_attachment_link($id, $fullsize, $max_dims); } function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { $id = (int) $id; $_post = & get_post($id); if ( ('attachment' != $_post->post_type) || !$url = wp_get_attachment_url($_post->ID) ) return __('Missing Attachment'); $post_title = attribute_escape($_post->post_title); $innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims); return "$innerHTML"; } function get_attachment_icon_src( $id = 0, $fullsize = false ) { $id = (int) $id; if ( !$post = & get_post($id) ) return false; $imagedata = wp_get_attachment_metadata( $post->ID ); $file = get_attached_file( $post->ID ); if ( !$fullsize && $thumbfile = wp_get_attachment_thumb_file( $post->ID ) ) { // We have a thumbnail desired, specified and existing $src = wp_get_attachment_thumb_url( $post->ID ); $src_file = $thumbfile; $class = 'attachmentthumb'; } elseif ( wp_attachment_is_image( $post->ID ) ) { // We have an image without a thumbnail $src = wp_get_attachment_url( $post->ID ); $src_file = & $file; $class = 'attachmentimage'; } elseif ( $src = wp_mime_type_icon( $post->ID ) ) { // No thumb, no image. We'll look for a mime-related icon instead. $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); $src_file = $icon_dir . '/' . basename($src); } if ( !isset($src) || !$src ) return false; return array($src, $src_file); } function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) { $id = (int) $id; if ( !$post = & get_post($id) ) return false; if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) ) return false; list($src, $src_file) = $src; // Do we need to constrain the image? if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) { $imagesize = getimagesize($src_file); if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) { $actual_aspect = $imagesize[0] / $imagesize[1]; $desired_aspect = $max_dims[0] / $max_dims[1]; if ( $actual_aspect >= $desired_aspect ) { $height = $actual_aspect * $max_dims[0]; $constraint = "width='{$max_dims[0]}' "; $post->iconsize = array($max_dims[0], $height); } else { $width = $max_dims[1] / $actual_aspect; $constraint = "height='{$max_dims[1]}' "; $post->iconsize = array($width, $max_dims[1]); } } else { $post->iconsize = array($imagesize[0], $imagesize[1]); } } $post_title = attribute_escape($post->post_title); $icon = "$post_title"; return apply_filters( 'attachment_icon', $icon, $post->ID ); } function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) { $id = (int) $id; if ( !$post = & get_post($id) ) return false; if ( $innerHTML = get_attachment_icon($post->ID, $fullsize, $max_dims)) return $innerHTML; $innerHTML = attribute_escape($post->post_title); return apply_filters('attachment_innerHTML', $innerHTML, $post->ID); } function prepend_attachment($content) { $p = '

    '; $p .= get_the_attachment_link(false, true, array(400, 300)); $p .= '

    '; $p = apply_filters('prepend_attachment', $p); return "$p\n$content"; } // // Misc // function get_the_password_form() { $output = '

    ' . __("This post is password protected. To view it please enter your password below:") . '

    '; return $output; } ?> wordpress/wp-includes/query.phpget($var); } function set_query_var($var, $value) { global $wp_query; return $wp_query->set($var, $value); } function &query_posts($query) { unset($GLOBALS['wp_query']); $GLOBALS['wp_query'] =& new WP_Query(); return $GLOBALS['wp_query']->query($query); } /* * Query type checks. */ function is_admin () { global $wp_query; return ($wp_query->is_admin || (strpos($_SERVER['REQUEST_URI'], 'wp-admin/') != false)); } function is_archive () { global $wp_query; return $wp_query->is_archive; } function is_attachment () { global $wp_query; return $wp_query->is_attachment; } function is_author ($author = '') { global $wp_query; if ( !$wp_query->is_author ) return false; if ( empty($author) ) return true; $author_obj = $wp_query->get_queried_object(); if ( $author == $author_obj->ID ) return true; elseif ( $author == $author_obj->nickname ) return true; elseif ( $author == $author_obj->user_nicename ) return true; return false; } function is_category ($category = '') { global $wp_query; if ( !$wp_query->is_category ) return false; if ( empty($category) ) return true; $cat_obj = $wp_query->get_queried_object(); if ( $category == $cat_obj->cat_ID ) return true; else if ( $category == $cat_obj->cat_name ) return true; elseif ( $category == $cat_obj->category_nicename ) return true; return false; } function is_comments_popup () { global $wp_query; return $wp_query->is_comments_popup; } function is_date () { global $wp_query; return $wp_query->is_date; } function is_day () { global $wp_query; return $wp_query->is_day; } function is_feed () { global $wp_query; return $wp_query->is_feed; } function is_home () { global $wp_query; return $wp_query->is_home; } function is_month () { global $wp_query; return $wp_query->is_month; } function is_page ($page = '') { global $wp_query; if ( !$wp_query->is_page ) return false; if ( empty($page) ) return true; $page_obj = $wp_query->get_queried_object(); if ( $page == $page_obj->ID ) return true; elseif ( $page == $page_obj->post_title ) return true; else if ( $page == $page_obj->post_name ) return true; return false; } function is_paged () { global $wp_query; return $wp_query->is_paged; } function is_plugin_page() { global $plugin_page; if ( isset($plugin_page) ) return true; return false; } function is_preview() { global $wp_query; return $wp_query->is_preview; } function is_robots() { global $wp_query; return $wp_query->is_robots; } function is_search () { global $wp_query; return $wp_query->is_search; } function is_single ($post = '') { global $wp_query; if ( !$wp_query->is_single ) return false; if ( empty( $post) ) return true; $post_obj = $wp_query->get_queried_object(); if ( $post == $post_obj->ID ) return true; elseif ( $post == $post_obj->post_title ) return true; elseif ( $post == $post_obj->post_name ) return true; return false; } function is_singular() { global $wp_query; return $wp_query->is_singular; } function is_time () { global $wp_query; return $wp_query->is_time; } function is_trackback () { global $wp_query; return $wp_query->is_trackback; } function is_year () { global $wp_query; return $wp_query->is_year; } function is_404 () { global $wp_query; return $wp_query->is_404; } /* * The Loop. Post loop control. */ function have_posts() { global $wp_query; return $wp_query->have_posts(); } function in_the_loop() { global $wp_query; return $wp_query->in_the_loop; } function rewind_posts() { global $wp_query; return $wp_query->rewind_posts(); } function the_post() { global $wp_query; $wp_query->the_post(); } /* * Comments loop. */ function have_comments() { global $wp_query; return $wp_query->have_comments(); } function the_comment() { global $wp_query; return $wp_query->the_comment(); } /* * WP_Query */ class WP_Query { var $query; var $query_vars = array(); var $queried_object; var $queried_object_id; var $request; var $posts; var $post_count = 0; var $current_post = -1; var $in_the_loop = false; var $post; var $comments; var $comment_count = 0; var $current_comment = -1; var $comment; var $found_posts = 0; var $max_num_pages = 0; var $is_single = false; var $is_preview = false; var $is_page = false; var $is_archive = false; var $is_date = false; var $is_year = false; var $is_month = false; var $is_day = false; var $is_time = false; var $is_author = false; var $is_category = false; var $is_search = false; var $is_feed = false; var $is_comment_feed = false; var $is_trackback = false; var $is_home = false; var $is_404 = false; var $is_comments_popup = false; var $is_admin = false; var $is_attachment = false; var $is_singular = false; var $is_robots = false; var $is_posts_page = false; function init_query_flags() { $this->is_single = false; $this->is_page = false; $this->is_archive = false; $this->is_date = false; $this->is_year = false; $this->is_month = false; $this->is_day = false; $this->is_time = false; $this->is_author = false; $this->is_category = false; $this->is_search = false; $this->is_feed = false; $this->is_comment_feed = false; $this->is_trackback = false; $this->is_home = false; $this->is_404 = false; $this->is_paged = false; $this->is_admin = false; $this->is_attachment = false; $this->is_singular = false; $this->is_robots = false; $this->is_posts_page = false; } function init () { unset($this->posts); unset($this->query); $this->query_vars = array(); unset($this->queried_object); unset($this->queried_object_id); $this->post_count = 0; $this->current_post = -1; $this->in_the_loop = false; $this->init_query_flags(); } // Reparse the query vars. function parse_query_vars() { $this->parse_query(''); } function fill_query_vars($array) { $keys = array( 'error' , 'm' , 'p' , 'subpost' , 'subpost_id' , 'attachment' , 'attachment_id' , 'name' , 'hour' , 'static' , 'pagename' , 'page_id' , 'second' , 'minute' , 'hour' , 'day' , 'monthnum' , 'year' , 'w' , 'category_name' , 'author_name' , 'feed' , 'tb' , 'paged' , 'comments_popup' , 'preview' ); foreach ($keys as $key) { if ( !isset($array[$key])) $array[$key] = ''; } return $array; } // Parse a query string and set query type booleans. function parse_query ($query) { if ( !empty($query) || !isset($this->query) ) { $this->init(); if ( is_array($query) ) $this->query_vars = $query; else parse_str($query, $this->query_vars); $this->query = $query; } $this->query_vars = $this->fill_query_vars($this->query_vars); $qv = &$this->query_vars; if ( ! empty($qv['robots']) ) $this->is_robots = true; $qv['p'] = (int) $qv['p']; $qv['page_id'] = (int) $qv['page_id']; $qv['year'] = (int) $qv['year']; $qv['monthnum'] = (int) $qv['monthnum']; $qv['day'] = (int) $qv['day']; $qv['w'] = (int) $qv['w']; $qv['m'] = (int) $qv['m']; if ( '' != $qv['hour'] ) $qv['hour'] = (int) $qv['hour']; if ( '' != $qv['minute'] ) $qv['minute'] = (int) $qv['minute']; if ( '' != $qv['second'] ) $qv['second'] = (int) $qv['second']; // Compat. Map subpost to attachment. if ( '' != $qv['subpost'] ) $qv['attachment'] = $qv['subpost']; if ( '' != $qv['subpost_id'] ) $qv['attachment_id'] = $qv['subpost_id']; $qv['attachment_id'] = (int) $qv['attachment_id']; if ( ('' != $qv['attachment']) || !empty($qv['attachment_id']) ) { $this->is_single = true; $this->is_attachment = true; } elseif ( '' != $qv['name'] ) { $this->is_single = true; } elseif ( $qv['p'] ) { $this->is_single = true; } elseif ( ('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day']) ) { // If year, month, day, hour, minute, and second are set, a single // post is being queried. $this->is_single = true; } elseif ( '' != $qv['static'] || '' != $qv['pagename'] || !empty($qv['page_id']) ) { $this->is_page = true; $this->is_single = false; } elseif ( !empty($qv['s']) ) { $this->is_search = true; } else { // Look for archive queries. Dates, categories, authors. if ( '' != $qv['second'] ) { $this->is_time = true; $this->is_date = true; } if ( '' != $qv['minute'] ) { $this->is_time = true; $this->is_date = true; } if ( '' != $qv['hour'] ) { $this->is_time = true; $this->is_date = true; } if ( $qv['day'] ) { if (! $this->is_date) { $this->is_day = true; $this->is_date = true; } } if ( $qv['monthnum'] ) { if (! $this->is_date) { $this->is_month = true; $this->is_date = true; } } if ( $qv['year'] ) { if (! $this->is_date) { $this->is_year = true; $this->is_date = true; } } if ( $qv['m'] ) { $this->is_date = true; if (strlen($qv['m']) > 9) { $this->is_time = true; } else if (strlen($qv['m']) > 7) { $this->is_day = true; } else if (strlen($qv['m']) > 5) { $this->is_month = true; } else { $this->is_year = true; } } if ('' != $qv['w']) { $this->is_date = true; } if ( empty($qv['cat']) || ($qv['cat'] == '0') ) { $this->is_category = false; } else { if (strpos($qv['cat'], '-') != false) { $this->is_category = false; } else { $this->is_category = true; } } if ( '' != $qv['category_name'] ) { $this->is_category = true; } if ( empty($qv['author']) || ($qv['author'] == '0') ) { $this->is_author = false; } else { $this->is_author = true; } if ( '' != $qv['author_name'] ) { $this->is_author = true; } if ( ($this->is_date || $this->is_author || $this->is_category) ) $this->is_archive = true; } if ( '' != $qv['feed'] ) $this->is_feed = true; if ( '' != $qv['tb'] ) $this->is_trackback = true; if ( '' != $qv['paged'] ) $this->is_paged = true; if ( '' != $qv['comments_popup'] ) $this->is_comments_popup = true; // if we're previewing inside the write screen if ('' != $qv['preview']) $this->is_preview = true; if ( strpos($_SERVER['PHP_SELF'], 'wp-admin/') != false ) $this->is_admin = true; if ( false != strpos($qv['feed'], 'comments-') ) { $qv['feed'] = str_replace('comments-', '', $qv['feed']); $qv['withcomments'] = 1; } $this->is_singular = $this->is_single || $this->is_page || $this->is_attachment; if ( $this->is_feed && ( !empty($qv['withcomments']) || ( empty($qv['withoutcomments']) && $this->is_singular ) ) ) $this->is_comment_feed = true; if ( !( $this->is_singular || $this->is_archive || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup ) ) $this->is_home = true; // Correct is_* for page_on_front and page_for_posts if ( $this->is_home && ( empty($this->query) || $qv['preview'] == 'true' ) && 'page' == get_option('show_on_front') && get_option('page_on_front') ) { $this->is_page = true; $this->is_home = false; $qv['page_id'] = get_option('page_on_front'); } if ( '' != $qv['pagename'] ) { $this->queried_object =& get_page_by_path($qv['pagename']); if ( !empty($this->queried_object) ) $this->queried_object_id = (int) $this->queried_object->ID; else unset($this->queried_object); if ( 'page' == get_option('show_on_front') && isset($this->queried_object_id) && $this->queried_object_id == get_option('page_for_posts') ) { $this->is_page = false; $this->is_home = true; $this->is_posts_page = true; } } if ( $qv['page_id'] ) { if ( 'page' == get_option('show_on_front') && $qv['page_id'] == get_option('page_for_posts') ) { $this->is_page = false; $this->is_home = true; $this->is_posts_page = true; } } if ( !empty($qv['post_type']) ) $qv['post_type'] = sanitize_user($qv['post_type'], true); if ( !empty($qv['post_status']) ) $qv['post_status'] = sanitize_user($qv['post_status'], true); if ( $this->is_posts_page && !$qv['withcomments'] ) $this->is_comment_feed = false; $this->is_singular = $this->is_single || $this->is_page || $this->is_attachment; // Done correcting is_* for page_on_front and page_for_posts if ('404' == $qv['error']) $this->set_404(); if ( !empty($query) ) do_action_ref_array('parse_query', array(&$this)); } function set_404() { $is_feed = $this->is_feed; $this->init_query_flags(); $this->is_404 = true; $this->is_feed = $is_feed; } function get($query_var) { if (isset($this->query_vars[$query_var])) { return $this->query_vars[$query_var]; } return ''; } function set($query_var, $value) { $this->query_vars[$query_var] = $value; } function &get_posts() { global $wpdb, $pagenow, $user_ID; do_action_ref_array('pre_get_posts', array(&$this)); // Shorthand. $q = &$this->query_vars; $q = $this->fill_query_vars($q); // First let's clear some variables $distinct = ''; $whichcat = ''; $whichauthor = ''; $whichpage = ''; $result = ''; $where = ''; $limits = ''; $join = ''; $search = ''; $groupby = ''; if ( !isset($q['post_type']) ) $q['post_type'] = 'post'; $post_type = $q['post_type']; if ( !isset($q['posts_per_page']) || $q['posts_per_page'] == 0 ) $q['posts_per_page'] = get_option('posts_per_page'); if ( isset($q['showposts']) && $q['showposts'] ) { $q['showposts'] = (int) $q['showposts']; $q['posts_per_page'] = $q['showposts']; } if ( (isset($q['posts_per_archive_page']) && $q['posts_per_archive_page'] != 0) && ($this->is_archive || $this->is_search) ) $q['posts_per_page'] = $q['posts_per_archive_page']; if ( !isset($q['nopaging']) ) { if ($q['posts_per_page'] == -1) { $q['nopaging'] = true; } else { $q['nopaging'] = false; } } if ( $this->is_feed ) { $q['posts_per_page'] = get_option('posts_per_rss'); $q['nopaging'] = false; } $q['posts_per_page'] = (int) $q['posts_per_page']; if ( $q['posts_per_page'] < -1 ) $q['posts_per_page'] = abs($q['posts_per_page']); else if ( $q['posts_per_page'] == 0 ) $q['posts_per_page'] = 1; if ( $this->is_home && (empty($this->query) || $q['preview'] == 'true') && ( 'page' == get_option('show_on_front') ) && get_option('page_on_front') ) { $this->is_page = true; $this->is_home = false; $q['page_id'] = get_option('page_on_front'); } if (isset($q['page'])) { $q['page'] = trim($q['page'], '/'); $q['page'] = (int) $q['page']; $q['page'] = abs($q['page']); } $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); $full_add = $add_hours * 60 + $add_minutes; $wp_posts_post_date_field = " dateadd('minute'," . $full_add . ", stringdate(post_date)) "; // If a month is specified in the querystring, load that month if ( $q['m'] ) { $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']); $where .= ' AND YEAR(post_date)=' . substr($q['m'], 0, 4); if (strlen($q['m'])>5) $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2); if (strlen($q['m'])>7) $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2); if (strlen($q['m'])>9) $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2); if (strlen($q['m'])>11) $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2); if (strlen($q['m'])>13) $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2); } if ( '' != $q['hour'] ) $where .= " AND HOUR(post_date)='" . $q['hour'] . "'"; if ( '' != $q['minute'] ) $where .= " AND MINUTE(post_date)='" . $q['minute'] . "'"; if ( '' != $q['second'] ) $where .= " AND SECOND(post_date)='" . $q['second'] . "'"; if ( $q['year'] ) $where .= " AND YEAR(post_date)='" . $q['year'] . "'"; if ( $q['monthnum'] ) $where .= " AND MONTH(post_date)='" . $q['monthnum'] . "'"; if ( $q['day'] ) $where .= " AND DAYOFMONTH(post_date)='" . $q['day'] . "'"; if ('' != $q['name']) { $q['name'] = sanitize_title($q['name']); $where .= " AND post_name = '" . $q['name'] . "'"; } else if ('' != $q['pagename']) { if ( isset($this->queried_object_id) ) $reqpage = $this->queried_object_id; else { $reqpage = get_page_by_path($q['pagename']); if ( !empty($reqpage) ) $reqpage = $reqpage->ID; else $reqpage = 0; } if ( ('page' != get_option('show_on_front') ) || ( $reqpage != get_option('page_for_posts') ) ) { $q['pagename'] = str_replace('%2F', '/', urlencode(urldecode($q['pagename']))); $page_paths = '/' . trim($q['pagename'], '/'); $q['pagename'] = sanitize_title(basename($page_paths)); $q['name'] = $q['pagename']; $where .= " AND (ID = '$reqpage')"; } } elseif ('' != $q['attachment']) { $q['attachment'] = str_replace('%2F', '/', urlencode(urldecode($q['attachment']))); $attach_paths = '/' . trim($q['attachment'], '/'); $q['attachment'] = sanitize_title(basename($attach_paths)); $q['name'] = $q['attachment']; $where .= " AND post_name = '" . $q['attachment'] . "'"; } if ( $q['w'] ) $where .= " AND WEEK(post_date, 1)='" . $q['w'] . "'"; if ( intval($q['comments_popup']) ) $q['p'] = intval($q['comments_popup']); // If an attachment is requested by number, let it supercede any post number. if ( $q['attachment_id'] ) $q['p'] = $q['attachment_id']; // If a post number is specified, load that post if ( $q['p'] ) $where = ' AND ID = ' . $q['p']; if ( $q['page_id'] ) { if ( ('page' != get_option('show_on_front') ) || ( $q['page_id'] != get_option('page_for_posts') ) ) { $q['p'] = $q['page_id']; $where = ' AND ID = ' . $q['page_id']; } } // If a search pattern is specified, load the posts that match if ( !empty($q['s']) ) { // added slashes screw with quote grouping when done early, so done later $q['s'] = stripslashes($q['s']); if ($q['sentence']) { $q['search_terms'] = array($q['s']); } else { preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q[s], $matches); $q['search_terms'] = array_map(create_function('$a', 'return trim($a, "\\"\'\\n\\r ");'), $matches[0]); } $n = ($q['exact']) ? '' : '%'; $searchand = ''; foreach((array)$q['search_terms'] as $term) { $term = addslashes_gpc($term); $search .= "{$searchand}((post_title LIKE '{$n}{$term}{$n}') OR (post_content LIKE '{$n}{$term}{$n}'))"; $searchand = ' AND '; } $term = addslashes_gpc($q['s']); if (!$q['sentence'] && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] ) $search .= " OR (post_title LIKE '{$n}{$term}{$n}') OR (post_content LIKE '{$n}{$term}{$n}')"; if ( !empty($search) ) $search = " AND ({$search}) "; } // Category stuff if ( empty($q['cat']) || ($q['cat'] == '0') || // Bypass cat checks if fetching specific posts $this->is_singular ) { $whichcat = ''; } else { $q['cat'] = ''.urldecode($q['cat']).''; $q['cat'] = addslashes_gpc($q['cat']); $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) "; $cat_array = preg_split('/[,\s]+/', $q['cat']); $in_cats = $out_cats = $out_posts = ''; foreach ( $cat_array as $cat ) { $cat = intval($cat); $in = (strpos($cat, '-') != false) ? false : true; $cat = trim($cat, '-'); if ( $in ) $in_cats .= "$cat, " . get_category_children($cat, '', ', '); else $out_cats .= "$cat, " . get_category_children($cat, '', ', '); } $in_cats = substr($in_cats, 0, -2); $out_cats = substr($out_cats, 0, -2); if ( strlen($in_cats) > 0 ) $in_cats = " AND $wpdb->post2cat.category_id IN ($in_cats)"; if ( strlen($out_cats) > 0 ) { $ids = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE $wpdb->post2cat.category_id IN ($out_cats)"); if ( is_array($ids) && count($ids > 0) ) { foreach ( $ids as $id ) $out_posts .= "$id, "; $out_posts = substr($out_posts, 0, -2); } if ( strlen($out_posts) > 0 ) $out_cats = " AND $wpdb->posts.ID NOT IN ($out_posts)"; else $out_cats = ''; } $whichcat = $in_cats . $out_cats; $groupby = "{$wpdb->posts}.ID"; } // Category stuff for nice URLs if ( '' != $q['category_name'] ) { $reqcat = get_category_by_path($q['category_name']); $q['category_name'] = str_replace('%2F', '/', urlencode(urldecode($q['category_name']))); $cat_paths = '/' . trim($q['category_name'], '/'); $q['category_name'] = sanitize_title(basename($cat_paths)); $cat_paths = '/' . trim(urldecode($q['category_name']), '/'); $q['category_name'] = sanitize_title(basename($cat_paths)); $cat_paths = explode('/', $cat_paths); $cat_path = ''; foreach ( (array) $cat_paths as $pathdir ) $cat_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title($pathdir); //if we don't match the entire hierarchy fallback on just matching the nicename if ( empty($reqcat) ) $reqcat = get_category_by_path($q['category_name'], false); if ( !empty($reqcat) ) $reqcat = $reqcat->cat_ID; else $reqcat = 0; $q['cat'] = $reqcat; $tables = ", $wpdb->post2cat, $wpdb->categories"; $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) LEFT JOIN $wpdb->categories ON ($wpdb->post2cat.category_id = $wpdb->categories.cat_ID) "; $whichcat = " AND category_id IN ({$q['cat']}, "; $whichcat .= get_category_children($q['cat'], '', ', '); $whichcat = substr($whichcat, 0, -2); $whichcat .= ")"; $groupby = "{$wpdb->posts}.ID"; } $groupby = ''; // Author/user stuff if ( empty($q['author']) || ($q['author'] == '0') ) { $whichauthor=''; } else { $q['author'] = ''.urldecode($q['author']).''; $q['author'] = addslashes_gpc($q['author']); if (strpos($q['author'], '-') != false) { $eq = '!='; $andor = 'AND'; $q['author'] = explode('-', $q['author']); $q['author'] = ''.intval($q['author'][1]); } else { $eq = '='; $andor = 'OR'; } $author_array = preg_split('/[,\s]+/', $q['author']); $whichauthor .= ' AND (post_author '.$eq.' '.intval($author_array[0]); for ($i = 1; $i < (count($author_array)); $i = $i + 1) { $whichauthor .= ' '.$andor.' post_author '.$eq.' '.intval($author_array[$i]); } $whichauthor .= ')'; } // Author stuff for nice URLs if ('' != $q['author_name']) { if (strpos($q['author_name'], '/') != false) { $q['author_name'] = explode('/',$q['author_name']); if ($q['author_name'][count($q['author_name'])-1]) { $q['author_name'] = $q['author_name'][count($q['author_name'])-1];#no trailing slash } else { $q['author_name'] = $q['author_name'][count($q['author_name'])-2];#there was a trailling slash } } $q['author_name'] = sanitize_title($q['author_name']); $q['author'] = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_nicename='".$q['author_name']."'"); $whichauthor .= ' AND (post_author = '.intval($q['author']).')'; } $where .= $search.$whichcat.$whichauthor; if ( empty($q['order']) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC')) ) $q['order'] = 'DESC'; // Order by if ( empty($q['orderby']) ) { $q['orderby'] = 'post_date '.$q['order']; } else { // Used to filter values $allowed_keys = array('author', 'date', 'category', 'title', 'modified', 'menu_order'); $q['orderby'] = urldecode($q['orderby']); $q['orderby'] = addslashes_gpc($q['orderby']); $orderby_array = explode(' ',$q['orderby']); if ( empty($orderby_array) ) $orderby_array[] = $q['orderby']; $q['orderby'] = ''; for ($i = 0; $i < count($orderby_array); $i++) { // Only allow certain values for safety $orderby = $orderby_array[$i]; if ( 'menu_order' != $orderby ) $orderby = 'post_' . $orderby; if ( in_array($orderby_array[$i], $allowed_keys) ) $q['orderby'] .= (($i == 0) ? '' : ',') . "$orderby {$q['order']}"; } if ( empty($q['orderby']) ) $q['orderby'] = 'post_date '.$q['order']; } if ( $this->is_attachment ) { $where .= " AND (post_type = 'attachment')"; } elseif ($this->is_page) { $where .= " AND (post_type = 'page')"; } elseif ($this->is_single) { $where .= " AND (post_type = 'post')"; } else { $where .= " AND (post_type = '$post_type' AND (post_status = 'publish'"; if ( is_admin() ) $where .= " OR post_status = 'future' OR post_status = 'draft'"; if ( is_user_logged_in() ) { if ( 'post' == $post_type ) $cap = 'read_private_posts'; else $cap = 'read_private_pages'; if ( current_user_can($cap) ) $where .= " OR post_status = 'private'"; else $where .= " OR post_author = $user_ID AND post_status = 'private'"; } $where .= '))'; } // Apply filters on where and join prior to paging so that any // manipulations to them are reflected in the paging by day queries. $where = apply_filters('posts_where', $where); $join = apply_filters('posts_join', $join); // Paging if ( empty($q['nopaging']) && !$this->is_singular ) { $page = abs(intval($q['paged'])); if (empty($page)) { $page = 1; } if ( empty($q['offset']) ) { $pgstrt = ''; $pgstrt = (intval($page) -1) * $q['posts_per_page'] . ', '; // $limits = 'LIMIT '.$pgstrt.$q['posts_per_page']; } else { // we're ignoring $page and using 'offset' $q['offset'] = abs(intval($q['offset'])); $pgstrt = $q['offset'] . ', '; // $limits = 'LIMIT ' . $pgstrt . $q['posts_per_page']; } } // Comments feeds if ( $this->is_comment_feed && ( $this->is_archive || $this->is_search || !$this->is_singular ) ) { if ( $this->is_archive || $this->is_search ) { $cjoin = "LEFT JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) $join "; $cwhere = "WHERE comment_approved = '1' $where"; $cgroupby = "GROUP BY $wpdb->comments.comment_id"; } else { // Other non singular e.g. front $cjoin = "LEFT JOIN $wpdb->posts ON ( $wpdb->comments.comment_post_ID = $wpdb->posts.ID )"; $cwhere = "WHERE post_status = 'publish' AND comment_approved = '1'"; $cgroupby = ''; } $cjoin = apply_filters('comment_feed_join', $cjoin); $cwhere = apply_filters('comment_feed_where', $cwhere); $cgroupby = apply_filters('comment_feed_groupby', $cgroupby); $this->comments = (array) $wpdb->get_results("SELECT $distinct $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere $cgroupby ORDER BY comment_date_gmt DESC"); $this->comment_count = count($this->comments); $post_ids = array(); foreach ($this->comments as $comment) $post_ids[] = (int) $comment->comment_post_ID; $post_ids = join(',', $post_ids); $join = ''; if ( $post_ids ) $where = "AND $wpdb->posts.ID IN ($post_ids) "; else $where = "AND 0"; } // Apply post-paging filters on where and join. Only plugins that // manipulate paging queries should use these hooks. $where = apply_filters('posts_where_paged', $where); $groupby = '';//apply_filters('posts_groupby', $groupby); if ( ! empty($groupby) ) $groupby = 'GROUP BY ' . $groupby; $join = apply_filters('posts_join_paged', $join); $orderby = apply_filters('posts_orderby', $q['orderby']); $distinct = apply_filters('posts_distinct', $distinct); $fields = apply_filters('posts_fields', "$wpdb->posts.*"); $limits = ''; //apply_filters( 'post_limits', $limits ); $found_rows = ''; $request = " SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby ORDER BY $orderby"; // $limits $this->request = apply_filters('posts_request', $request); $this->posts = $wpdb->get_results($this->request); if ( $this->is_comment_feed && $this->is_singular ) { $cjoin = apply_filters('comment_feed_join', ''); $cwhere = apply_filters('comment_feed_where', "WHERE comment_post_ID = {$this->posts[0]->ID} AND comment_approved = '1'"); $comments_request = "SELECT $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere ORDER BY comment_date_gmt DESC"; // LIMIT " . get_option('posts_per_rss') $this->comments = $wpdb->get_results($comments_request); $this->comment_count = count($this->comments); } if ( !empty($limits) ) { $found_posts_query = apply_filters( 'found_posts_query', 'SELECT COUNT(*)' ); $this->found_posts = $wpdb->get_var( $found_posts_query ); $this->found_posts = apply_filters( 'found_posts', $this->found_posts ); $this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']); } // Check post status to determine if post should be displayed. if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { $status = get_post_status($this->posts[0]); //$type = get_post_type($this->posts[0]); if ( ('publish' != $status) ) { if ( ! is_user_logged_in() ) { // User must be logged in to view unpublished posts. $this->posts = array(); } else { if ('draft' == $status) { // User must have edit permissions on the draft to preview. if (! current_user_can('edit_post', $this->posts[0]->ID)) { $this->posts = array(); } else { $this->is_preview = true; $this->posts[0]->post_date = current_time('mysql'); } } else if ('future' == $status) { $this->is_preview = true; if (!current_user_can('edit_post', $this->posts[0]->ID)) { $this->posts = array ( ); } } else { if (! current_user_can('read_post', $this->posts[0]->ID)) $this->posts = array(); } } } } $this->posts = apply_filters('the_posts', $this->posts); update_post_caches($this->posts); $this->post_count = count($this->posts); if ($this->post_count > 0) { $this->post = $this->posts[0]; } return $this->posts; } function next_post() { $this->current_post++; $this->post = $this->posts[$this->current_post]; return $this->post; } function the_post() { global $post; $this->in_the_loop = true; $post = $this->next_post(); setup_postdata($post); if ( $this->current_post == 0 ) // loop has just started do_action('loop_start'); } function have_posts() { if ($this->current_post + 1 < $this->post_count) { return true; } elseif ($this->current_post + 1 == $this->post_count) { do_action('loop_end'); // Do some cleaning up after the loop $this->rewind_posts(); } $this->in_the_loop = false; return false; } function rewind_posts() { $this->current_post = -1; if ($this->post_count > 0) { $this->post = $this->posts[0]; } } function next_comment() { $this->current_comment++; $this->comment = $this->comments[$this->current_comment]; return $this->comment; } function the_comment() { global $comment; $comment = $this->next_comment(); if ($this->current_comment == 0) { do_action('comment_loop_start'); } } function have_comments() { if ($this->current_comment + 1 < $this->comment_count) { return true; } elseif ($this->current_comment + 1 == $this->comment_count) { $this->rewind_comments(); } return false; } function rewind_comments() { $this->current_comment = -1; if ($this->comment_count > 0) { $this->comment = $this->comments[0]; } } function &query($query) { $this->parse_query($query); return $this->get_posts(); } function get_queried_object() { if (isset($this->queried_object)) { return $this->queried_object; } $this->queried_object = NULL; $this->queried_object_id = 0; if ($this->is_category) { $cat = $this->get('cat'); $category = &get_category($cat); $this->queried_object = &$category; $this->queried_object_id = (int) $cat; } else if ($this->is_posts_page) { $this->queried_object = & get_page(get_option('page_for_posts')); $this->queried_object_id = (int) $this->queried_object->ID; } else if ($this->is_single) { $this->queried_object = $this->post; $this->queried_object_id = (int) $this->post->ID; } else if ($this->is_page) { $this->queried_object = $this->post; $this->queried_object_id = (int) $this->post->ID; } else if ($this->is_author) { $author_id = (int) $this->get('author'); $author = get_userdata($author_id); $this->queried_object = $author; $this->queried_object_id = $author_id; } return $this->queried_object; } function get_queried_object_id() { $this->get_queried_object(); if (isset($this->queried_object_id)) { return $this->queried_object_id; } return 0; } function WP_Query ($query = '') { if (! empty($query)) { $this->query($query); } } } // Redirect old slugs function wp_old_slug_redirect () { global $wp_query; if ( is_404() && '' != $wp_query->query_vars['name'] ) : global $wpdb; $query = "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND meta_key = '_wp_old_slug' AND meta_value='" . $wp_query->query_vars['name'] . "'"; // if year, monthnum, or day have been specified, make our query more precise // just in case there are multiple identical _wp_old_slug values if ( '' != $wp_query->query_vars['year'] ) $query .= " AND YEAR(post_date) = '{$wp_query->query_vars['year']}'"; if ( '' != $wp_query->query_vars['monthnum'] ) $query .= " AND MONTH(post_date) = '{$wp_query->query_vars['monthnum']}'"; if ( '' != $wp_query->query_vars['day'] ) $query .= " AND DAYOFMONTH(post_date) = '{$wp_query->query_vars['day']}'"; $id = (int) $wpdb->get_var($query); if ( !$id ) return; $link = get_permalink($id); if ( !$link ) return; wp_redirect($link, '301'); // Permanent redirect exit; endif; } // // Private helper functions // // Setup global post data. function setup_postdata($post) { global $id, $postdata, $authordata, $day, $page, $pages, $multipage, $more, $numpages, $wp_query; global $pagenow; $id = (int) $post->ID; $authordata = get_userdata($post->post_author); $day = mysql2date('d.m.y', $post->post_date); $currentmonth = mysql2date('m', $post->post_date); $numpages = 1; $page = get_query_var('page'); if ( !$page ) $page = 1; if ( is_single() || is_page() ) $more = 1; $content = $post->post_content; if ( preg_match('//', $content) ) { if ( $page > 1 ) $more = 1; $multipage = 1; $content = str_replace("\n\n", '', $content); $content = str_replace("\n", '', $content); $content = str_replace("\n", '', $content); $pages = explode('', $content); $numpages = count($pages); } else { $pages[0] = $post->post_content; $multipage = 0; } return true; } ?> 0wordpress/wp-includes/registration-functions.phpe &wordpress/wp-includes/registration.phpID; return null; } function email_exists( $email ) { global $wpdb; $email = addslashes( $email ); return $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_email = '$email'"); } function validate_username( $username ) { $name = sanitize_user($username, true); $valid = true; if ( $name != $username ) $valid = false; return apply_filters('validate_username', $valid, $username); } function wp_insert_user($userdata) { global $wpdb; extract($userdata, EXTR_SKIP); // Are we updating or creating? if ( !empty($ID) ) { $ID = (int) $ID; $update = true; } else { $update = false; // Password is not hashed when creating new user. $user_pass = md5($user_pass); } $user_login = sanitize_user($user_login, true); $user_login = apply_filters('pre_user_login', $user_login); if ( empty($user_nicename) ) $user_nicename = sanitize_title( $user_login ); $user_nicename = apply_filters('pre_user_nicename', $user_nicename); if ( empty($user_url) ) $user_url = ''; $user_url = apply_filters('pre_user_url', $user_url); if ( empty($user_email) ) $user_email = ''; $user_email = apply_filters('pre_user_email', $user_email); if ( empty($display_name) ) $display_name = $user_login; $display_name = apply_filters('pre_user_display_name', $display_name); if ( empty($nickname) ) $nickname = $user_login; $nickname = apply_filters('pre_user_nickname', $nickname); if ( empty($first_name) ) $first_name = ''; $first_name = apply_filters('pre_user_first_name', $first_name); if ( empty($last_name) ) $last_name = ''; $last_name = apply_filters('pre_user_last_name', $last_name); if ( empty($description) ) $description = ''; $description = apply_filters('pre_user_description', $description); if ( empty($rich_editing) ) $rich_editing = 'true'; if ( empty($user_registered) ) $user_registered = gmdate('Y-m-d H:i:s'); if ( $update ) { $query = "UPDATE $wpdb->users SET user_pass='$user_pass', user_email='$user_email', user_url='$user_url', user_nicename = '$user_nicename', display_name = '$display_name' WHERE ID = ". $ID; $query = apply_filters('update_user_query', $query); $wpdb->query( $query ); $user_id = (int) $ID; } else { $query = "INSERT INTO $wpdb->users (user_login, user_pass, user_email, user_url, user_registered, user_nicename, display_name) VALUES ('$user_login', '$user_pass', '$user_email', '$user_url', '$user_registered', '$user_nicename', '$display_name')"; $query = apply_filters('create_user_query', $query); $wpdb->insert( $query, $wpdb->users, "id"); $user_id = (int) $wpdb->insert_id; } update_usermeta( $user_id, 'first_name', $first_name); update_usermeta( $user_id, 'last_name', $last_name); update_usermeta( $user_id, 'nickname', $nickname ); update_usermeta( $user_id, 'description', $description ); update_usermeta( $user_id, 'jabber', $jabber ); update_usermeta( $user_id, 'aim', $aim ); update_usermeta( $user_id, 'yim', $yim ); update_usermeta( $user_id, 'rich_editing', $rich_editing); if ( $update && isset($role) ) { $user = new WP_User($user_id); $user->set_role($role); } if ( !$update ) { $user = new WP_User($user_id); $user->set_role(get_option('default_role')); } wp_cache_delete($user_id, 'users'); wp_cache_delete($user_login, 'userlogins'); if ( $update ) do_action('profile_update', $user_id); else do_action('user_register', $user_id); return $user_id; } function wp_update_user($userdata) { global $wpdb; $ID = (int) $userdata['ID']; // First, get all of the original fields $user = get_userdata($ID); // Escape data pulled from DB. $user = add_magic_quotes(get_object_vars($user)); // If password is changing, hash it now. if ( ! empty($userdata['user_pass']) ) { $plaintext_pass = $userdata['user_pass']; $userdata['user_pass'] = md5($userdata['user_pass']); } // Merge old and new fields with new fields overwriting old ones. $userdata = array_merge($user, $userdata); $user_id = wp_insert_user($userdata); // Update the cookies if the password changed. $current_user = wp_get_current_user(); if ( $current_user->id == $ID ) { if ( isset($plaintext_pass) ) { wp_clearcookie(); wp_setcookie($userdata['user_login'], $plaintext_pass); } } return $user_id; } function wp_create_user($username, $password, $email = '') { global $wpdb; $user_login = $wpdb->escape($username); $user_email = $wpdb->escape($email); $user_pass = $password; $userdata = compact('user_login', 'user_email', 'user_pass'); return wp_insert_user($userdata); } function create_user($username, $password, $email) { return wp_create_user($username, $password, $email); } ?>!wordpress/wp-includes/rewrite.phprwadd_rule($regex, $redirect); } //Add a new tag (like %postname%) //warning: you must call this on init or earlier, otherwise the query var addition stuff won't work function add_rewrite_tag($tagname, $regex) { //validation if (strlen($tagname) < 3 || $tagname{0} != '%' || $tagname{strlen($tagname)-1} != '%') { return; } $qv = trim($tagname, '%'); global $wp_rewrite, $wp; $wp->add_query_var($qv); $wp_rewrite->add_rewrite_tag($tagname, $regex, $qv . '='); } //Add a new feed type like /atom1/ function add_feed($feedname, $function) { global $wp_rewrite; if (!in_array($feedname, $wp_rewrite->feeds)) { //override the file if it is $wp_rewrite->feeds[] = $feedname; } $hook = 'do_feed_' . $feedname; remove_action($hook, $function, 10, 1); add_action($hook, $function, 10, 1); return $hook; } define('EP_PERMALINK', 1 ); define('EP_ATTACHMENT', 2 ); define('EP_DATE', 4 ); define('EP_YEAR', 8 ); define('EP_MONTH', 16 ); define('EP_DAY', 32 ); define('EP_ROOT', 64 ); define('EP_COMMENTS', 128 ); define('EP_SEARCH', 256 ); define('EP_CATEGORIES', 512 ); define('EP_AUTHORS', 1024); define('EP_PAGES', 2048); //pseudo-places define('EP_NONE', 0 ); define('EP_ALL', 4095); //and an endpoint, like /trackback/ function add_rewrite_endpoint($name, $places) { global $wp_rewrite; $wp_rewrite->add_endpoint($name, $places); } // examine a url (supposedly from this blog) and try to // determine the post ID it represents. function url_to_postid($url) { global $wp_rewrite; $url = apply_filters('url_to_postid', $url); // First, check to see if there is a 'p=N' or 'page_id=N' to match against preg_match('#[?&](p|page_id)=(\d+)#', $url, $values); $id = intval($values[2]); if ( $id ) return $id; // Check to see if we are using rewrite rules $rewrite = $wp_rewrite->wp_rewrite_rules(); // Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options if ( empty($rewrite) ) return 0; // $url cleanup by Mark Jaquith // This fixes things like #anchors, ?query=strings, missing 'www.', // added 'www.', or added 'index.php/' that will mess up our WP_Query // and return a false negative // Get rid of the #anchor $url_split = explode('#', $url); $url = $url_split[0]; // Get rid of URL ?query=string $url_split = explode('?', $url); $url = $url_split[0]; // Add 'www.' if it is absent and should be there if ( false != strpos(get_option('home'), '://www.') && false == strpos($url, '://www.') ) $url = str_replace('://', '://www.', $url); // Strip 'www.' if it is present and shouldn't be if ( false == strpos(get_option('home'), '://www.') ) $url = str_replace('://www.', '://', $url); // Strip 'index.php/' if we're not using path info permalinks if ( !$wp_rewrite->using_index_permalinks() ) $url = str_replace('index.php/', '', $url); if ( false != strpos($url, get_option('home')) ) { // Chop off http://domain.com $url = str_replace(get_option('home'), '', $url); } else { // Chop off /path/to/blog $home_path = parse_url(get_option('home')); $home_path = $home_path['path']; $url = str_replace($home_path, '', $url); } // Trim leading and lagging slashes $url = trim($url, '/'); $request = $url; // Done with cleanup // Look for matches. $request_match = $request; foreach ($rewrite as $match => $query) { // If the requesting file is the anchor of the match, prepend it // to the path info. if ( (! empty($url)) && (strpos($match, $url) == 0) ) { $request_match = $url . '/' . $request; } if ( preg_match("!^$match!", $request_match, $matches) ) { // Got a match. // Trim the query of everything up to the '?'. $query = preg_replace("!^.+\?!", '', $query); // Substitute the substring matches into the query. eval("\$query = \"$query\";"); // Filter out non-public query vars global $wp; parse_str($query, $query_vars); $query = array(); foreach ( $query_vars as $key => $value ) { if ( in_array($key, $wp->public_query_vars) ) $query[$key] = $value; } // Do the query $query = new WP_Query($query); if ( $query->is_single || $query->is_page ) return $query->post->ID; else return 0; } } return 0; } /* WP_Rewrite class *******************************************************************************/ class WP_Rewrite { var $permalink_structure; var $use_trailing_slashes; var $category_base; var $category_structure; var $author_base = 'author'; var $author_structure; var $date_structure; var $page_structure; var $search_base = 'search'; var $search_structure; var $comments_base = 'comments'; var $feed_base = 'feed'; var $comments_feed_structure; var $feed_structure; var $front; var $root = ''; var $index = 'index.php'; var $matches = ''; var $rules; var $extra_rules; //those not generated by the class, see add_rewrite_rule() var $non_wp_rules; //rules that don't redirect to WP's index.php var $endpoints; var $use_verbose_rules = false; var $rewritecode = array( '%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%', '%postname%', '%post_id%', '%category%', '%author%', '%pagename%', '%search%' ); var $rewritereplace = array( '([0-9]{4})', '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', '([^/]+)', '([0-9]+)', '(.+?)', '([^/]+)', '([^/]+)', '(.+)' ); var $queryreplace = array ( 'year=', 'monthnum=', 'day=', 'hour=', 'minute=', 'second=', 'name=', 'p=', 'category_name=', 'author_name=', 'pagename=', 's=' ); var $feeds = array ( 'feed', 'rdf', 'rss', 'rss2', 'atom' ); function using_permalinks() { if (empty($this->permalink_structure)) return false; else return true; } function using_index_permalinks() { if (empty($this->permalink_structure)) { return false; } // If the index is not in the permalink, we're using mod_rewrite. if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) { return true; } return false; } function using_mod_rewrite_permalinks() { if ( $this->using_permalinks() && ! $this->using_index_permalinks()) return true; else return false; } function preg_index($number) { $match_prefix = '$'; $match_suffix = ''; if (! empty($this->matches)) { $match_prefix = '$' . $this->matches . '['; $match_suffix = ']'; } return "$match_prefix$number$match_suffix"; } function page_rewrite_rules() { $uris = get_option('page_uris'); $attachment_uris = get_option('page_attachment_uris'); $rewrite_rules = array(); $page_structure = $this->get_page_permastruct(); if( is_array( $attachment_uris ) ) { foreach ($attachment_uris as $uri => $pagename) { $this->add_rewrite_tag('%pagename%', "($uri)", 'attachment='); $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure, EP_PAGES)); } } if( is_array( $uris ) ) { foreach ($uris as $uri => $pagename) { $this->add_rewrite_tag('%pagename%', "($uri)", 'pagename='); $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure, EP_PAGES)); } } return $rewrite_rules; } function get_date_permastruct() { if (isset($this->date_structure)) { return $this->date_structure; } if (empty($this->permalink_structure)) { $this->date_structure = ''; return false; } // The date permalink must have year, month, and day separated by slashes. $endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%'); $this->date_structure = ''; $date_endian = ''; foreach ($endians as $endian) { if (false != strpos($this->permalink_structure, $endian)) { $date_endian= $endian; break; } } if ( empty($date_endian) ) $date_endian = '%year%/%monthnum%/%day%'; // Do not allow the date tags and %post_id% to overlap in the permalink // structure. If they do, move the date tags to $front/date/. $front = $this->front; preg_match_all('/%.+?%/', $this->permalink_structure, $tokens); $tok_index = 1; foreach ($tokens[0] as $token) { if ( ($token == '%post_id%') && ($tok_index <= 3) ) { $front = $front . 'date/'; break; } $tok_index++; } $this->date_structure = $front . $date_endian; return $this->date_structure; } function get_year_permastruct() { $structure = $this->get_date_permastruct($this->permalink_structure); if (empty($structure)) { return false; } $structure = str_replace('%monthnum%', '', $structure); $structure = str_replace('%day%', '', $structure); $structure = preg_replace('#/+#', '/', $structure); return $structure; } function get_month_permastruct() { $structure = $this->get_date_permastruct($this->permalink_structure); if (empty($structure)) { return false; } $structure = str_replace('%day%', '', $structure); $structure = preg_replace('#/+#', '/', $structure); return $structure; } function get_day_permastruct() { return $this->get_date_permastruct($this->permalink_structure); } function get_category_permastruct() { if (isset($this->category_structure)) { return $this->category_structure; } if (empty($this->permalink_structure)) { $this->category_structure = ''; return false; } if (empty($this->category_base)) $this->category_structure = $this->front . 'category/'; else $this->category_structure = $this->category_base . '/'; $this->category_structure .= '%category%'; return $this->category_structure; } function get_author_permastruct() { if (isset($this->author_structure)) { return $this->author_structure; } if (empty($this->permalink_structure)) { $this->author_structure = ''; return false; } $this->author_structure = $this->front . $this->author_base . '/%author%'; return $this->author_structure; } function get_search_permastruct() { if (isset($this->search_structure)) { return $this->search_structure; } if (empty($this->permalink_structure)) { $this->search_structure = ''; return false; } $this->search_structure = $this->root . $this->search_base . '/%search%'; return $this->search_structure; } function get_page_permastruct() { if (isset($this->page_structure)) { return $this->page_structure; } if (empty($this->permalink_structure)) { $this->page_structure = ''; return false; } $this->page_structure = $this->root . '%pagename%'; return $this->page_structure; } function get_feed_permastruct() { if (isset($this->feed_structure)) { return $this->feed_structure; } if (empty($this->permalink_structure)) { $this->feed_structure = ''; return false; } $this->feed_structure = $this->root . $this->feed_base . '/%feed%'; return $this->feed_structure; } function get_comment_feed_permastruct() { if (isset($this->comment_feed_structure)) { return $this->comment_feed_structure; } if (empty($this->permalink_structure)) { $this->comment_feed_structure = ''; return false; } $this->comment_feed_structure = $this->root . $this->comments_base . '/' . $this->feed_base . '/%feed%'; return $this->comment_feed_structure; } function add_rewrite_tag($tag, $pattern, $query) { // If the tag already exists, replace the existing pattern and query for // that tag, otherwise add the new tag, pattern, and query to the end of // the arrays. $position = array_search($tag, $this->rewritecode); if (FALSE != $position && NULL != $position) { $this->rewritereplace[$position] = $pattern; $this->queryreplace[$position] = $query; } else { $this->rewritecode[] = $tag; $this->rewritereplace[] = $pattern; $this->queryreplace[] = $query; } } //the main WP_Rewrite function. generate the rules from permalink structure function generate_rewrite_rules($permalink_structure, $ep_mask = EP_NONE, $paged = true, $feed = true, $forcomments = false, $walk_dirs = true, $endpoints = true) { //build a regex to match the feed section of URLs, something like (feed|atom|rss|rss2)/? $feedregex2 = ''; foreach ($this->feeds as $feed_name) { $feedregex2 .= $feed_name . '|'; } $feedregex2 = '(' . trim($feedregex2, '|') . ')/?$'; //$feedregex is identical but with /feed/ added on as well, so URLs like /feed/atom //and /atom are both possible $feedregex = $this->feed_base . '/' . $feedregex2; //build a regex to match the trackback and page/xx parts of URLs $trackbackregex = 'trackback/?$'; $pageregex = 'page/?([0-9]{1,})/?$'; //build up an array of endpoint regexes to append => queries to append if ($endpoints) { $ep_query_append = array (); foreach ($this->endpoints as $endpoint) { //match everything after the endpoint name, but allow for nothing to appear there $epmatch = $endpoint[1] . '(/(.*))?/?$'; //this will be appended on to the rest of the query for each dir $epquery = '&' . $endpoint[1] . '='; $ep_query_append[$epmatch] = array ( $endpoint[0], $epquery ); } } //get everything up to the first rewrite tag $front = substr($permalink_structure, 0, strpos($permalink_structure, '%')); //build an array of the tags (note that said array ends up being in $tokens[0]) preg_match_all('/%.+?%/', $permalink_structure, $tokens); $num_tokens = count($tokens[0]); $index = $this->index; //probably 'index.php' $feedindex = $index; $trackbackindex = $index; //build a list from the rewritecode and queryreplace arrays, that will look something like //tagname=$matches[i] where i is the current $i for ($i = 0; $i < $num_tokens; ++$i) { if (0 < $i) { $queries[$i] = $queries[$i - 1] . '&'; } $query_token = str_replace($this->rewritecode, $this->queryreplace, $tokens[0][$i]) . $this->preg_index($i+1); $queries[$i] .= $query_token; } //get the structure, minus any cruft (stuff that isn't tags) at the front $structure = $permalink_structure; if ($front != '/') { $structure = str_replace($front, '', $structure); } //create a list of dirs to walk over, making rewrite rules for each level //so for example, a $structure of /%year%/%month%/%postname% would create //rewrite rules for /%year%/, /%year%/%month%/ and /%year%/%month%/%postname% $structure = trim($structure, '/'); if ($walk_dirs) { $dirs = explode('/', $structure); } else { $dirs[] = $structure; } $num_dirs = count($dirs); //strip slashes from the front of $front $front = preg_replace('|^/+|', '', $front); //the main workhorse loop $post_rewrite = array(); $struct = $front; for ($j = 0; $j < $num_dirs; ++$j) { //get the struct for this dir, and trim slashes off the front $struct .= $dirs[$j] . '/'; //accumulate. see comment near explode('/', $structure) above $struct = ltrim($struct, '/'); //replace tags with regexes $match = str_replace($this->rewritecode, $this->rewritereplace, $struct); //make a list of tags, and store how many there are in $num_toks $num_toks = preg_match_all('/%.+?%/', $struct, $toks); //get the 'tagname=$matches[i]' $query = $queries[$num_toks - 1]; //set up $ep_mask_specific which is used to match more specific URL types switch ($dirs[$j]) { case '%year%': $ep_mask_specific = EP_YEAR; break; case '%monthnum%': $ep_mask_specific = EP_MONTH; break; case '%day%': $ep_mask_specific = EP_DAY; break; } //create query for /page/xx $pagematch = $match . $pageregex; $pagequery = $index . '?' . $query . '&paged=' . $this->preg_index($num_toks + 1); //create query for /feed/(feed|atom|rss|rss2|rdf) $feedmatch = $match . $feedregex; $feedquery = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1); //create query for /(feed|atom|rss|rss2|rdf) (see comment near creation of $feedregex) $feedmatch2 = $match . $feedregex2; $feedquery2 = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1); //if asked to, turn the feed queries into comment feed ones if ($forcomments) { $feedquery .= '&withcomments=1'; $feedquery2 .= '&withcomments=1'; } //start creating the array of rewrites for this dir $rewrite = array(); if ($feed) //...adding on /feed/ regexes => queries $rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2); if ($paged) //...and /page/xx ones $rewrite = array_merge($rewrite, array($pagematch => $pagequery)); //do endpoints if ($endpoints) { foreach ($ep_query_append as $regex => $ep) { //add the endpoints on if the mask fits if ($ep[0] & $ep_mask || $ep[0] & $ep_mask_specific) { $rewrite[$match . $regex] = $index . '?' . $query . $ep[1] . $this->preg_index($num_toks + 2); } } } //if we've got some tags in this dir if ($num_toks) { $post = false; $page = false; //check to see if this dir is permalink-level: i.e. the structure specifies an //individual post. Do this by checking it contains at least one of 1) post name, //2) post ID, 3) page name, 4) timestamp (year, month, day, hour, second and //minute all present). Set these flags now as we need them for the endpoints. if (strpos($struct, '%postname%') != false || strpos($struct, '%post_id%') != false || strpos($struct, '%pagename%') != false || (strpos($struct, '%year%') != false && strpos($struct, '%monthnum%') != false && strpos($struct, '%day%') != false && strpos($struct, '%hour%') != false && strpos($struct, '%minute%') != false && strpos($struct, '%second%') != false)) { $post = true; if (strpos($struct, '%pagename%') != false) $page = true; } //if we're creating rules for a permalink, do all the endpoints like attachments etc if ($post) { $post = true; //create query and regex for trackback $trackbackmatch = $match . $trackbackregex; $trackbackquery = $trackbackindex . '?' . $query . '&tb=1'; //trim slashes from the end of the regex for this dir $match = rtrim($match, '/'); //get rid of brackets $submatchbase = str_replace(array('(',')'),'',$match); //add a rule for at attachments, which take the form of /some-text $sub1 = $submatchbase . '/([^/]+)/'; $sub1tb = $sub1 . $trackbackregex; //add trackback regex /trackback/... $sub1feed = $sub1 . $feedregex; //and /feed/(atom|...) $sub1feed2 = $sub1 . $feedregex2; //and /(feed|atom...) //add an ? as we don't have to match that last slash, and finally a $ so we //match to the end of the URL //add another rule to match attachments in the explicit form: ///attachment/some-text $sub2 = $submatchbase . '/attachment/([^/]+)/'; $sub2tb = $sub2 . $trackbackregex; //and add trackbacks /attachment/trackback $sub2feed = $sub2 . $feedregex; //feeds, /attachment/feed/(atom|...) $sub2feed2 = $sub2 . $feedregex2; //and feeds again on to this /attachment/(feed|atom...) //create queries for these extra tag-ons we've just dealt with $subquery = $index . '?attachment=' . $this->preg_index(1); $subtbquery = $subquery . '&tb=1'; $subfeedquery = $subquery . '&feed=' . $this->preg_index(2); //do endpoints for attachments if ($endpoint) { foreach ($ep_query_append as $regex => $ep) { if ($ep[0] & EP_ATTACHMENT) { $rewrite[$sub1 . $regex] = $subquery . '?' . $ep[1] . $this->preg_index(2); $rewrite[$sub2 . $regex] = $subquery . '?' . $ep[1] . $this->preg_index(2); } } } //now we've finished with endpoints, finish off the $sub1 and $sub2 matches $sub1 .= '?$'; $sub2 .= '?$'; //allow URLs like /2 for /page/2 $match = $match . '(/[0-9]+)?/?$'; $query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1); } else { //not matching a permalink so this is a lot simpler //close the match and finalise the query $match .= '?$'; $query = $index . '?' . $query; } //create the final array for this dir by joining the $rewrite array (which currently //only contains rules/queries for trackback, pages etc) to the main regex/query for //this dir $rewrite = array_merge($rewrite, array($match => $query)); //if we're matching a permalink, add those extras (attachments etc) on if ($post) { //add trackback $rewrite = array_merge(array($trackbackmatch => $trackbackquery), $rewrite); //add regexes/queries for attachments, attachment trackbacks and so on if ( ! $page ) //require /attachment/stuff form for pages because of confusion with subpages $rewrite = array_merge($rewrite, array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery)); $rewrite = array_merge($rewrite, array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery)); } } //if($num_toks) //add the rules for this dir to the accumulating $post_rewrite $post_rewrite = array_merge($rewrite, $post_rewrite); } //foreach ($dir) return $post_rewrite; //the finished rules. phew! } function generate_rewrite_rule($permalink_structure, $walk_dirs = false) { return $this->generate_rewrite_rules($permalink_structure, EP_NONE, false, false, false, $walk_dirs); } /* rewrite_rules * Construct rewrite matches and queries from permalink structure. * Returns an associate array of matches and queries. */ function rewrite_rules() { $rewrite = array(); if (empty($this->permalink_structure)) { return $rewrite; } // robots.txt $robots_rewrite = array('robots.txt$' => $this->index . '?robots=1'); //Default Feed rules - These are require to allow for the direct access files to work with permalink structure starting with %category% $default_feeds = array( 'wp-atom.php$' => $this->index .'?feed=atom', 'wp-rdf.php$' => $this->index .'?feed=rdf', 'wp-rss.php$' => $this->index .'?feed=rss', 'wp-rss2.php$' => $this->index .'?feed=rss2', 'wp-feed.php$' => $this->index .'?feed=feed', 'wp-commentsrss2.php$' => $this->index . '?feed=rss2&withcomments=1'); // Post $post_rewrite = $this->generate_rewrite_rules($this->permalink_structure, EP_PERMALINK); $post_rewrite = apply_filters('post_rewrite_rules', $post_rewrite); // Date $date_rewrite = $this->generate_rewrite_rules($this->get_date_permastruct(), EP_DATE); $date_rewrite = apply_filters('date_rewrite_rules', $date_rewrite); // Root $root_rewrite = $this->generate_rewrite_rules($this->root . '/', EP_ROOT); $root_rewrite = apply_filters('root_rewrite_rules', $root_rewrite); // Comments $comments_rewrite = $this->generate_rewrite_rules($this->root . $this->comments_base, EP_COMMENTS, true, true, true, false); $comments_rewrite = apply_filters('comments_rewrite_rules', $comments_rewrite); // Search $search_structure = $this->get_search_permastruct(); $search_rewrite = $this->generate_rewrite_rules($search_structure, EP_SEARCH); $search_rewrite = apply_filters('search_rewrite_rules', $search_rewrite); // Categories $category_rewrite = $this->generate_rewrite_rules($this->get_category_permastruct(), EP_CATEGORIES); $category_rewrite = apply_filters('category_rewrite_rules', $category_rewrite); // Authors $author_rewrite = $this->generate_rewrite_rules($this->get_author_permastruct(), EP_AUTHORS); $author_rewrite = apply_filters('author_rewrite_rules', $author_rewrite); // Pages $page_rewrite = $this->page_rewrite_rules(); $page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite); // Put them together. $this->rules = array_merge($robots_rewrite, $default_feeds, $page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $this->extra_rules); do_action_ref_array('generate_rewrite_rules', array(&$this)); $this->rules = apply_filters('rewrite_rules_array', $this->rules); return $this->rules; } function wp_rewrite_rules() { $this->rules = get_option('rewrite_rules'); if ( empty($this->rules) ) { $this->matches = 'matches'; $this->rewrite_rules(); update_option('rewrite_rules', $this->rules); } return $this->rules; } function mod_rewrite_rules() { if ( ! $this->using_permalinks()) { return ''; } $site_root = parse_url(get_option('siteurl')); $site_root = trailingslashit($site_root['path']); $home_root = parse_url(get_option('home')); $home_root = trailingslashit($home_root['path']); $rules = "\n"; $rules .= "RewriteEngine On\n"; $rules .= "RewriteBase $home_root\n"; //add in the rules that don't redirect to WP's index.php (and thus shouldn't be handled by WP at all) foreach ($this->non_wp_rules as $match => $query) { // Apache 1.3 does not support the reluctant (non-greedy) modifier. $match = str_replace('.+?', '.+', $match); // If the match is unanchored and greedy, prepend rewrite conditions // to avoid infinite redirects and eclipsing of real files. if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) { //nada. } $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n"; } if ($this->use_verbose_rules) { $this->matches = ''; $rewrite = $this->rewrite_rules(); $num_rules = count($rewrite); $rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n" . "RewriteCond %{REQUEST_FILENAME} -d\n" . "RewriteRule ^.*$ - [S=$num_rules]\n"; foreach ($rewrite as $match => $query) { // Apache 1.3 does not support the reluctant (non-greedy) modifier. $match = str_replace('.+?', '.+', $match); // If the match is unanchored and greedy, prepend rewrite conditions // to avoid infinite redirects and eclipsing of real files. if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) { //nada. } if (strpos($query, $this->index) != false) { $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n"; } else { $rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n"; } } } else { $rules .= "RewriteCond %{REQUEST_FILENAME} !-f\n" . "RewriteCond %{REQUEST_FILENAME} !-d\n" . "RewriteRule . {$home_root}{$this->index} [L]\n"; } $rules .= "\n"; $rules = apply_filters('mod_rewrite_rules', $rules); $rules = apply_filters('rewrite_rules', $rules); // Deprecated return $rules; } //Add a straight rewrite rule function add_rule($regex, $redirect) { //get everything up to the first ? $index = (strpos($redirect, '?') == false ? strlen($redirect) : strpos($redirect, '?')); $front = substr($redirect, 0, $index); if ($front != $this->index) { //it doesn't redirect to WP's index.php $this->add_external_rule($regex, $redirect); } else { $this->extra_rules[$regex] = $redirect; } } //add a rule that doesn't redirect to index.php function add_external_rule($regex, $redirect) { $this->non_wp_rules[$regex] = $redirect; } //add an endpoint, like /trackback/, to be inserted after certain URL types (specified in $places) function add_endpoint($name, $places) { global $wp; $this->endpoints[] = array ( $places, $name ); $wp->add_query_var($name); } function flush_rules() { generate_page_uri_index(); delete_option('rewrite_rules'); $this->wp_rewrite_rules(); if ( function_exists('save_mod_rewrite_rules') ) save_mod_rewrite_rules(); } function init() { $this->extra_rules = $this->non_wp_rules = $this->endpoints = array(); $this->permalink_structure = get_option('permalink_structure'); $this->front = substr($this->permalink_structure, 0, strpos($this->permalink_structure, '%')); $this->root = ''; if ($this->using_index_permalinks()) { $this->root = $this->index . '/'; } $this->category_base = get_option('category_base'); unset($this->category_structure); unset($this->author_structure); unset($this->date_structure); unset($this->page_structure); unset($this->search_structure); unset($this->feed_structure); unset($this->comment_feed_structure); $this->use_trailing_slashes = ( substr($this->permalink_structure, -1, 1) == '/' ) ? true : false; } function set_permalink_structure($permalink_structure) { if ($permalink_structure != $this->permalink_structure) { update_option('permalink_structure', $permalink_structure); $this->init(); } } function set_category_base($category_base) { if ($category_base != $this->category_base) { update_option('category_base', $category_base); $this->init(); } } function WP_Rewrite() { $this->init(); } } ?>'wordpress/wp-includes/rss-functions.php[ wordpress/wp-includes/rss.phpR * Version: 0.51 * License: GPL */ define('RSS', 'RSS'); define('ATOM', 'Atom'); define('MAGPIE_USER_AGENT', 'WordPress/' . $GLOBALS['wp_version']); class MagpieRSS { var $parser; var $current_item = array(); // item currently being parsed var $items = array(); // collection of parsed items var $channel = array(); // hash of channel fields var $textinput = array(); var $image = array(); var $feed_type; var $feed_version; // parser variables var $stack = array(); // parser stack var $inchannel = false; var $initem = false; var $incontent = false; // if in Atom field var $intextinput = false; var $inimage = false; var $current_field = ''; var $current_namespace = false; //var $ERROR = ""; var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); function MagpieRSS ($source) { # if PHP xml isn't compiled in, die # if ( !function_exists('xml_parser_create') ) trigger_error( "Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php" ); $parser = @xml_parser_create(); if ( !is_resource($parser) ) trigger_error( "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php"); $this->parser = $parser; # pass in parser, and a reference to this object # setup handlers # xml_set_object( $this->parser, $this ); xml_set_element_handler($this->parser, 'feed_start_element', 'feed_end_element' ); xml_set_character_data_handler( $this->parser, 'feed_cdata' ); $status = xml_parse( $this->parser, $source ); if (! $status ) { $errorcode = xml_get_error_code( $this->parser ); if ( $errorcode != XML_ERROR_NONE ) { $xml_error = xml_error_string( $errorcode ); $error_line = xml_get_current_line_number($this->parser); $error_col = xml_get_current_column_number($this->parser); $errormsg = "$xml_error at line $error_line, column $error_col"; $this->error( $errormsg ); } } xml_parser_free( $this->parser ); $this->normalize(); } function feed_start_element($p, $element, &$attrs) { $el = $element = strtolower($element); $attrs = array_change_key_case($attrs, CASE_LOWER); // check for a namespace, and split if found $ns = false; if ( strpos( $element, ':' ) ) { list($ns, $el) = split( ':', $element, 2); } if ( $ns and $ns != 'rdf' ) { $this->current_namespace = $ns; } # if feed type isn't set, then this is first element of feed # identify feed from root element # if (!isset($this->feed_type) ) { if ( $el == 'rdf' ) { $this->feed_type = RSS; $this->feed_version = '1.0'; } elseif ( $el == 'rss' ) { $this->feed_type = RSS; $this->feed_version = $attrs['version']; } elseif ( $el == 'feed' ) { $this->feed_type = ATOM; $this->feed_version = $attrs['version']; $this->inchannel = true; } return; } if ( $el == 'channel' ) { $this->inchannel = true; } elseif ($el == 'item' or $el == 'entry' ) { $this->initem = true; if ( isset($attrs['rdf:about']) ) { $this->current_item['about'] = $attrs['rdf:about']; } } // if we're in the default namespace of an RSS feed, // record textinput or image fields elseif ( $this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) { $this->intextinput = true; } elseif ( $this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) { $this->inimage = true; } # handle atom content constructs elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) { // avoid clashing w/ RSS mod_content if ($el == 'content' ) { $el = 'atom_content'; } $this->incontent = $el; } // if inside an Atom content construct (e.g. content or summary) field treat tags as text elseif ($this->feed_type == ATOM and $this->incontent ) { // if tags are inlined, then flatten $attrs_str = join(' ', array_map('map_attrs', array_keys($attrs), array_values($attrs) ) ); $this->append_content( "<$element $attrs_str>" ); array_unshift( $this->stack, $el ); } // Atom support many links per containging element. // Magpie treats link elements of type rel='alternate' // as being equivalent to RSS's simple link element. // elseif ($this->feed_type == ATOM and $el == 'link' ) { if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) { $link_el = 'link'; } else { $link_el = 'link_' . $attrs['rel']; } $this->append($link_el, $attrs['href']); } // set stack[0] to current element else { array_unshift($this->stack, $el); } } function feed_cdata ($p, $text) { if ($this->feed_type == ATOM and $this->incontent) { $this->append_content( $text ); } else { $current_el = join('_', array_reverse($this->stack)); $this->append($current_el, $text); } } function feed_end_element ($p, $el) { $el = strtolower($el); if ( $el == 'item' or $el == 'entry' ) { $this->items[] = $this->current_item; $this->current_item = array(); $this->initem = false; } elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) { $this->intextinput = false; } elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) { $this->inimage = false; } elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) { $this->incontent = false; } elseif ($el == 'channel' or $el == 'feed' ) { $this->inchannel = false; } elseif ($this->feed_type == ATOM and $this->incontent ) { // balance tags properly // note: i don't think this is actually neccessary if ( $this->stack[0] == $el ) { $this->append_content(""); } else { $this->append_content("<$el />"); } array_shift( $this->stack ); } else { array_shift( $this->stack ); } $this->current_namespace = false; } function concat (&$str1, $str2="") { if (!isset($str1) ) { $str1=""; } $str1 .= $str2; } function append_content($text) { if ( $this->initem ) { $this->concat( $this->current_item[ $this->incontent ], $text ); } elseif ( $this->inchannel ) { $this->concat( $this->channel[ $this->incontent ], $text ); } } // smart append - field and namespace aware function append($el, $text) { if (!$el) { return; } if ( $this->current_namespace ) { if ( $this->initem ) { $this->concat( $this->current_item[ $this->current_namespace ][ $el ], $text); } elseif ($this->inchannel) { $this->concat( $this->channel[ $this->current_namespace][ $el ], $text ); } elseif ($this->intextinput) { $this->concat( $this->textinput[ $this->current_namespace][ $el ], $text ); } elseif ($this->inimage) { $this->concat( $this->image[ $this->current_namespace ][ $el ], $text ); } } else { if ( $this->initem ) { $this->concat( $this->current_item[ $el ], $text); } elseif ($this->intextinput) { $this->concat( $this->textinput[ $el ], $text ); } elseif ($this->inimage) { $this->concat( $this->image[ $el ], $text ); } elseif ($this->inchannel) { $this->concat( $this->channel[ $el ], $text ); } } } function normalize () { // if atom populate rss fields if ( $this->is_atom() ) { $this->channel['descripton'] = $this->channel['tagline']; for ( $i = 0; $i < count($this->items); $i++) { $item = $this->items[$i]; if ( isset($item['summary']) ) $item['description'] = $item['summary']; if ( isset($item['atom_content'])) $item['content']['encoded'] = $item['atom_content']; $this->items[$i] = $item; } } elseif ( $this->is_rss() ) { $this->channel['tagline'] = $this->channel['description']; for ( $i = 0; $i < count($this->items); $i++) { $item = $this->items[$i]; if ( isset($item['description'])) $item['summary'] = $item['description']; if ( isset($item['content']['encoded'] ) ) $item['atom_content'] = $item['content']['encoded']; $this->items[$i] = $item; } } } function is_rss () { if ( $this->feed_type == RSS ) { return $this->feed_version; } else { return false; } } function is_atom() { if ( $this->feed_type == ATOM ) { return $this->feed_version; } else { return false; } } function map_attrs($k, $v) { return "$k=\"$v\""; } function error( $errormsg, $lvl = E_USER_WARNING ) { // append PHP's error message if track_errors enabled if ( isset($php_errormsg) ) { $errormsg .= " ($php_errormsg)"; } if ( MAGPIE_DEBUG ) { trigger_error( $errormsg, $lvl); } else { error_log( $errormsg, 0); } } } require_once( dirname(__FILE__) . '/class-snoopy.php'); function fetch_rss ($url) { // initialize constants init(); if ( !isset($url) ) { // error("fetch_rss called without a url"); return false; } // if cache is disabled if ( !MAGPIE_CACHE_ON ) { // fetch file, and parse it $resp = _fetch_remote_file( $url ); if ( is_success( $resp->status ) ) { return _response_to_rss( $resp ); } else { // error("Failed to fetch $url and cache is off"); return false; } } // else cache is ON else { // Flow // 1. check cache // 2. if there is a hit, make sure its fresh // 3. if cached obj fails freshness check, fetch remote // 4. if remote fails, return stale object, or error $cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE ); if (MAGPIE_DEBUG and $cache->ERROR) { debug($cache->ERROR, E_USER_WARNING); } $cache_status = 0; // response of check_cache $request_headers = array(); // HTTP headers to send with fetch $rss = 0; // parsed RSS object $errormsg = 0; // errors, if any if (!$cache->ERROR) { // return cache HIT, MISS, or STALE $cache_status = $cache->check_cache( $url ); } // if object cached, and cache is fresh, return cached obj if ( $cache_status == 'HIT' ) { $rss = $cache->get( $url ); if ( isset($rss) and $rss ) { $rss->from_cache = 1; if ( MAGPIE_DEBUG > 1) { debug("MagpieRSS: Cache HIT", E_USER_NOTICE); } return $rss; } } // else attempt a conditional get // setup headers if ( $cache_status == 'STALE' ) { $rss = $cache->get( $url ); if ( $rss->etag and $rss->last_modified ) { $request_headers['If-None-Match'] = $rss->etag; $request_headers['If-Last-Modified'] = $rss->last_modified; } } $resp = _fetch_remote_file( $url, $request_headers ); if (isset($resp) and $resp) { if ($resp->status == '304' ) { // we have the most current copy if ( MAGPIE_DEBUG > 1) { debug("Got 304 for $url"); } // reset cache on 304 (at minutillo insistent prodding) $cache->set($url, $rss); return $rss; } elseif ( is_success( $resp->status ) ) { $rss = _response_to_rss( $resp ); if ( $rss ) { if (MAGPIE_DEBUG > 1) { debug("Fetch successful"); } // add object to cache $cache->set( $url, $rss ); return $rss; } } else { $errormsg = "Failed to fetch $url. "; if ( $resp->error ) { # compensate for Snoopy's annoying habbit to tacking # on '\n' $http_error = substr($resp->error, 0, -2); $errormsg .= "(HTTP Error: $http_error)"; } else { $errormsg .= "(HTTP Response: " . $resp->response_code .')'; } } } else { $errormsg = "Unable to retrieve RSS file for unknown reasons."; } // else fetch failed // attempt to return cached object if ($rss) { if ( MAGPIE_DEBUG ) { debug("Returning STALE object for $url"); } return $rss; } // else we totally failed // error( $errormsg ); return false; } // end if ( !MAGPIE_CACHE_ON ) { } // end fetch_rss() function _fetch_remote_file ($url, $headers = "" ) { // Snoopy is an HTTP client in PHP $client = new Snoopy(); $client->agent = MAGPIE_USER_AGENT; $client->read_timeout = MAGPIE_FETCH_TIME_OUT; $client->use_gzip = MAGPIE_USE_GZIP; if (is_array($headers) ) { $client->rawheaders = $headers; } @$client->fetch($url); return $client; } function _response_to_rss ($resp) { $rss = new MagpieRSS( $resp->results ); // if RSS parsed successfully if ( $rss and !$rss->ERROR) { // find Etag, and Last-Modified foreach($resp->headers as $h) { // 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1" if (strpos($h, ": ")) { list($field, $val) = explode(": ", $h, 2); } else { $field = $h; $val = ""; } if ( $field == 'ETag' ) { $rss->etag = $val; } if ( $field == 'Last-Modified' ) { $rss->last_modified = $val; } } return $rss; } // else construct error message else { $errormsg = "Failed to parse RSS file."; if ($rss) { $errormsg .= " (" . $rss->ERROR . ")"; } // error($errormsg); return false; } // end if ($rss and !$rss->error) } /*=======================================================================*\ Function: init Purpose: setup constants with default values check for user overrides \*=======================================================================*/ function init () { if ( defined('MAGPIE_INITALIZED') ) { return; } else { define('MAGPIE_INITALIZED', 1); } if ( !defined('MAGPIE_CACHE_ON') ) { define('MAGPIE_CACHE_ON', 1); } if ( !defined('MAGPIE_CACHE_DIR') ) { define('MAGPIE_CACHE_DIR', './cache'); } if ( !defined('MAGPIE_CACHE_AGE') ) { define('MAGPIE_CACHE_AGE', 60*60); // one hour } if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) { define('MAGPIE_CACHE_FRESH_ONLY', 0); } if ( !defined('MAGPIE_DEBUG') ) { define('MAGPIE_DEBUG', 0); } if ( !defined('MAGPIE_USER_AGENT') ) { $ua = 'WordPress/' . $GLOBALS['wp_version']; if ( MAGPIE_CACHE_ON ) { $ua = $ua . ')'; } else { $ua = $ua . '; No cache)'; } define('MAGPIE_USER_AGENT', $ua); } if ( !defined('MAGPIE_FETCH_TIME_OUT') ) { define('MAGPIE_FETCH_TIME_OUT', 2); // 2 second timeout } // use gzip encoding to fetch rss files if supported? if ( !defined('MAGPIE_USE_GZIP') ) { define('MAGPIE_USE_GZIP', true); } } function is_info ($sc) { return $sc >= 100 && $sc < 200; } function is_success ($sc) { return $sc >= 200 && $sc < 300; } function is_redirect ($sc) { return $sc >= 300 && $sc < 400; } function is_error ($sc) { return $sc >= 400 && $sc < 600; } function is_client_error ($sc) { return $sc >= 400 && $sc < 500; } function is_server_error ($sc) { return $sc >= 500 && $sc < 600; } class RSSCache { var $BASE_CACHE = 'wp-content/cache'; // where the cache files are stored var $MAX_AGE = 43200; // when are files stale, default twelve hours var $ERROR = ''; // accumulate error messages function RSSCache ($base='', $age='') { if ( $base ) { $this->BASE_CACHE = $base; } if ( $age ) { $this->MAX_AGE = $age; } } /*=======================================================================*\ Function: set Purpose: add an item to the cache, keyed on url Input: url from wich the rss file was fetched Output: true on sucess \*=======================================================================*/ function set ($url, $rss) { global $wpdb; $cache_option = 'rss_' . $this->file_name( $url ); $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; if ( !$wpdb->get_var("SELECT option_name FROM $wpdb->options WHERE option_name = '$cache_option'") ) add_option($cache_option, '', '', 'no'); if ( !$wpdb->get_var("SELECT option_name FROM $wpdb->options WHERE option_name = '$cache_timestamp'") ) add_option($cache_timestamp, '', '', 'no'); update_option($cache_option, $rss); update_option($cache_timestamp, time() ); return $cache_option; } /*=======================================================================*\ Function: get Purpose: fetch an item from the cache Input: url from wich the rss file was fetched Output: cached object on HIT, false on MISS \*=======================================================================*/ function get ($url) { $this->ERROR = ""; $cache_option = 'rss_' . $this->file_name( $url ); if ( ! get_option( $cache_option ) ) { $this->debug( "Cache doesn't contain: $url (cache option: $cache_option)" ); return 0; } $rss = get_option( $cache_option ); return $rss; } /*=======================================================================*\ Function: check_cache Purpose: check a url for membership in the cache and whether the object is older then MAX_AGE (ie. STALE) Input: url from wich the rss file was fetched Output: cached object on HIT, false on MISS \*=======================================================================*/ function check_cache ( $url ) { $this->ERROR = ""; $cache_option = $this->file_name( $url ); $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; if ( $mtime = get_option($cache_timestamp) ) { // find how long ago the file was added to the cache // and whether that is longer then MAX_AGE $age = time() - $mtime; if ( $this->MAX_AGE > $age ) { // object exists and is current return 'HIT'; } else { // object exists but is old return 'STALE'; } } else { // object does not exist return 'MISS'; } } /*=======================================================================*\ Function: serialize \*=======================================================================*/ function serialize ( $rss ) { return serialize( $rss ); } /*=======================================================================*\ Function: unserialize \*=======================================================================*/ function unserialize ( $data ) { return unserialize( $data ); } /*=======================================================================*\ Function: file_name Purpose: map url to location in cache Input: url from wich the rss file was fetched Output: a file name \*=======================================================================*/ function file_name ($url) { return md5( $url ); } /*=======================================================================*\ Function: error Purpose: register error \*=======================================================================*/ function error ($errormsg, $lvl=E_USER_WARNING) { // append PHP's error message if track_errors enabled if ( isset($php_errormsg) ) { $errormsg .= " ($php_errormsg)"; } $this->ERROR = $errormsg; if ( MAGPIE_DEBUG ) { trigger_error( $errormsg, $lvl); } else { error_log( $errormsg, 0); } } function debug ($debugmsg, $lvl=E_USER_NOTICE) { if ( MAGPIE_DEBUG ) { $this->error("MagpieRSS [debug] $debugmsg", $lvl); } } } function parse_w3cdtf ( $date_str ) { # regex to match wc3dtf $pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/"; if ( preg_match( $pat, $date_str, $match ) ) { list( $year, $month, $day, $hours, $minutes, $seconds) = array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[7]); # calc epoch for current date assuming GMT $epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year); $offset = 0; if ( $match[11] == 'Z' ) { # zulu time, aka GMT } else { list( $tz_mod, $tz_hour, $tz_min ) = array( $match[8], $match[9], $match[10]); # zero out the variables if ( ! $tz_hour ) { $tz_hour = 0; } if ( ! $tz_min ) { $tz_min = 0; } $offset_secs = (($tz_hour*60)+$tz_min)*60; # is timezone ahead of GMT? then subtract offset # if ( $tz_mod == '+' ) { $offset_secs = $offset_secs * -1; } $offset = $offset_secs; } $epoch = $epoch + $offset; return $epoch; } else { return -1; } } function wp_rss ($url, $num_items) { //ini_set("display_errors", false); uncomment to suppress php errors thrown if the feed is not returned. $rss = fetch_rss($url); if ( $rss ) { echo ""; } else { echo "an error has occured the feed is probably down, try again later."; } } function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS $rss = fetch_rss($url); if ( $rss ) { $rss->items = array_slice($rss->items, 0, $num_items); foreach ($rss->items as $item ) { echo "
  • \n"; echo ""; echo htmlentities($item['title']); echo "
    \n"; echo "
  • \n"; } } else { return false; } } ?>'wordpress/wp-includes/script-loader.php8default_scripts(); } function default_scripts() { $this->add( 'dbx', '/wp-includes/js/dbx.js', false, '2.05' ); $this->add( 'fat', '/wp-includes/js/fat.js', false, '1.0-RC1_3660' ); $this->add( 'sack', '/wp-includes/js/tw-sack.js', false, '1.6.1' ); $this->add( 'quicktags', '/wp-includes/js/quicktags.js', false, '3958' ); $this->localize( 'quicktags', 'quicktagsL10n', array( 'quickLinks' => __('(Quick Links)'), 'wordLookup' => __('Enter a word to look up:'), 'dictionaryLookup' => attribute_escape(__('Dictionary lookup')), 'lookup' => attribute_escape(__('lookup')), 'closeAllOpenTags' => attribute_escape(__('Close all open tags')), 'closeTags' => attribute_escape(__('close tags')), 'enterURL' => __('Enter the URL'), 'enterImageURL' => __('Enter the URL of the image'), 'enterImageDescription' => __('Enter a description of the image') ) ); $this->add( 'colorpicker', '/wp-includes/js/colorpicker.js', false, '3517' ); $this->add( 'tiny_mce', '/wp-includes/js/tinymce/tiny_mce_gzip.php', false, '20070326' ); $mce_config = apply_filters('tiny_mce_config_url', '/wp-includes/js/tinymce/tiny_mce_config.php'); $this->add( 'wp_tiny_mce', $mce_config, array('tiny_mce'), '20070225' ); $this->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.5.0-0'); $this->add( 'autosave', '/wp-includes/js/autosave.js', array('prototype', 'sack'), '20070306'); $this->localize( 'autosave', 'autosaveL10n', array( 'autosaveInterval' => apply_filters('autosave_interval', '120'), 'errorText' => __('Error: %response%'), 'saveText' => __('Saved at %time%.'), 'requestFile' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php', 'savingText' => __('Saving Draft...') ) ); $this->add( 'wp-ajax', '/wp-includes/js/wp-ajax.js', array('prototype'), '20070306'); $this->localize( 'wp-ajax', 'WPAjaxL10n', array( 'defaultUrl' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php', 'permText' => __("You don't have permission to do that."), 'strangeText' => __("Something strange happened. Try refreshing the page."), 'whoaText' => __("Slow down, I'm still sending your data!") ) ); $this->add( 'listman', '/wp-includes/js/list-manipulation.js', array('wp-ajax', 'fat'), '20070306' ); $this->localize( 'listman', 'listManL10n', array( 'jumpText' => __('Jump to new item'), 'delText' => __('Are you sure you want to delete this %thing%?') ) ); $this->add( 'scriptaculous-root', '/wp-includes/js/scriptaculous/wp-scriptaculous.js', array('prototype'), '1.7.0'); $this->add( 'scriptaculous-builder', '/wp-includes/js/scriptaculous/builder.js', array('scriptaculous-root'), '1.7.0'); $this->add( 'scriptaculous-dragdrop', '/wp-includes/js/scriptaculous/dragdrop.js', array('scriptaculous-builder', 'scriptaculous-effects'), '1.7.0'); $this->add( 'scriptaculous-effects', '/wp-includes/js/scriptaculous/effects.js', array('scriptaculous-root'), '1.7.0'); $this->add( 'scriptaculous-slider', '/wp-includes/js/scriptaculous/slider.js', array('scriptaculous-effects'), '1.7.0'); $this->add( 'scriptaculous-controls', '/wp-includes/js/scriptaculous/controls.js', array('scriptaculous-root'), '1.7.0'); $this->add( 'scriptaculous', '', array('scriptaculous-dragdrop', 'scriptaculous-slider', 'scriptaculous-controls'), '1.7.0'); $this->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop'), '20070118'); $this->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.1.2'); $this->add( 'interface', '/wp-includes/js/jquery/interface.js', array('jquery'), '1.2'); if ( is_admin() ) { global $pagenow; $man = false; switch ( $pagenow ) : case 'post.php' : case 'post-new.php' : $man = 'postmeta'; break; case 'page.php' : case 'page-new.php' : $man = 'pagemeta'; break; case 'link-add.php' : case 'link.php' : $man = 'linkmeta'; break; endswitch; if ( $man ) { $this->add( 'dbx-admin-key', '/wp-admin/dbx-admin-key.js', array('dbx'), '20070417' ); $this->localize( 'dbx-admin-key', 'dbxL10n', array( 'manager' => $man, 'open' => __('open'), 'close' => __('close'), 'moveMouse' => __('click-down and drag to move this box'), 'toggleMouse' => __('click to %toggle% this box'), 'moveKey' => __('use the arrow keys to move this box'), 'toggleKey' => __(', or press the enter key to %toggle% it'), ) ); } $this->add( 'ajaxcat', '/wp-admin/cat.js', array('listman'), '20070417' ); $this->localize( 'ajaxcat', 'catL10n', array( 'add' => attribute_escape(__('Add')), 'how' => __('Separate multiple categories with commas.') ) ); $this->add( 'admin-categories', '/wp-admin/categories.js', array('listman'), '3684' ); $this->add( 'admin-custom-fields', '/wp-admin/custom-fields.js', array('listman'), '3733' ); $this->add( 'admin-comments', '/wp-admin/edit-comments.js', array('listman'), '20070327' ); $this->add( 'admin-users', '/wp-admin/users.js', array('listman'), '4583' ); $this->add( 'xfn', '/wp-admin/xfn.js', false, '3517' ); $this->add( 'upload', '/wp-admin/upload.js', array('prototype'), '20070306' ); $this->localize( 'upload', 'uploadL10n', array( 'browseTitle' => attribute_escape(__('Browse your files')), 'back' => __('« Back'), 'directTitle' => attribute_escape(__('Direct link to file')), 'edit' => __('Edit'), 'thumb' => __('Thumbnail'), 'full' => __('Full size'), 'icon' => __('Icon'), 'title' => __('Title'), 'show' => __('Show:'), 'link' => __('Link to:'), 'file' => __('File'), 'page' => __('Page'), 'none' => __('None'), 'editorText' => attribute_escape(__('Send to editor »')), 'insert' => __('Insert'), 'urlText' => __('URL'), 'desc' => __('Description'), 'deleteText' => attribute_escape(__('Delete File')), 'saveText' => attribute_escape(__('Save »')), 'confirmText' => __("Are you sure you want to delete the file '%title%'?\nClick ok to delete or cancel to go back.") ) ); } } /** * Prints script tags * * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies. * * @param mixed handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts. * @return array Scripts that have been printed */ function print_scripts( $handles = false ) { // Print the queue if nothing is passed. If a string is passed, print that script. If an array is passed, print those scripts. $handles = false == $handles ? $this->queue : (array) $handles; $handles = $this->all_deps( $handles ); $this->_print_scripts( $handles ); return $this->printed; } /** * Internally used helper function for printing script tags * * @param array handles Hierarchical array of scripts to be printed * @see WP_Scripts::all_deps() */ function _print_scripts( $handles ) { global $wp_db_version; foreach( array_keys($handles) as $handle ) { if ( !$handles[$handle] ) return; elseif ( is_array($handles[$handle]) ) $this->_print_scripts( $handles[$handle] ); if ( !in_array($handle, $this->printed) && isset($this->scripts[$handle]) ) { if ( $this->scripts[$handle]->src ) { // Else it defines a group. $ver = $this->scripts[$handle]->ver ? $this->scripts[$handle]->ver : $wp_db_version; if ( isset($this->args[$handle]) ) $ver .= '&' . $this->args[$handle]; $src = 0 == strpos($this->scripts[$handle]->src, 'http://') ? $this->scripts[$handle]->src : get_option( 'siteurl' ) . $this->scripts[$handle]->src; $src = $this->scripts[$handle]->src; if (!preg_match('|^https?://|', $src)) { $src = get_option('siteurl') . $src; } $src = add_query_arg('ver', $ver, $src); $src = clean_url(apply_filters( 'script_loader_src', $src )); echo "\n"; $this->print_scripts_l10n( $handle ); } $this->printed[] = $handle; } } } function print_scripts_l10n( $handle ) { if ( empty($this->scripts[$handle]->l10n_object) || empty($this->scripts[$handle]->l10n) || !is_array($this->scripts[$handle]->l10n) ) return; $object_name = $this->scripts[$handle]->l10n_object; echo "\n"; } /** * Determines dependencies of scripts * * Recursively builds hierarchical array of script dependencies. Does NOT catch infinite loops. * * @param mixed handles Accepts (string) script name or (array of strings) script names * @param bool recursion Used internally when function calls itself * @return array Hierarchical array of dependencies */ function all_deps( $handles, $recursion = false ) { if ( ! $handles = (array) $handles ) return array(); $return = array(); foreach ( $handles as $handle ) { $handle = explode('?', $handle); if ( isset($handle[1]) ) $this->args[$handle[0]] = $handle[1]; $handle = $handle[0]; if ( is_null($return[$handle]) ) // Prime the return array with $handles $return[$handle] = true; if ( $this->scripts[$handle]->deps ) { if ( false != $return[$handle] && array_diff($this->scripts[$handle]->deps, array_keys($this->scripts)) ) $return[$handle] = false; // Script required deps which don't exist else $return[$handle] = $this->all_deps( $this->scripts[$handle]->deps, true ); // Build the hierarchy } if ( $recursion && false == $return[$handle] ) return false; // Cut the branch } return $return; } /** * Adds script * * Adds the script only if no script of that name already exists * * @param string handle Script name * @param string src Script url * @param array deps (optional) Array of script names on which this script depends * @param string ver (optional) Script version (used for cache busting) * @return array Hierarchical array of dependencies */ function add( $handle, $src, $deps = array(), $ver = false ) { if ( isset($this->scripts[$handle]) ) return false; $this->scripts[$handle] = new _WP_Script( $handle, $src, $deps, $ver ); return true; } /** * Localizes a script * * Localizes only if script has already been added * * @param string handle Script name * @param string object_name Name of JS object to hold l10n info * @param array l10n Array of JS var name => localized string * @return bool Successful localization */ function localize( $handle, $object_name, $l10n ) { if ( !isset($this->scripts[$handle]) ) return false; return $this->scripts[$handle]->localize( $object_name, $l10n ); } function remove( $handles ) { foreach ( (array) $handles as $handle ) unset($this->scripts[$handle]); } function enqueue( $handles ) { foreach ( (array) $handles as $handle ) { $handle = explode('?', $handle); if ( !in_array($handle[0], $this->queue) && isset($this->scripts[$handle[0]]) ) { $this->queue[] = $handle[0]; if ( isset($handle[1]) ) $this->args[$handle[0]] = $handle[1]; } } } function dequeue( $handles ) { foreach ( (array) $handles as $handle ) unset( $this->queue[$handle] ); } function query( $handle, $list = 'scripts' ) { // scripts, queue, or printed switch ( $list ) : case 'scripts': if ( isset($this->scripts[$handle]) ) return $this->scripts[$handle]; break; default: if ( in_array($handle, $this->$list) ) return true; break; endswitch; return false; } } class _WP_Script { var $handle; var $src; var $deps = array(); var $ver = false; var $l10n_object = ''; var $l10n = array(); function _WP_Script() { @list($this->handle, $this->src, $this->deps, $this->ver) = func_get_args(); if ( !is_array($this->deps) ) $this->deps = array(); if ( !$this->ver ) $this->ver = false; } function localize( $object_name, $l10n ) { if ( !$object_name || !is_array($l10n) ) return false; $this->l10n_object = $object_name; $this->l10n = $l10n; return true; } } /** * Prints script tags in document head * * Called by admin-header.php and by wp_head hook. Since it is called by wp_head on every page load, * the function does not instantiate the WP_Scripts object unless script names are explicitly passed. * Does make use of already instantiated $wp_scripts if present. * Use provided wp_print_scripts hook to register/enqueue new scripts. * * @see WP_Scripts::print_scripts() */ function wp_print_scripts( $handles = false ) { do_action( 'wp_print_scripts' ); if ( '' == $handles ) // for wp_head $handles = false; global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) { if ( !$handles ) return array(); // No need to instantiate if nothing's there. else $wp_scripts = new WP_Scripts(); } return $wp_scripts->print_scripts( $handles ); } function wp_register_script( $handle, $src, $deps = array(), $ver = false ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); $wp_scripts->add( $handle, $src, $deps, $ver ); } /** * Localizes a script * * Localizes only if script has already been added * * @see WP_Script::localize() */ function wp_localize_script( $handle, $object_name, $l10n ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) return false; return $wp_scripts->localize( $handle, $object_name, $l10n ); } function wp_deregister_script( $handle ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); $wp_scripts->remove( $handle ); } /** * Equeues script * * Registers the script if src provided (does NOT overwrite) and enqueues. * * @see WP_Script::add(), WP_Script::enqueue() */ function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); if ( $src ) { $_handle = explode('?', $handle); $wp_scripts->add( $_handle[0], $src, $deps, $ver ); } $wp_scripts->enqueue( $handle ); } ?> !wordpress/wp-includes/streams.php. This file is part of PHP-gettext. PHP-gettext 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. PHP-gettext 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 PHP-gettext; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // Simple class to wrap file streams, string streams, etc. // seek is essential, and it should be byte stream class StreamReader { // should return a string [FIXME: perhaps return array of bytes?] function read($bytes) { return false; } // should return new position function seekto($position) { return false; } // returns current position function currentpos() { return false; } // returns length of entire stream (limit for seekto()s) function length() { return false; } } class StringReader { var $_pos; var $_str; function StringReader($str='') { $this->_str = $str; $this->_pos = 0; } function read($bytes) { $data = substr($this->_str, $this->_pos, $bytes); $this->_pos += $bytes; if (strlen($this->_str)<$this->_pos) $this->_pos = strlen($this->_str); return $data; } function seekto($pos) { $this->_pos = $pos; if (strlen($this->_str)<$this->_pos) $this->_pos = strlen($this->_str); return $this->_pos; } function currentpos() { return $this->_pos; } function length() { return strlen($this->_str); } } class FileReader { var $_pos; var $_fd; var $_length; function FileReader($filename) { if (file_exists($filename)) { $this->_length=filesize($filename); $this->_pos = 0; $this->_fd = fopen($filename,'rb'); if (!$this->_fd) { $this->error = 3; // Cannot read file, probably permissions return false; } } else { $this->error = 2; // File doesn't exist return false; } } function read($bytes) { if ($bytes) { fseek($this->_fd, $this->_pos); // PHP 5.1.1 does not read more than 8192 bytes in one fread() // the discussions at PHP Bugs suggest it's the intended behaviour while ($bytes > 0) { $chunk = fread($this->_fd, $bytes); $data .= $chunk; $bytes -= strlen($chunk); } $this->_pos = ftell($this->_fd); return $data; } else return ''; } function seekto($pos) { fseek($this->_fd, $pos); $this->_pos = ftell($this->_fd); return $this->_pos; } function currentpos() { return $this->_pos; } function length() { return $this->_length; } function close() { fclose($this->_fd); } } // Preloads entire file in memory first, then creates a StringReader // over it (it assumes knowledge of StringReader internals) class CachedFileReader extends StringReader { function CachedFileReader($filename) { if (file_exists($filename)) { $length=filesize($filename); $fd = fopen($filename,'rb'); if (!$fd) { $this->error = 3; // Cannot read file, probably permissions return false; } $this->_str = fread($fd, $length); fclose($fd); } else { $this->error = 2; // File doesn't exist return false; } } } ?>"wordpress/wp-includes/.svn/entries8 dir 119 svn://localhost/build_system/EC2/virtuoso_vad_wordpress/wordpress/wp-includes svn://localhost 2008-10-28T18:17:06.112729Z 97 paul svn:special svn:externals svn:needs-lock d816db28-ff41-e64b-9e55-feb7305f8dc4 feed-rss2.php file 2008-11-20T16:30:36.000000Z ebe8d1108c2c902e84fc66cc1e6da9e6 2008-10-28T18:17:06.112729Z 97 paul default-filters.php file 2008-11-20T16:30:36.000000Z dbd4caaacca0e07a7bedd2f6ec7634e1 2008-10-28T18:17:06.112729Z 97 paul class-snoopy.php file 2008-11-20T16:30:36.000000Z 0df66d6c8c8fa672951666e461406c77 2008-10-28T18:17:06.112729Z 97 paul plugin.php file 2008-11-20T16:30:36.000000Z 9cebbf8d1271b679dcb604be7ab782dc 2008-10-28T18:17:06.112729Z 97 paul post-template.php file 2008-11-20T16:30:36.000000Z d15c2533dcfba46c3cede77db5c520b9 2008-10-28T18:17:06.112729Z 97 paul locale.php file 2008-11-20T16:30:36.000000Z a8be79daa879e9085eda8013a99d82df 2008-10-28T18:17:06.112729Z 97 paul feed-atom.php file 2008-11-20T16:30:36.000000Z 36910aa1a9b037ae06946602b463467c 2008-10-28T18:17:06.112729Z 97 paul cache.php file 2008-11-20T16:30:36.000000Z bd2ef18a0b1f5aa187f6df46c2655c93 2008-10-28T18:17:06.112729Z 97 paul bookmark.php file 2008-11-20T16:30:36.000000Z bf202081db81f34a66184f84a9930ab9 2008-10-28T18:17:06.112729Z 97 paul query.php file 2008-11-20T16:30:36.000000Z d18b2e6c3aeef04b6a17a60c94e05d3f 2008-10-28T18:17:06.112729Z 97 paul link-template.php file 2008-11-20T16:30:36.000000Z 19f0a648219d7654aca52a579ee0463d 2008-10-28T18:17:06.112729Z 97 paul wp-db.php file 2008-11-20T16:30:36.000000Z 78b6a4c39d0ff7d212f1d50ca299adb9 2008-10-28T18:17:06.112729Z 97 paul formatting.php file 2008-11-20T16:30:36.000000Z cb5dfa5c40f7207ed5908d87110822f2 2008-10-28T18:17:06.112729Z 97 paul author-template.php file 2008-11-20T16:30:36.000000Z 0480bd62c97d9716ef1854d04feb678d 2008-10-28T18:17:06.112729Z 97 paul wp-db-mysql.php file 2008-11-20T16:30:36.000000Z 44743faa80fdb98121c65ff82771ddc1 2008-10-28T18:17:06.112729Z 97 paul feed-rss2-comments.php file 2008-11-20T16:30:36.000000Z cbc1f30491154d1344a3f96d7ae8eb96 2008-10-28T18:17:06.112729Z 97 paul category.php file 2008-11-20T16:30:36.000000Z 303cfc30538ee6240e00ffd00a0f83dd 2008-10-28T18:17:06.112729Z 97 paul template-loader.php file 2008-11-20T16:30:36.000000Z f628445b639e166014a6d6cbac35b7a1 2008-10-28T18:17:06.112729Z 97 paul images dir rewrite.php file 2008-11-20T16:30:36.000000Z aa95c89c821db6062fe88a82b90c8ee7 2008-10-28T18:17:06.112729Z 97 paul compat.php file 2008-11-20T16:30:36.000000Z c372b954cbc93f942e78d9448c11bb1c 2008-10-28T18:17:06.112729Z 97 paul gettext.php file 2008-11-20T16:30:36.000000Z d77a7f4ff4347208ee2dc74a3f92eeda 2008-10-28T18:17:06.112729Z 97 paul class-phpmailer.php file 2008-11-20T16:30:36.000000Z 3c0979d641e95a472583380f1a49bdb9 2008-10-28T18:17:06.112729Z 97 paul class-pop3.php file 2008-11-20T16:30:36.000000Z 30dbf22f57bcd963be0045a43333c357 2008-10-28T18:17:06.112729Z 97 paul post.php file 2008-11-20T16:30:36.000000Z 478d3dfed0ef3ddd5028f6d17595793f 2008-10-28T18:17:06.112729Z 97 paul version.php file 2008-11-20T16:30:36.000000Z 7b016476357865244975d503e8c71804 2008-10-28T18:17:06.112729Z 97 paul general-template.php file 2008-11-20T16:30:36.000000Z 883f23c0fdf60c6b19bc6bb1dbc1aa80 2008-10-28T18:17:06.112729Z 97 paul js dir capabilities.php file 2008-11-20T16:30:36.000000Z 2b82805510c854dbb2ba2508f6791e65 2008-10-28T18:17:06.112729Z 97 paul classes.php file 2008-11-20T16:30:36.000000Z ed790683b25b6e7deb3e4094982d53f7 2008-10-28T18:17:06.112729Z 97 paul deprecated.php file 2008-11-20T16:30:36.000000Z 82ba83d5e315628603d6c2130a91065c 2008-10-28T18:17:06.112729Z 97 paul cron.php file 2008-11-20T16:30:36.000000Z c9d37e0b1bb5d362999d81520ef2b144 2008-10-28T18:17:06.112729Z 97 paul comment.php file 2008-11-20T16:30:36.000000Z 6ad4f69590965f2c6c92eef485988672 2008-10-28T18:17:06.112729Z 97 paul pluggable.php file 2008-11-20T16:30:36.000000Z 35a4bb31bdcf35137925350c5fc6c7e3 2008-10-28T18:17:06.112729Z 97 paul theme.php file 2008-11-20T16:30:36.000000Z ee22d737a983ef7228853a3874ad59ca 2008-10-28T18:17:06.112729Z 97 paul feed.php file 2008-11-20T16:30:36.000000Z d5b67f9e9cc3a516bbb3e5a77c9c2dea 2008-10-28T18:17:06.112729Z 97 paul class-IXR.php file 2008-11-20T16:30:36.000000Z 59ccb64f55796cce464de3aacabd1ad8 2008-10-28T18:17:06.112729Z 97 paul kses.php file 2008-11-20T16:30:36.000000Z a9d7eec0db490a4f4cdc7ef2d6832a8a 2008-10-28T18:17:06.112729Z 97 paul widgets.php file 2008-11-20T16:30:36.000000Z ce2317449e4daa035ab2b3bed53bf11a 2008-10-28T18:17:06.112729Z 97 paul rss.php file 2008-11-20T16:30:36.000000Z 9333636ddeb35be0ab6a6a3699833fd2 2008-10-28T18:17:06.112729Z 97 paul functions.php file 2008-11-20T16:30:36.000000Z baa03cb60ed864b339fbc63ff3ba4075 2008-10-28T18:17:06.112729Z 97 paul feed-rss.php file 2008-11-20T16:30:36.000000Z d4419855f0c0882e1931aedafe4988aa 2008-10-28T18:17:06.112729Z 97 paul script-loader.php file 2008-11-20T16:30:36.000000Z baf90582842beb03f099ddef888a2689 2008-10-28T18:17:06.112729Z 97 paul wp-db.php_ file 2008-11-20T16:30:36.000000Z 8731b9f96df181303c651f1802ba8660 2008-10-28T18:17:06.112729Z 97 paul l10n.php file 2008-11-20T16:30:36.000000Z 2ff588fb526f3b350d3264499a122a7d 2008-10-28T18:17:06.112729Z 97 paul registration.php file 2008-11-20T16:30:36.000000Z 6c01518ae4ceb5486dfdaca2cadc1e9f 2008-10-28T18:17:06.112729Z 97 paul comment-template.php file 2008-11-20T16:30:36.000000Z 57483c4834ba0b5e82053ba584a7893f 2008-10-28T18:17:06.112729Z 97 paul vars.php file 2008-11-20T16:30:36.000000Z e2a34164e802d10a9cda8083622e0e05 2008-10-28T18:17:06.112729Z 97 paul feed-rdf.php file 2008-11-20T16:30:36.000000Z 1e32f1f7c97d439ba349601b487d397b 2008-10-28T18:17:06.112729Z 97 paul rss-functions.php file 2008-11-20T16:30:36.000000Z 8507442d81a632e33058058e66a6e89a 2008-10-28T18:17:06.112729Z 97 paul bookmark-template.php file 2008-11-20T16:30:36.000000Z 4bd79fdeed7514e017fe3940d9d5a926 2008-10-28T18:17:06.112729Z 97 paul streams.php file 2008-11-20T16:30:36.000000Z 0d3549a50a886f8f143047c1f0db8848 2008-10-28T18:17:06.112729Z 97 paul user.php file 2008-11-20T16:30:36.000000Z 36616f6c088f47e4eee0a23c682738d5 2008-10-28T18:17:06.112729Z 97 paul wp-db-odbc.php file 2008-11-20T16:30:36.000000Z 92417d7a3c24b6f26673f49285695c93 2008-10-28T18:17:06.112729Z 97 paul registration-functions.php file 2008-11-20T16:30:36.000000Z d99235e81a82adb2f73d4949758abb70 2008-10-28T18:17:06.112729Z 97 paul feed-atom-comments.php file 2008-11-20T16:30:36.000000Z 4e4eb72d7deadeb27a90e8081d9a2856 2008-10-28T18:17:06.112729Z 97 paul category-template.php file 2008-11-20T16:30:36.000000Z 5a99b49b988f78eeef69ec16b741944c 2008-10-28T18:17:06.112729Z 97 paul class-smtp.php file 2008-11-20T16:30:36.000000Z 4b458a4f4ac2e812b2a42ee039fd5876 2008-10-28T18:17:06.112729Z 97 paul !wordpress/wp-includes/.svn/format8 Awordpress/wp-includes/.svn/text-base/author-template.php.svn-basedisplay_name); } // Using echo = false is deprecated. Use get_the_author instead. function the_author($deprecated = '', $deprecated_echo = true) { if ( $deprecated_echo ) echo get_the_author(); return get_the_author(); } function get_the_author_description() { global $authordata; return $authordata->description; } function the_author_description() { echo get_the_author_description(); } function get_the_author_login() { global $authordata; return $authordata->user_login; } function the_author_login() { echo get_the_author_login(); } function get_the_author_firstname() { global $authordata; return $authordata->first_name; } function the_author_firstname() { echo get_the_author_firstname(); } function get_the_author_lastname() { global $authordata; return $authordata->last_name; } function the_author_lastname() { echo get_the_author_lastname(); } function get_the_author_nickname() { global $authordata; return $authordata->nickname; } function the_author_nickname() { echo get_the_author_nickname(); } function get_the_author_ID() { global $authordata; return $authordata->ID; } function the_author_ID() { echo get_the_author_id(); } function get_the_author_email() { global $authordata; return $authordata->user_email; } function the_author_email() { echo apply_filters('the_author_email', get_the_author_email() ); } function get_the_author_url() { global $authordata; return $authordata->user_url; } function the_author_url() { echo get_the_author_url(); } function the_author_link() { if (get_the_author_url()) { echo '' . get_the_author() . ''; } else { the_author(); } } function get_the_author_icq() { global $authordata; return $authordata->icq; } function the_author_icq() { echo get_the_author_icq(); } function get_the_author_aim() { global $authordata; return str_replace(' ', '+', $authordata->aim); } function the_author_aim() { echo get_the_author_aim(); } function get_the_author_yim() { global $authordata; return $authordata->yim; } function the_author_yim() { echo get_the_author_yim(); } function get_the_author_msn() { global $authordata; return $authordata->msn; } function the_author_msn() { echo get_the_author_msn(); } function get_the_author_posts() { global $post; $posts = get_usernumposts($post->post_author); return $posts; } function the_author_posts() { echo get_the_author_posts(); } /* the_author_posts_link() requires no get_, use get_author_posts_url() */ function the_author_posts_link($deprecated = '') { global $authordata; echo '' . get_the_author() . ''; } function get_author_posts_url($author_id, $author_nicename = '') { global $wpdb, $wp_rewrite, $post, $cache_userdata; $auth_ID = (int) $author_id; $link = $wp_rewrite->get_author_permastruct(); if ( empty($link) ) { $file = get_option('home') . '/'; $link = $file . '?author=' . $auth_ID; } else { if ( '' == $author_nicename ) { $user = get_userdata($author_id); if ( !empty($user->user_nicename) ) $author_nicename = $user->user_nicename; } $link = str_replace('%author%', $author_nicename, $link); $link = get_option('home') . trailingslashit($link); } $link = apply_filters('author_link', $link, $author_id, $author_nicename); return $link; } // Get author's preferred display name function get_author_name( $auth_id ) { $authordata = get_userdata( $auth_id ); return $authordata->display_name; } function wp_list_authors($args = '') { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('optioncount' => false, 'exclude_admin' => true, 'show_fullname' => false, 'hide_empty' => true, 'feed' => '', 'feed_image' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); // TODO: Move select to get_authors(). $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users " . ($exclude_admin ? "WHERE user_login <> 'admin' " : '') . "ORDER BY display_name"); $author_count = array(); foreach ((array) $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_status = 'publish' GROUP BY post_author") as $row) { $author_count[$row->post_author] = $row->count; } foreach ( (array) $authors as $author ) { $author = get_userdata( $author->ID ); $posts = (isset($author_count[$author->ID])) ? $author_count[$author->ID] : 0; $name = $author->nickname; if ( $show_fullname && ($author->first_name != '' && $author->last_name != '') ) $name = "$author->first_name $author->last_name"; if ( !($posts == 0 && $hide_empty) ) echo "
  • "; if ( $posts == 0 ) { if ( !$hide_empty ) $link = $name; } else { $link = 'display_name)) . '">' . $name . ''; if ( (! empty($feed_image)) || (! empty($feed)) ) { $link .= ' '; if (empty($feed_image)) $link .= '('; $link .= ''; else $link .= $name; $link .= ''; if ( empty($feed_image) ) $link .= ')'; } if ( $optioncount ) $link .= ' ('. $posts . ')'; } if ( !($posts == 0 && $hide_empty) ) echo "$link
  • "; } } ?>:wordpress/wp-includes/.svn/text-base/bookmark.php.svn-baseget_row("SELECT * FROM $wpdb->links WHERE link_id = '$bookmark_id'"); $link->link_category = wp_get_link_cats($bookmark_id); if ( $output == OBJECT ) { return $link; } elseif ( $output == ARRAY_A ) { return get_object_vars($link); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($link)); } else { return $link; } } // Deprecate function get_link($bookmark_id, $output = OBJECT) { return get_bookmark($bookmark_id, $output); } function get_bookmarks($args = '') { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => '', 'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'include' => '', 'exclude' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $key = md5( serialize( $r ) ); if ( $cache = wp_cache_get( 'get_bookmarks', 'bookmark' ) ) if ( isset( $cache[ $key ] ) ) return apply_filters('get_bookmarks', $cache[ $key ], $r ); $inclusions = ''; if ( !empty($include) ) { $exclude = ''; //ignore exclude, category, and category_name params if using include $category = ''; $category_name = ''; $inclinks = preg_split('/[\s,]+/',$include); if ( count($inclinks) ) { foreach ( $inclinks as $inclink ) { if (empty($inclusions)) $inclusions = ' AND ( link_id = ' . intval($inclink) . ' '; else $inclusions .= ' OR link_id = ' . intval($inclink) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $exclusions = ''; if ( !empty($exclude) ) { $exlinks = preg_split('/[\s,]+/',$exclude); if ( count($exlinks) ) { foreach ( $exlinks as $exlink ) { if (empty($exclusions)) $exclusions = ' AND ( link_id <> ' . intval($exlink) . ' '; else $exclusions .= ' AND link_id <> ' . intval($exlink) . ' '; } } } if (!empty($exclusions)) $exclusions .= ')'; if ( ! empty($category_name) ) { if ( $cat_id = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$category_name'") ) // LIMIT 1 $category = $cat_id; } $category_query = ''; $join = ''; if ( !empty($category) ) { $incategories = preg_split('/[\s,]+/',$category); if ( count($incategories) ) { foreach ( $incategories as $incat ) { if (empty($category_query)) $category_query = ' AND ( category_id = ' . intval($incat) . ' '; else $category_query .= ' OR category_id = ' . intval($incat) . ' '; } } } if (!empty($category_query)) { $category_query .= ')'; $join = " LEFT JOIN $wpdb->link2cat ON ($wpdb->links.link_id = $wpdb->link2cat.link_id) "; } if (get_option('links_recently_updated_time')) { $recently_updated_test = ", CASE WHEN dateadd('minute'," . get_option('links_recently_updated_time') . " , stringdate(link_updated)) >= now() THEN 1 ELSE 0 END as recently_updated "; // $recently_updated_test = ", 0 as recently_updated, now() "; } else { $recently_updated_test = ''; } if ($show_updated) { $get_updated = ", UNIX_TIMESTAMP(link_updated) AS link_updated_f "; } $orderby = strtolower($orderby); $length = ''; switch ($orderby) { case 'length': $length = ", CHAR_LENGTH(link_name) AS length"; break; case 'rand': $orderby = 'rand()'; break; default: $orderby = "link_" . $orderby; } if ( 'link_id' == $orderby ) $orderby = "$wpdb->links.link_id"; $visible = ''; if ( $hide_invisible ) $visible = "AND link_visible = 'Y'"; $query = "SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query"; $query .= " $exclusions $inclusions"; $query .= " ORDER BY $orderby $order"; // if ($limit != -1) // $query .= " LIMIT $limit"; $results = $wpdb->get_results($query); $cache[ $key ] = $results; wp_cache_add( 'get_bookmarks', $cache, 'bookmark' ); return apply_filters('get_bookmarks', $results, $r); } function delete_get_bookmark_cache() { wp_cache_delete( 'get_bookmarks', 'bookmark' ); } add_action( 'add_link', 'delete_get_bookmark_cache' ); add_action( 'edit_link', 'delete_get_bookmark_cache' ); add_action( 'delete_link', 'delete_get_bookmark_cache' ); ?>Cwordpress/wp-includes/.svn/text-base/bookmark-template.php.svn-base-'; if ( !isset($between) ) $between = ' '; if ( !isset($show_images) ) $show_images = true; if ( !isset($orderby) ) $orderby = 'name'; if ( !isset($show_description) ) $show_description = true; if ( !isset($show_rating) ) $show_rating = false; if ( !isset($limit) ) $limit = -1; if ( !isset($show_updated) ) $show_updated = 1; if ( !isset($echo) ) $echo = true; return get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated, $echo); } // end wp_get_links /** function get_links() ** Gets the links associated with category n. ** Parameters: ** category (default -1) - The category to use. If no category supplied ** uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and its description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description', or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined . ** show_rating (default false) - show rating stars/chars ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp ** echo (default true) - whether to echo the results, or return them instead */ function get_links($category = -1, $before = '', $after = '
    ', $between = ' ', $show_images = true, $orderby = 'name', $show_description = true, $show_rating = false, $limit = -1, $show_updated = 1, $echo = true) { global $wpdb; $order = 'ASC'; if ( substr($orderby, 0, 1) == '_' ) { $order = 'DESC'; $orderby = substr($orderby, 1); } if ( $category == -1 ) //get_bookmarks uses '' to signify all categories $category = ''; $results = get_bookmarks("category=$category&orderby=$orderby&order=$order&show_updated=$show_updated&limit=$limit"); if ( !$results ) return; $output = ''; foreach ( (array) $results as $row ) { if ( !isset($row->recently_updated) ) $row->recently_updated = false; $output .= $before; if ( $show_updated && $row->recently_updated ) $output .= get_option('links_recently_updated_prepend'); $the_link = '#'; if ( !empty($row->link_url) ) $the_link = clean_url($row->link_url); $rel = $row->link_rel; if ( '' != $rel ) $rel = ' rel="' . $rel . '"'; $desc = attribute_escape($row->link_description); $name = attribute_escape($row->link_name); $title = $desc; if ( $show_updated ) if (substr($row->link_updated_f, 0, 2) != '00') $title .= ' ('.__('Last updated') . ' ' . date(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * 3600)) . ')'; if ( '' != $title ) $title = ' title="' . $title . '"'; $alt = ' alt="' . $name . '"'; $target = $row->link_target; if ( '' != $target ) $target = ' target="' . $target . '"'; $output .= ''; if ( $row->link_image != null && $show_images ) { if ( strpos($row->link_image, 'http') != false ) $output .= "link_image\" $alt $title />"; else // If it's a relative path $output .= "link_image\" $alt $title />"; } else { $output .= $name; } $output .= ''; if ( $show_updated && $row->recently_updated ) $output .= get_option('links_recently_updated_append'); if ( $show_description && '' != $desc ) $output .= $between . $desc; if ($show_rating) { $output .= $between . get_linkrating($row); } $output .= "$after\n"; } // end while if ( !$echo ) return $output; echo $output; } function get_linkrating($link) { return apply_filters('link_rating', $link->link_rating); } /** function get_linkcatname() ** Gets the name of category n. ** Parameters: id (default 0) - The category to get. If no category supplied ** uses 0 */ function get_linkcatname($id = 0) { $id = (int) $id; if ( empty($id) ) return ''; $cats = wp_get_link_cats($id); if ( empty($cats) || ! is_array($cats) ) return ''; $cat_id = (int) $cats[0]; // Take the first cat. $cat = get_category($cat_id); return $cat->cat_name; } /** function links_popup_script() ** This function contributed by Fullo -- http://sprite.csr.unibo.it/fullo/ ** Show the link to the links popup and the number of links ** Parameters: ** text (default Links) - the text of the link ** width (default 400) - the width of the popup window ** height (default 400) - the height of the popup window ** file (default linkspopup.php) - the page to open in the popup window ** count (default true) - the number of links in the db */ function links_popup_script($text = 'Links', $width=400, $height=400, $file='links.all.php', $count = true) { if ( $count ) $counts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links"); $javascript = ""; $javascript .= $text; if ( $count ) $javascript .= " ($counts)"; $javascript .= "\n\n"; echo $javascript; } /* * function get_links_list() * * added by Dougal * * Output a list of all links, listed by category, using the * settings in $wpdb->linkcategories and output it as a nested * HTML unordered list. * * Parameters: * order (default 'name') - Sort link categories by 'name' or 'id' * hide_if_empty (default true) - Supress listing empty link categories */ function get_links_list($order = 'name', $hide_if_empty = 'obsolete') { $order = strtolower($order); // Handle link category sorting $direction = 'ASC'; if ( '_' == substr($order,0,1) ) { $direction = 'DESC'; $order = substr($order,1); } if ( !isset($direction) ) $direction = ''; $cats = get_categories("type=link&orderby=$order&order=$direction&hierarchical=0"); // Display each category if ( $cats ) { foreach ( (array) $cats as $cat ) { // Handle each category. // Display the category name echo '
  • ' . $cat->cat_name . "

    \n\t
      \n"; // Call get_links() with all the appropriate params get_links($cat->cat_ID, '
    • ', "
    • ", "\n", true, 'name', false); // Close the last category echo "\n\t
    \n
  • \n"; } } } function _walk_bookmarks($bookmarks, $args = '' ) { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_updated' => 0, 'show_description' => 0, 'show_images' => 1, 'before' => '
  • ', 'after' => '
  • ', 'between' => "\n"); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); foreach ( (array) $bookmarks as $bookmark ) { if ( !isset($bookmark->recently_updated) ) $bookmark->recently_updated = false; $output .= $before; if ( $show_updated && $bookmark->recently_updated ) $output .= get_option('links_recently_updated_prepend'); $the_link = '#'; if ( !empty($bookmark->link_url) ) $the_link = clean_url($bookmark->link_url); $rel = $bookmark->link_rel; if ( '' != $rel ) $rel = ' rel="' . $rel . '"'; $desc = attribute_escape(apply_filters('link_description', $bookmark->link_description)); $name = attribute_escape(apply_filters('link_title', $bookmark->link_name)); $title = $desc; if ( $show_updated ) if ( '00' != substr($bookmark->link_updated_f, 0, 2) ) { $title .= ' '; $title .= sprintf(__('Last updated: %s'), date(get_option('links_updated_date_format'), $bookmark->link_updated_f + (get_option('gmt_offset') * 3600))); $title .= ')'; } if ( '' != $title ) $title = ' title="' . $title . '"'; $alt = ' alt="' . $name . '"'; $target = $bookmark->link_target; if ( '' != $target ) $target = ' target="' . $target . '"'; $output .= ''; if ( $bookmark->link_image != null && $show_images ) { if ( strpos($bookmark->link_image, 'http') != false ) $output .= "link_image\" $alt $title />"; else // If it's a relative path $output .= "link_image\" $alt $title />"; } else { $output .= $name; } $output .= ''; if ( $show_updated && $bookmark->recently_updated ) $output .= get_option('links_recently_updated_append'); if ( $show_description && '' != $desc ) $output .= $between . $desc; if ($show_rating) { $output .= $between . get_linkrating($bookmark); } $output .= "$after\n"; } // end while return $output; } function wp_list_bookmarks($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => '', 'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'echo' => 1, 'categorize' => 1, 'title_li' => __('Bookmarks'), 'title_before' => '

    ', 'title_after' => '

    ', 'category_orderby' => 'name', 'category_order' => 'ASC', 'class' => 'linkcat', 'category_before' => '
  • ', 'category_after' => '
  • '); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $output = ''; if ( $categorize ) { //Split the bookmarks into ul's for each category $cats = get_categories("type=link&category_name=$category_name&include=$category&orderby=$category_orderby&order=$category_order&hierarchical=0"); foreach ( (array) $cats as $cat ) { $params = array_merge($r, array('category'=>$cat->cat_ID)); $bookmarks = get_bookmarks($params); if ( empty($bookmarks) ) continue; $output .= str_replace(array('%id', '%class'), array("linkcat-$cat->cat_ID", $class), $category_before); $catname = apply_filters( "link_category", $cat->cat_name ); $output .= "$title_before$catname$title_after\n\t
      \n"; $output .= _walk_bookmarks($bookmarks, $r); $output .= "\n\t
    \n$category_after\n"; } } else { //output one single list using title_li for the title $bookmarks = get_bookmarks($r); if ( !empty($bookmarks) ) { if ( !empty( $title_li ) ){ $output .= str_replace(array('%id', '%class'), array("linkcat-$category", $class), $category_before); $output .= "$title_before$title_li$title_after\n\t
      \n"; $output .= _walk_bookmarks($bookmarks, $r); $output .= "\n\t
    \n$category_after\n"; } else { $output .= _walk_bookmarks($bookmarks, $r); } } } if ( !$echo ) return $output; echo $output; } ?> 7wordpress/wp-includes/.svn/text-base/cache.php.svn-base)qadd($key, $data, $flag, $expire); } function wp_cache_close() { global $wp_object_cache; if ( ! isset($wp_object_cache) ) return; return $wp_object_cache->save(); } function wp_cache_delete($id, $flag = '') { global $wp_object_cache; return $wp_object_cache->delete($id, $flag); } function wp_cache_flush() { global $wp_object_cache; return $wp_object_cache->flush(); } function wp_cache_get($id, $flag = '') { global $wp_object_cache; return $wp_object_cache->get($id, $flag); } function wp_cache_init() { $GLOBALS['wp_object_cache'] =& new WP_Object_Cache(); } function wp_cache_replace($key, $data, $flag = '', $expire = 0) { global $wp_object_cache; $data = unserialize(serialize($data)); return $wp_object_cache->replace($key, $data, $flag, $expire); } function wp_cache_set($key, $data, $flag = '', $expire = 0) { global $wp_object_cache; $data = unserialize(serialize($data)); return $wp_object_cache->set($key, $data, $flag, $expire); } define('CACHE_SERIAL_HEADER', ""); class WP_Object_Cache { var $cache_dir; var $cache_enabled = false; var $expiration_time = 900; var $flock_filename = 'wp_object_cache.lock'; var $mutex; var $cache = array (); var $dirty_objects = array (); var $non_existant_objects = array (); var $global_groups = array ('users', 'userlogins', 'usermeta'); var $blog_id; var $cold_cache_hits = 0; var $warm_cache_hits = 0; var $cache_misses = 0; var $secret = ''; function acquire_lock() { // Acquire a write lock. $this->mutex = @fopen($this->cache_dir.$this->flock_filename, 'w'); if ( false == $this->mutex) return false; flock($this->mutex, LOCK_EX); return true; } function add($id, $data, $group = 'default', $expire = '') { if (empty ($group)) $group = 'default'; if (false != $this->get($id, $group, false)) return false; return $this->set($id, $data, $group, $expire); } function delete($id, $group = 'default', $force = false) { if (empty ($group)) $group = 'default'; if (!$force && false == $this->get($id, $group, false)) return false; unset ($this->cache[$group][$id]); $this->non_existant_objects[$group][$id] = true; $this->dirty_objects[$group][] = $id; return true; } function flush() { if ( !$this->cache_enabled ) return true; if ( ! $this->acquire_lock() ) return false; $this->rm_cache_dir(); $this->cache = array (); $this->dirty_objects = array (); $this->non_existant_objects = array (); $this->release_lock(); return true; } function get($id, $group = 'default', $count_hits = true) { if (empty ($group)) $group = 'default'; if (isset ($this->cache[$group][$id])) { if ($count_hits) $this->warm_cache_hits += 1; return $this->cache[$group][$id]; } if (isset ($this->non_existant_objects[$group][$id])) return false; // If caching is not enabled, we have to fall back to pulling from the DB. if (!$this->cache_enabled) { if (!isset ($this->cache[$group])) $this->load_group_from_db($group); if (isset ($this->cache[$group][$id])) { $this->cold_cache_hits += 1; return $this->cache[$group][$id]; } $this->non_existant_objects[$group][$id] = true; $this->cache_misses += 1; return false; } $cache_file = $this->cache_dir.$this->get_group_dir($group)."/".$this->hash($id).'.php'; if (!file_exists($cache_file)) { $this->non_existant_objects[$group][$id] = true; $this->cache_misses += 1; return false; } // If the object has expired, remove it from the cache and return false to force // a refresh. $now = time(); if ((filemtime($cache_file) + $this->expiration_time) <= $now) { $this->cache_misses += 1; $this->delete($id, $group, true); return false; } $this->cache[$group][$id] = unserialize(base64_decode(substr(@ file_get_contents($cache_file), strlen(CACHE_SERIAL_HEADER), -strlen(CACHE_SERIAL_FOOTER)))); if (false == $this->cache[$group][$id]) $this->cache[$group][$id] = ''; $this->cold_cache_hits += 1; return $this->cache[$group][$id]; } function get_group_dir($group) { if (false != array_search($group, $this->global_groups)) return $group; return "{$this->blog_id}/$group"; } function hash($data) { if ( function_exists('hash_hmac') ) { return hash_hmac('md5', $data, $this->secret); } else { return md5($data . $this->secret); } } function load_group_from_db($group) { global $wpdb; if ('category' == $group) { $this->cache['category'] = array (); if ($dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories")) { foreach ($dogs as $catt) $this->cache['category'][$catt->cat_ID] = $catt; } } } function make_group_dir($group, $perms) { $group_dir = $this->get_group_dir($group); $make_dir = ''; foreach (split('/', $group_dir) as $subdir) { $make_dir .= "$subdir/"; if (!file_exists($this->cache_dir.$make_dir)) { if (! @ mkdir($this->cache_dir.$make_dir)) break; @ chmod($this->cache_dir.$make_dir, $perms); } if (!file_exists($this->cache_dir.$make_dir."index.php")) { $file_perms = $perms & 0000666; @ touch($this->cache_dir.$make_dir."index.php"); @ chmod($this->cache_dir.$make_dir."index.php", $file_perms); } } return $this->cache_dir."$group_dir/"; } function rm_cache_dir() { $dir = $this->cache_dir; $dir = rtrim($dir, DIRECTORY_SEPARATOR); $top_dir = $dir; $stack = array($dir); $index = 0; while ($index < count($stack)) { # Get indexed directory from stack $dir = $stack[$index]; $dh = @ opendir($dir); if (!$dh) return false; while (($file = @ readdir($dh)) != false) { if ($file == '.' or $file == '..') continue; if (@ is_dir($dir . DIRECTORY_SEPARATOR . $file)) $stack[] = $dir . DIRECTORY_SEPARATOR . $file; else if (@ is_file($dir . DIRECTORY_SEPARATOR . $file)) @ unlink($dir . DIRECTORY_SEPARATOR . $file); } $index++; } $stack = array_reverse($stack); // Last added dirs are deepest foreach($stack as $dir) { if ( $dir != $top_dir) @ rmdir($dir); } } function release_lock() { // Release write lock. flock($this->mutex, LOCK_UN); fclose($this->mutex); } function replace($id, $data, $group = 'default', $expire = '') { if (empty ($group)) $group = 'default'; if (false == $this->get($id, $group, false)) return false; return $this->set($id, $data, $group, $expire); } function set($id, $data, $group = 'default', $expire = '') { if (empty ($group)) $group = 'default'; if (NULL == $data) $data = ''; $this->cache[$group][$id] = $data; unset ($this->non_existant_objects[$group][$id]); $this->dirty_objects[$group][] = $id; return true; } function save() { //$this->stats(); if (!$this->cache_enabled) return true; if (empty ($this->dirty_objects)) return true; // Give the new dirs the same perms as wp-content. $stat = stat(ABSPATH.'wp-content'); $dir_perms = $stat['mode'] & 0007777; // Get the permission bits. $file_perms = $dir_perms & 0000666; // Remove execute bits for files. // Make the base cache dir. if (!file_exists($this->cache_dir)) { if (! @ mkdir($this->cache_dir)) return false; @ chmod($this->cache_dir, $dir_perms); } if (!file_exists($this->cache_dir."index.php")) { @ touch($this->cache_dir."index.php"); @ chmod($this->cache_dir."index.php", $file_perms); } if ( ! $this->acquire_lock() ) return false; // Loop over dirty objects and save them. $errors = 0; foreach ($this->dirty_objects as $group => $ids) { $group_dir = $this->make_group_dir($group, $dir_perms); $ids = array_unique($ids); foreach ($ids as $id) { $cache_file = $group_dir.$this->hash($id).'.php'; // Remove the cache file if the key is not set. if (!isset ($this->cache[$group][$id])) { if (file_exists($cache_file)) @ unlink($cache_file); continue; } $temp_file = tempnam($group_dir, 'tmp'); $serial = CACHE_SERIAL_HEADER.base64_encode(serialize($this->cache[$group][$id])).CACHE_SERIAL_FOOTER; $fd = @fopen($temp_file, 'w'); if ( false == $fd ) { $errors++; continue; } fputs($fd, $serial); fclose($fd); if (!@ rename($temp_file, $cache_file)) { if (!@ copy($temp_file, $cache_file)) $errors++; @ unlink($temp_file); } @ chmod($cache_file, $file_perms); } } $this->dirty_objects = array(); $this->release_lock(); if ( $errors ) return false; return true; } function stats() { echo "

    "; echo "Cold Cache Hits: {$this->cold_cache_hits}
    "; echo "Warm Cache Hits: {$this->warm_cache_hits}
    "; echo "Cache Misses: {$this->cache_misses}
    "; echo "

    "; foreach ($this->cache as $group => $cache) { echo "

    "; echo "Group: $group
    "; echo "Cache:"; echo "

    ";
    			print_r($cache);
    			echo "
    "; if (isset ($this->dirty_objects[$group])) { echo "Dirty Objects:"; echo "
    ";
    				print_r(array_unique($this->dirty_objects[$group]));
    				echo "
    "; echo "

    "; } } } function WP_Object_Cache() { return $this->__construct(); } function __construct() { global $blog_id; register_shutdown_function(array(&$this, "__destruct")); if (defined('DISABLE_CACHE')) return; if ( ! defined('ENABLE_CACHE') ) return; // Disable the persistent cache if safe_mode is on. if ( ini_get('safe_mode') && ! defined('ENABLE_CACHE') ) return; if (defined('CACHE_PATH')) $this->cache_dir = CACHE_PATH; else // Using the correct separator eliminates some cache flush errors on Windows $this->cache_dir = ABSPATH.'wp-content'.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR; if (is_writable($this->cache_dir) && is_dir($this->cache_dir)) { $this->cache_enabled = true; } else { if (is_writable(ABSPATH.'wp-content')) { $this->cache_enabled = true; } } if (defined('CACHE_EXPIRATION_TIME')) $this->expiration_time = CACHE_EXPIRATION_TIME; if ( defined('WP_SECRET') ) $this->secret = WP_SECRET; else $this->secret = DB_PASSWORD . DB_USER . DB_NAME . DB_HOST . ABSPATH; $this->blog_id = $this->hash($blog_id); } function __destruct() { $this->save(); return true; } } ?> >wordpress/wp-includes/.svn/text-base/capabilities.php.svn-base1_init(); } function _init () { global $wpdb; global $wp_user_roles; $this->role_key = $wpdb->prefix . 'user_roles'; if ( ! empty($wp_user_roles) ) { $this->roles = $wp_user_roles; $this->use_db = false; } else { $this->roles = get_option($this->role_key); } if ( empty($this->roles) ) return; $this->role_objects = array(); $this->role_names = array(); foreach ($this->roles as $role => $data) { $this->role_objects[$role] = new WP_Role($role, $this->roles[$role]['capabilities']); $this->role_names[$role] = $this->roles[$role]['name']; } } function add_role($role, $display_name, $capabilities = '') { if ( isset($this->roles[$role]) ) return; $this->roles[$role] = array( 'name' => $display_name, 'capabilities' => $capabilities); if ( $this->use_db ) update_option($this->role_key, $this->roles); $this->role_objects[$role] = new WP_Role($role, $capabilities); $this->role_names[$role] = $display_name; return $this->role_objects[$role]; } function remove_role($role) { if ( ! isset($this->role_objects[$role]) ) return; unset($this->role_objects[$role]); unset($this->role_names[$role]); unset($this->roles[$role]); if ( $this->use_db ) update_option($this->role_key, $this->roles); } function add_cap($role, $cap, $grant = true) { $this->roles[$role]['capabilities'][$cap] = $grant; if ( $this->use_db ) update_option($this->role_key, $this->roles); } function remove_cap($role, $cap) { unset($this->roles[$role]['capabilities'][$cap]); if ( $this->use_db ) update_option($this->role_key, $this->roles); } function &get_role($role) { if ( isset($this->role_objects[$role]) ) return $this->role_objects[$role]; else return null; } function get_names() { return $this->role_names; } function is_role($role) { return isset($this->role_names[$role]); } } class WP_Role { var $name; var $capabilities; function WP_Role($role, $capabilities) { $this->name = $role; $this->capabilities = $capabilities; } function add_cap($cap, $grant = true) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); $this->capabilities[$cap] = $grant; $wp_roles->add_cap($this->name, $cap, $grant); } function remove_cap($cap) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); unset($this->capabilities[$cap]); $wp_roles->remove_cap($this->name, $cap); } function has_cap($cap) { $capabilities = apply_filters('role_has_cap', $this->capabilities, $cap, $this->name); if ( !empty($capabilities[$cap]) ) return $capabilities[$cap]; else return false; } } class WP_User { var $data; var $ID = 0; var $id = 0; // Deprecated, use $ID instead. var $caps = array(); var $cap_key; var $roles = array(); var $allcaps = array(); function WP_User($id, $name = '') { global $wpdb; if ( empty($id) && empty($name) ) return; if ( ! is_numeric($id) ) { $name = $id; $id = 0; } if ( ! empty($id) ) $this->data = get_userdata($id); else $this->data = get_userdatabylogin($name); if ( empty($this->data->ID) ) return; foreach (get_object_vars($this->data) as $key => $value) { $this->{$key} = $value; } $this->id = $this->ID; $this->_init_caps(); } function _init_caps() { global $wpdb; $this->cap_key = $wpdb->prefix . 'capabilities'; $this->caps = &$this->{$this->cap_key}; if ( ! is_array($this->caps) ) $this->caps = array(); $this->get_role_caps(); } function get_role_caps() { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); //Filter out caps that are not role names and assign to $this->roles if(is_array($this->caps)) $this->roles = array_filter(array_keys($this->caps), array(&$wp_roles, 'is_role')); //Build $allcaps from role caps, overlay user's $caps $this->allcaps = array(); foreach( (array) $this->roles as $role) { $role = $wp_roles->get_role($role); $this->allcaps = array_merge($this->allcaps, $role->capabilities); } $this->allcaps = array_merge($this->allcaps, $this->caps); } function add_role($role) { $this->caps[$role] = true; update_usermeta($this->ID, $this->cap_key, $this->caps); $this->get_role_caps(); $this->update_user_level_from_caps(); } function remove_role($role) { if ( empty($this->roles[$role]) || (count($this->roles) <= 1) ) return; unset($this->caps[$role]); update_usermeta($this->ID, $this->cap_key, $this->caps); $this->get_role_caps(); } function set_role($role) { foreach($this->roles as $oldrole) unset($this->caps[$oldrole]); if ( !empty($role) ) { $this->caps[$role] = true; $this->roles = array($role => true); } else { $this->roles = false; } update_usermeta($this->ID, $this->cap_key, $this->caps); $this->get_role_caps(); $this->update_user_level_from_caps(); } function level_reduction($max, $item) { if(preg_match('/^level_(10|[0-9])$/i', $item, $matches)) { $level = intval($matches[1]); return max($max, $level); } else { return $max; } } function update_user_level_from_caps() { global $wpdb; $this->user_level = array_reduce(array_keys($this->allcaps), array(&$this, 'level_reduction'), 0); update_usermeta($this->ID, $wpdb->prefix.'user_level', $this->user_level); } function add_cap($cap, $grant = true) { $this->caps[$cap] = $grant; printf ("ADD_CAP [" . $this->cap_key ."]\n"); update_usermeta($this->ID, $this->cap_key, $this->caps); } function remove_cap($cap) { if ( empty($this->caps[$cap]) ) return; unset($this->caps[$cap]); update_usermeta($this->ID, $this->cap_key, $this->caps); } function remove_all_caps() { global $wpdb; $this->caps = array(); update_usermeta($this->ID, $this->cap_key, ''); update_usermeta($this->ID, $wpdb->prefix.'user_level', ''); $this->get_role_caps(); } //has_cap(capability_or_role_name) or //has_cap('edit_post', post_id) function has_cap($cap) { if ( is_numeric($cap) ) $cap = $this->translate_level_to_cap($cap); $args = array_slice(func_get_args(), 1); $args = array_merge(array($cap, $this->ID), $args); $caps = call_user_func_array('map_meta_cap', $args); // Must have ALL requested caps $capabilities = apply_filters('user_has_cap', $this->allcaps, $caps, $args); foreach ($caps as $cap) { //echo "Checking cap $cap
    "; if(empty($capabilities[$cap]) || !$capabilities[$cap]) return false; } return true; } function translate_level_to_cap($level) { return 'level_' . $level; } } // Map meta capabilities to primitive capabilities. function map_meta_cap($cap, $user_id) { $args = array_slice(func_get_args(), 2); $caps = array(); switch ($cap) { case 'delete_user': $caps[] = 'delete_users'; break; case 'edit_user': $caps[] = 'edit_users'; break; case 'delete_post': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $post = get_post($args[0]); if ( 'page' == $post->post_type ) { $args = array_merge(array('delete_page', $user_id), $args); return call_user_func_array('map_meta_cap', $args); } $post_author_data = get_userdata($post->post_author); //echo "current user id : $user_id, post author id: " . $post_author_data->ID . "
    "; // If the user is the author... if ($user_id == $post_author_data->ID) { // If the post is published... if ($post->post_status == 'publish') $caps[] = 'delete_published_posts'; else // If the post is draft... $caps[] = 'delete_posts'; } else { // The user is trying to edit someone else's post. $caps[] = 'delete_others_posts'; // The post is published, extra cap required. if ($post->post_status == 'publish') $caps[] = 'delete_published_posts'; else if ($post->post_status == 'private') $caps[] = 'delete_private_posts'; } break; case 'delete_page': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $page = get_page($args[0]); $page_author_data = get_userdata($page->post_author); //echo "current user id : $user_id, page author id: " . $page_author_data->ID . "
    "; // If the user is the author... if ($user_id == $page_author_data->ID) { // If the page is published... if ($page->post_status == 'publish') $caps[] = 'delete_published_pages'; else // If the page is draft... $caps[] = 'delete_pages'; } else { // The user is trying to edit someone else's page. $caps[] = 'delete_others_pages'; // The page is published, extra cap required. if ($page->post_status == 'publish') $caps[] = 'delete_published_pages'; else if ($page->post_status == 'private') $caps[] = 'delete_private_pages'; } break; // edit_post breaks down to edit_posts, edit_published_posts, or // edit_others_posts case 'edit_post': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $post = get_post($args[0]); if ( 'page' == $post->post_type ) { $args = array_merge(array('edit_page', $user_id), $args); return call_user_func_array('map_meta_cap', $args); } $post_author_data = get_userdata($post->post_author); //echo "current user id : $user_id, post author id: " . $post_author_data->ID . "
    "; // If the user is the author... if ($user_id == $post_author_data->ID) { // If the post is published... if ($post->post_status == 'publish') $caps[] = 'edit_published_posts'; else // If the post is draft... $caps[] = 'edit_posts'; } else { // The user is trying to edit someone else's post. $caps[] = 'edit_others_posts'; // The post is published, extra cap required. if ($post->post_status == 'publish') $caps[] = 'edit_published_posts'; else if ($post->post_status == 'private') $caps[] = 'edit_private_posts'; } break; case 'edit_page': $author_data = get_userdata($user_id); //echo "post ID: {$args[0]}
    "; $page = get_page($args[0]); $page_author_data = get_userdata($page->post_author); //echo "current user id : $user_id, page author id: " . $page_author_data->ID . "
    "; // If the user is the author... if ($user_id == $page_author_data->ID) { // If the page is published... if ($page->post_status == 'publish') $caps[] = 'edit_published_pages'; else // If the page is draft... $caps[] = 'edit_pages'; } else { // The user is trying to edit someone else's page. $caps[] = 'edit_others_pages'; // The page is published, extra cap required. if ($page->post_status == 'publish') $caps[] = 'edit_published_pages'; else if ($page->post_status == 'private') $caps[] = 'edit_private_pages'; } break; case 'read_post': $post = get_post($args[0]); if ( 'page' == $post->post_type ) { $args = array_merge(array('read_page', $user_id), $args); return call_user_func_array('map_meta_cap', $args); } if ( 'private' != $post->post_status ) { $caps[] = 'read'; break; } $author_data = get_userdata($user_id); $post_author_data = get_userdata($post->post_author); if ($user_id == $post_author_data->ID) $caps[] = 'read'; else $caps[] = 'read_private_posts'; break; case 'read_page': $page = get_page($args[0]); if ( 'private' != $page->post_status ) { $caps[] = 'read'; break; } $author_data = get_userdata($user_id); $page_author_data = get_userdata($page->post_author); if ($user_id == $page_author_data->ID) $caps[] = 'read'; else $caps[] = 'read_private_pages'; break; default: // If no meta caps match, return the original cap. $caps[] = $cap; } return $caps; } // Capability checking wrapper around the global $current_user object. function current_user_can($capability) { $current_user = wp_get_current_user(); $args = array_slice(func_get_args(), 1); $args = array_merge(array($capability), $args); if ( empty($current_user) ) return false; return call_user_func_array(array(&$current_user, 'has_cap'), $args); } // Convenience wrappers around $wp_roles. function get_role($role) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); return $wp_roles->get_role($role); } function add_role($role, $display_name, $capabilities = '') { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); return $wp_roles->add_role($role, $display_name, $capabilities); } function remove_role($role) { global $wp_roles; if ( ! isset($wp_roles) ) $wp_roles = new WP_Roles(); return $wp_roles->remove_role($role); } ?> :wordpress/wp-includes/.svn/text-base/category.php.svn-base(get_col("SELECT cat_ID FROM $wpdb->categories"); wp_cache_add('all_category_ids', $cat_ids, 'category'); } return $cat_ids; } function &get_categories($args = '') { global $wpdb, $category_links; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('type' => 'post', 'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => true, 'include_last_update_time' => false, 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'number' => '', 'pad_counts' => false); $r = array_merge($defaults, $r); if ( 'count' == $r['orderby'] ) $r['orderby'] = 'category_count'; else $r['orderby'] = "cat_" . $r['orderby']; // restricts order by to cat_ID and cat_name fields $r['number'] = (int) $r['number']; extract($r, EXTR_SKIP); $key = md5( serialize( $r ) ); if ( $cache = wp_cache_get( 'get_categories', 'category' ) ) if ( isset( $cache[ $key ] ) ) return apply_filters('get_categories', $cache[$key], $r); $where = 'cat_ID > 0'; $inclusions = ''; if ( !empty($include) ) { $child_of = 0; //ignore child_of and exclude params if using include $exclude = ''; $incategories = preg_split('/[\s,]+/',$include); if ( count($incategories) ) { foreach ( $incategories as $incat ) { if (empty($inclusions)) $inclusions = ' AND ( cat_ID = ' . intval($incat) . ' '; else $inclusions .= ' OR cat_ID = ' . intval($incat) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $where .= $inclusions; $exclusions = ''; if ( !empty($exclude) ) { $excategories = preg_split('/[\s,]+/',$exclude); if ( count($excategories) ) { foreach ( $excategories as $excat ) { if (empty($exclusions)) $exclusions = ' AND ( cat_ID <> ' . intval($excat) . ' '; else $exclusions .= ' AND cat_ID <> ' . intval($excat) . ' '; // TODO: Exclude children of excluded cats? Note: children are getting excluded } } } if (!empty($exclusions)) $exclusions .= ')'; $exclusions = apply_filters('list_cats_exclusions', $exclusions, $r ); $where .= $exclusions; if ( $hide_empty && !$hierarchical ) { if ( 'link' == $type ) $where .= ' AND link_count > 0'; else $where .= ' AND category_count > 0'; } // if ( !empty($number) ) // $number = 'LIMIT ' . $number; // else $number = ''; $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories WHERE $where ORDER BY $orderby $order $number"); if ( empty($categories) ) return array(); // TODO: Integrate this into the main query. if ( $include_last_update_time ) { $stamps = $wpdb->get_results("SELECT category_id, UNIX_TIMESTAMP( MAX(post_date) ) AS ts FROM $wpdb->posts, $wpdb->post2cat, $wpdb->categories WHERE post_status = 'publish' AND post_id = ID AND $where GROUP BY category_id"); global $cat_stamps; foreach ($stamps as $stamp) $cat_stamps[$stamp->category_id] = $stamp->ts; function stamp_cat($cat) { global $cat_stamps; $cat->last_update_timestamp = $cat_stamps[$cat->cat_ID]; return $cat; } $categories = array_map('stamp_cat', $categories); unset($cat_stamps); } if ( $child_of || $hierarchical ) { $children = _get_category_hierarchy(); if ( ! empty($children) ) $categories = & _get_cat_children($child_of, $categories); } // Update category counts to include children. if ( $pad_counts ) _pad_category_counts($type, $categories); // Make sure we show empty categories that have children. if ( $hierarchical && $hide_empty ) { foreach ( $categories as $k => $category ) { if ( ! $category->{'link' == $type ? 'link_count' : 'category_count'} ) { $children = _get_cat_children($category->cat_ID, $categories); foreach ( $children as $child ) if ( $child->{'link' == $type ? 'link_count' : 'category_count'} ) continue 2; // It really is empty unset($categories[$k]); } } } reset ( $categories ); $cache[ $key ] = $categories; wp_cache_add( 'get_categories', $cache, 'category' ); $categories = apply_filters('get_categories', $categories, $r); return $categories; } // Retrieves category data given a category ID or category object. // Handles category caching. function &get_category(&$category, $output = OBJECT) { global $wpdb; if ( empty($category) ) return null; if ( is_object($category) ) { wp_cache_add($category->cat_ID, $category, 'category'); $_category = $category; } else { $category = (int) $category; if ( ! $_category = wp_cache_get($category, 'category') ) { $_category = $wpdb->get_row("SELECT * FROM $wpdb->categories WHERE cat_ID = " . $category ); // LIMIT 1 wp_cache_add($category, $_category, 'category'); } } $_category = apply_filters('get_category', $_category); if ( $output == OBJECT ) { return $_category; } elseif ( $output == ARRAY_A ) { return get_object_vars($_category); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_category)); } else { return $_category; } } function get_category_by_path($category_path, $full_match = true, $output = OBJECT) { global $wpdb; $category_path = rawurlencode(urldecode($category_path)); $category_path = str_replace('%2F', '/', $category_path); $category_path = str_replace('%20', ' ', $category_path); $category_paths = '/' . trim($category_path, '/'); $leaf_path = sanitize_title(basename($category_paths)); $category_paths = explode('/', $category_paths); $full_path = ''; foreach ( (array) $category_paths as $pathdir ) $full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title($pathdir); $categories = $wpdb->get_results("SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE category_nicename = '$leaf_path'"); if ( empty($categories) ) return NULL; foreach ($categories as $category) { $path = '/' . $leaf_path; $curcategory = $category; while ( ($curcategory->category_parent != 0) && ($curcategory->category_parent != $curcategory->cat_ID) ) { $curcategory = $wpdb->get_row("SELECT cat_ID, category_nicename, category_parent FROM $wpdb->categories WHERE cat_ID = " . $curcategory->category_parent); $path = '/' . $curcategory->category_nicename . $path; } if ( $path == $full_path ) return get_category($category->cat_ID, $output); } // If full matching is not required, return the first cat that matches the leaf. if ( ! $full_match ) return get_category($categories[0]->cat_ID, $output); return NULL; } // Get the ID of a category from its name function get_cat_ID($cat_name='General') { global $wpdb; $cid = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$cat_name'"); return $cid?$cid:1; // default to cat 1 } // Deprecate function get_catname($cat_ID) { return get_cat_name($cat_ID); } // Get the name of a category from its ID function get_cat_name($cat_id) { $cat_id = (int) $cat_id; $category = &get_category($cat_id); return $category->cat_name; } function cat_is_ancestor_of($cat1, $cat2) { if ( is_int($cat1) ) $cat1 = & get_category($cat1); if ( is_int($cat2) ) $cat2 = & get_category($cat2); if ( !$cat1->cat_ID || !$cat2->category_parent ) return false; if ( $cat2->category_parent == $cat1->cat_ID ) return true; return cat_is_ancestor_of($cat1, get_category($cat2->parent_category)); } // // Private // function &_get_cat_children($category_id, $categories) { if ( empty($categories) ) return array(); $category_list = array(); $has_children = _get_category_hierarchy(); if ( ( 0 != $category_id ) && ! isset($has_children[$category_id]) ) return array(); foreach ( $categories as $category ) { if ( $category->cat_ID == $category_id ) continue; if ( $category->category_parent == $category_id ) { $category_list[] = $category; if ( !isset($has_children[$category->cat_ID]) ) continue; if ( $children = _get_cat_children($category->cat_ID, $categories) ) $category_list = array_merge($category_list, $children); } } return $category_list; } // Recalculates link or post counts by including items from child categories // Assumes all relevant children are already in the $categories argument function _pad_category_counts($type, &$categories) { global $wpdb; // Set up some useful arrays foreach ( $categories as $key => $cat ) { $cats[$cat->cat_ID] = & $categories[$key]; $cat_IDs[] = $cat->cat_ID; } // Get the relevant post2cat or link2cat records and stick them in a lookup table if ( $type == 'post' ) { $results = $wpdb->get_results("SELECT post_id, category_id FROM $wpdb->post2cat LEFT JOIN $wpdb->posts ON post_id = ID WHERE category_id IN (".join(',', $cat_IDs).") AND post_type = 'post' AND post_status = 'publish'"); if ($results && count($results)) foreach ( $results as $row ) ++$cat_items[$row->category_id][$row->post_id]; } else { $results = $wpdb->get_results("SELECT $wpdb->link2cat.link_id, category_id FROM $wpdb->link2cat LEFT JOIN $wpdb->links USING (link_id) WHERE category_id IN (".join(',', $cat_IDs).") AND link_visible = 'Y'"); if ($results && count($results)) foreach ( $results as $row ) ++$cat_items[$row->category_id][$row->link_id]; } // Touch every ancestor's lookup row for each post in each category foreach ( $cat_IDs as $cat_ID ) { $child = $cat_ID; while ( $parent = $cats[$child]->category_parent ) { if ( !empty($cat_items[$cat_ID]) ) foreach ( $cat_items[$cat_ID] as $item_id => $touches ) ++$cat_items[$parent][$item_id]; $child = $parent; } } // Transfer the touched cells foreach ( (array) $cat_items as $id => $items ) if ( isset($cats[$id]) ) $cats[$id]->{'link' == $type ? 'link_count' : 'category_count'} = count($items); } function _get_category_hierarchy() { $children = get_option('category_children'); if ( is_array($children) ) return $children; $children = array(); $categories = get_categories('hide_empty=0&hierarchical=0'); foreach ( $categories as $cat ) { if ( $cat->category_parent > 0 ) $children[$cat->category_parent][] = $cat->cat_ID; } update_option('category_children', $children); return $children; } ?> Cwordpress/wp-includes/.svn/text-base/category-template.php.svn-base#category_parent == $id ) { $chain .= $before.$category->cat_ID.$after; $chain .= get_category_children($category->cat_ID, $before, $after); } } return $chain; } function get_category_link($category_id) { global $wp_rewrite; $catlink = $wp_rewrite->get_category_permastruct(); if ( empty($catlink) ) { $file = get_option('home') . '/'; $catlink = $file . '?cat=' . $category_id; } else { $category = &get_category($category_id); $category_nicename = $category->category_nicename; if ( $parent = $category->category_parent ) $category_nicename = get_category_parents($parent, false, '/', true) . $category_nicename; $catlink = str_replace('%category%', $category_nicename, $catlink); $catlink = get_option('home') . user_trailingslashit($catlink, 'category'); } return apply_filters('category_link', $catlink, $category_id); } function get_category_parents($id, $link = FALSE, $separator = '/', $nicename = FALSE){ $chain = ''; $parent = &get_category($id); if ( $nicename ) $name = $parent->category_nicename; else $name = $parent->cat_name; if ( $parent->category_parent && ($parent->category_parent != $parent->cat_ID) ) $chain .= get_category_parents($parent->category_parent, $link, $separator, $nicename); if ( $link ) $chain .= 'cat_name) . '">'.$name.'' . $separator; else $chain .= $name.$separator; return $chain; } function get_the_category($id = false) { global $post, $category_cache, $blog_id; $id = (int) $id; if ( !$id ) $id = (int) $post->ID; if ( !isset($category_cache[$blog_id][$id]) ) update_post_category_cache($id); $categories = $category_cache[$blog_id][$id]; if ( !empty($categories) ) usort($categories, '_get_the_category_usort'); else $categories = array(); return $categories; } function _get_the_category_usort($a, $b) { return strcmp($a->category_name, $b->category_name); } function _get_the_category_usort_by_ID($a, $b) { if ( $a->cat_ID > $b->cat_ID ) return 1; elseif ( $a->cat_ID < $b->cat_ID ) return -1; else return 0; } function get_the_category_by_ID($cat_ID) { $cat_ID = (int) $cat_ID; $category = &get_category($cat_ID); return $category->cat_name; } function get_the_category_list($separator = '', $parents='') { global $wp_rewrite; $categories = get_the_category(); if (empty($categories)) return apply_filters('the_category', __('Uncategorized'), $separator, $parents); $rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? 'rel="category tag"' : 'rel="category"'; $thelist = ''; if ( '' == $separator ) { $thelist .= ''; } else { $i = 0; foreach ( $categories as $category ) { if ( 0 < $i ) $thelist .= $separator . ' '; switch ( strtolower($parents) ) { case 'multiple': if ( $category->category_parent ) $thelist .= get_category_parents($category->category_parent, TRUE); $thelist .= 'cat_name) . '" ' . $rel . '>' . $category->cat_name.''; break; case 'single': $thelist .= 'cat_name) . '" ' . $rel . '>'; if ( $category->category_parent ) $thelist .= get_category_parents($category->category_parent, FALSE); $thelist .= "$category->cat_name"; break; case '': default: $thelist .= 'cat_name) . '" ' . $rel . '>' . $category->cat_name.''; } ++$i; } } return apply_filters('the_category', $thelist, $separator, $parents); } function in_category($category) { // Check if the current post is in the given category global $category_cache, $post, $blog_id; if ( isset( $category_cache[$blog_id][$post->ID][$category] ) ) return true; else return false; } function the_category($separator = '', $parents='') { echo get_the_category_list($separator, $parents); } function category_description($category = 0) { global $cat; if ( !$category ) $category = $cat; $category = & get_category($category); return apply_filters('category_description', $category->category_description, $category->cat_ID); } function wp_dropdown_categories($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_option_all' => '', 'show_option_none' => '', 'orderby' => 'ID', 'order' => 'ASC', 'show_last_update' => 0, 'show_count' => 0, 'hide_empty' => 1, 'child_of' => 0, 'exclude' => '', 'echo' => 1, 'selected' => 0, 'hierarchical' => 0, 'name' => 'cat', 'class' => 'postform'); $defaults['selected'] = ( is_category() ) ? get_query_var('cat') : 0; $r = array_merge($defaults, $r); $r['include_last_update_time'] = $r['show_last_update']; extract($r, EXTR_SKIP); $categories = get_categories($r); $output = ''; if ( ! empty($categories) ) { $output = "\n"; } $output = apply_filters('wp_dropdown_cats', $output); if ( $echo ) echo $output; return $output; } function wp_list_categories($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('show_option_all' => '', 'orderby' => 'name', 'order' => 'ASC', 'show_last_update' => 0, 'style' => 'list', 'show_count' => 0, 'hide_empty' => 1, 'use_desc_for_title' => 1, 'child_of' => 0, 'feed' => '', 'feed_image' => '', 'exclude' => '', 'hierarchical' => true, 'title_li' => __('Categories')); $r = array_merge($defaults, $r); if ( !isset($r['pad_counts']) && $r['show_count'] && $r['hierarchical'] ) $r['pad_counts'] = true; if ( isset($r['show_date']) ) $r['include_last_update_time'] = $r['show_date']; extract($r, EXTR_SKIP); $categories = get_categories($r); $output = ''; if ( $title_li && 'list' == $style ) $output = '
  • ' . $r['title_li'] . '
      '; if ( empty($categories) ) { if ( 'list' == $style ) $output .= '
    • ' . __("No categories") . '
    • '; else $output .= __("No categories"); } else { global $wp_query; if( !empty($show_option_all) ) if ('list' == $style ) $output .= '
    • ' . $show_option_all . '
    • '; else $output .= '' . $show_option_all . ''; if ( is_category() ) $r['current_category'] = $wp_query->get_queried_object_id(); if ( $hierarchical ) $depth = 0; // Walk the full depth. else $depth = -1; // Flat. $output .= walk_category_tree($categories, $depth, $r); } if ( $title_li && 'list' == $style ) $output .= '
  • '; echo apply_filters('wp_list_categories', $output); } // // Helper functions // function walk_category_tree() { $walker = new Walker_Category; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } function walk_category_dropdown_tree() { $walker = new Walker_CategoryDropdown; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } ?> 9wordpress/wp-includes/.svn/text-base/classes.php.svn-baseZDpublic_query_vars[] = $qv; } function parse_request($extra_query_vars = '') { global $wp_rewrite; $this->query_vars = array(); if ( is_array($extra_query_vars) ) $this->extra_query_vars = & $extra_query_vars; else if (! empty($extra_query_vars)) parse_str($extra_query_vars, $this->extra_query_vars); // Process PATH_INFO, REQUEST_URI, and 404 for permalinks. // Fetch the rewrite rules. $rewrite = $wp_rewrite->wp_rewrite_rules(); if (! empty($rewrite)) { // If we match a rewrite rule, this will be cleared. $error = '404'; $this->did_permalink = true; if ( isset($_SERVER['PATH_INFO']) ) $pathinfo = $_SERVER['PATH_INFO']; else $pathinfo = ''; $pathinfo_array = explode('?', $pathinfo); $pathinfo = str_replace("%", "%25", $pathinfo_array[0]); $req_uri = $_SERVER['REQUEST_URI']; $req_uri_array = explode('?', $req_uri); $req_uri = $req_uri_array[0]; $self = $_SERVER['PHP_SELF']; $home_path = parse_url(get_option('home')); if ( isset($home_path['path']) ) $home_path = $home_path['path']; else $home_path = ''; $home_path = trim($home_path, '/'); // Trim path info from the end and the leading home path from the // front. For path info requests, this leaves us with the requesting // filename, if any. For 404 requests, this leaves us with the // requested permalink. $req_uri = str_replace($pathinfo, '', rawurldecode($req_uri)); $req_uri = trim($req_uri, '/'); $req_uri = preg_replace("|^$home_path|", '', $req_uri); $req_uri = trim($req_uri, '/'); $pathinfo = trim($pathinfo, '/'); $pathinfo = preg_replace("|^$home_path|", '', $pathinfo); $pathinfo = trim($pathinfo, '/'); $self = trim($self, '/'); $self = preg_replace("|^$home_path|", '', $self); $self = str_replace($home_path, '', $self); $self = trim($self, '/'); // The requested permalink is in $pathinfo for path info requests and // $req_uri for other requests. if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) { $request = $pathinfo; } else { // If the request uri is the index, blank it out so that we don't try to match it against a rule. if ( $req_uri == $wp_rewrite->index ) $req_uri = ''; $request = $req_uri; } $this->request = $request; // Look for matches. $request_match = $request; foreach ($rewrite as $match => $query) { // If the requesting file is the anchor of the match, prepend it // to the path info. if ((! empty($req_uri)) && (strpos($match, $req_uri) == 0) && ($req_uri != $request)) { $request_match = $req_uri . '/' . $request; } if (preg_match("!^$match!", $request_match, $matches) || preg_match("!^$match!", urldecode($request_match), $matches)) { // Got a match. $this->matched_rule = $match; // Trim the query of everything up to the '?'. $query = preg_replace("!^.+\?!", '', $query); // Substitute the substring matches into the query. eval("\$query = \"$query\";"); $this->matched_query = $query; // Parse the query. parse_str($query, $perma_query_vars); // If we're processing a 404 request, clear the error var // since we found something. if (isset($_GET['error'])) unset($_GET['error']); if (isset($error)) unset($error); break; } } // If req_uri is empty or if it is a request for ourself, unset error. if (empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') != false) { if (isset($_GET['error'])) unset($_GET['error']); if (isset($error)) unset($error); if (isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') != false) unset($perma_query_vars); $this->did_permalink = false; } } $this->public_query_vars = apply_filters('query_vars', $this->public_query_vars); for ($i=0; $ipublic_query_vars); $i += 1) { $wpvar = $this->public_query_vars[$i]; if (isset($this->extra_query_vars[$wpvar])) $this->query_vars[$wpvar] = $this->extra_query_vars[$wpvar]; elseif (isset($GLOBALS[$wpvar])) $this->query_vars[$wpvar] = $GLOBALS[$wpvar]; elseif (!empty($_POST[$wpvar])) $this->query_vars[$wpvar] = $_POST[$wpvar]; elseif (!empty($_GET[$wpvar])) $this->query_vars[$wpvar] = $_GET[$wpvar]; elseif (!empty($perma_query_vars[$wpvar])) $this->query_vars[$wpvar] = $perma_query_vars[$wpvar]; if ( !empty( $this->query_vars[$wpvar] ) ) $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar]; } foreach ($this->private_query_vars as $var) { if (isset($this->extra_query_vars[$var])) $this->query_vars[$var] = $this->extra_query_vars[$var]; elseif (isset($GLOBALS[$var]) && '' != $GLOBALS[$var]) $this->query_vars[$var] = $GLOBALS[$var]; } if ( isset($error) ) $this->query_vars['error'] = $error; $this->query_vars = apply_filters('request', $this->query_vars); do_action_ref_array('parse_request', array(&$this)); } function send_headers() { @header('X-Pingback: '. get_bloginfo('pingback_url')); if ( is_user_logged_in() ) nocache_headers(); if ( !empty($this->query_vars['error']) && '404' == $this->query_vars['error'] ) { status_header( 404 ); if ( !is_user_logged_in() ) nocache_headers(); @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); } else if ( empty($this->query_vars['feed']) ) { @header('Content-type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); } else { // We're showing a feed, so WP is indeed the only thing that last changed if ( $this->query_vars['withcomments'] || ( !$this->query_vars['withoutcomments'] && ( $this->query_vars['p'] || $this->query_vars['name'] || $this->query_vars['page_id'] || $this->query_vars['pagename'] || $this->query_vars['attachment'] || $this->query_vars['attachment_id'] ) ) ) $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastcommentmodified('GMT'), 0).' GMT'; else $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; $wp_etag = '"' . md5($wp_last_modified) . '"'; @header("Last-Modified: $wp_last_modified"); @header("ETag: $wp_etag"); // Support for Conditional GET if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) $client_etag = stripslashes(stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])); else $client_etag = false; $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']); // If string is empty, return 0. If not, attempt to parse into a timestamp $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; // Make a timestamp for our most recent modification... $wp_modified_timestamp = strtotime($wp_last_modified); if ( ($client_last_modified && $client_etag) ? (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { status_header( 304 ); exit; } } do_action_ref_array('send_headers', array(&$this)); } function build_query_string() { $this->query_string = ''; foreach (array_keys($this->query_vars) as $wpvar) { if ( '' != $this->query_vars[$wpvar] ) { $this->query_string .= (strlen($this->query_string) < 1) ? '' : '&'; if ( !is_scalar($this->query_vars[$wpvar]) ) // Discard non-scalars. continue; $this->query_string .= $wpvar . '=' . rawurlencode($this->query_vars[$wpvar]); } } // query_string filter deprecated. Use request filter instead. global $wp_filter; if ( isset($wp_filter['query_string']) ) { // Don't bother filtering and parsing if no plugins are hooked in. $this->query_string = apply_filters('query_string', $this->query_string); parse_str($this->query_string, $this->query_vars); } } function register_globals() { global $wp_query; // Extract updated query vars back into global namespace. foreach ($wp_query->query_vars as $key => $value) { $GLOBALS[$key] = $value; } $GLOBALS['query_string'] = & $this->query_string; $GLOBALS['posts'] = & $wp_query->posts; $GLOBALS['post'] = & $wp_query->post; $GLOBALS['request'] = & $wp_query->request; if ( is_single() || is_page() ) { $GLOBALS['more'] = 1; $GLOBALS['single'] = 1; } } function init() { wp_get_current_user(); } function query_posts() { global $wp_the_query; $this->build_query_string(); $wp_the_query->query($this->query_vars); } function handle_404() { global $wp_query; // Issue a 404 if a permalink request doesn't match any posts. Don't // issue a 404 if one was already issued, if the request was a search, // or if the request was a regular query string request rather than a // permalink request. if ( (0 == count($wp_query->posts)) && !is_404() && !is_search() && ( $this->did_permalink || (!empty($_SERVER['QUERY_STRING']) && (false == strpos($_SERVER['REQUEST_URI'], '?'))) ) ) { $wp_query->set_404(); status_header( 404 ); nocache_headers(); } elseif( is_404() != true ) { status_header( 200 ); } } function main($query_args = '') { $this->init(); $this->parse_request($query_args); $this->send_headers(); $this->query_posts(); $this->handle_404(); $this->register_globals(); do_action_ref_array('wp', array(&$this)); } function WP() { // Empty. } } class WP_Error { var $errors = array(); var $error_data = array(); function WP_Error($code = '', $message = '', $data = '') { if ( empty($code) ) return; $this->errors[$code][] = $message; if ( ! empty($data) ) $this->error_data[$code] = $data; } function get_error_codes() { if ( empty($this->errors) ) return array(); return array_keys($this->errors); } function get_error_code() { $codes = $this->get_error_codes(); if ( empty($codes) ) return ''; return $codes[0]; } function get_error_messages($code = '') { // Return all messages if no code specified. if ( empty($code) ) { $all_messages = array(); foreach ( $this->errors as $code => $messages ) $all_messages = array_merge($all_messages, $messages); return $all_messages; } if ( isset($this->errors[$code]) ) return $this->errors[$code]; else return array(); } function get_error_message($code = '') { if ( empty($code) ) $code = $this->get_error_code(); $messages = $this->get_error_messages($code); if ( empty($messages) ) return ''; return $messages[0]; } function get_error_data($code = '') { if ( empty($code) ) $code = $this->get_error_code(); if ( isset($this->error_data[$code]) ) return $this->error_data[$code]; return null; } function add($code, $message, $data = '') { $this->errors[$code][] = $message; if ( ! empty($data) ) $this->error_data[$code] = $data; } function add_data($data, $code = '') { if ( empty($code) ) $code = $this->get_error_code(); $this->error_data[$code] = $data; } } function is_wp_error($thing) { if ( is_object($thing) && is_a($thing, 'WP_Error') ) return true; return false; } // A class for displaying various tree-like structures. Extend the Walker class to use it, see examples at the bottom class Walker { var $tree_type; var $db_fields; //abstract callbacks function start_lvl($output) { return $output; } function end_lvl($output) { return $output; } function start_el($output) { return $output; } function end_el($output) { return $output; } function walk($elements, $to_depth) { $args = array_slice(func_get_args(), 2); $parents = array(); $depth = 1; $previous_element = ''; $output = ''; //padding at the end $last_element->post_parent = 0; $last_element->post_id = 0; $elements[] = $last_element; $id_field = $this->db_fields['id']; $parent_field = $this->db_fields['parent']; $flat = ($to_depth == -1) ? true : false; foreach ( $elements as $element ) { // If flat, start and end the element and skip the level checks. if ( $flat) { // Start the element. if ( isset($element->$id_field) && $element->$id_field != 0 ) { $cb_args = array_merge( array($output, $element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'start_el'), $cb_args); } // End the element. if ( isset($element->$id_field) && $element->$id_field != 0 ) { $cb_args = array_merge( array($output, $element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } continue; } // Walk the tree. if ( !empty($previous_element) && ($element->$parent_field == $previous_element->$id_field) ) { // Previous element is my parent. Descend a level. array_unshift($parents, $previous_element); if ( !$to_depth || ($depth < $to_depth) ) { //only descend if we're below $to_depth $cb_args = array_merge( array($output, $depth), $args); $output = call_user_func_array(array(&$this, 'start_lvl'), $cb_args); } else if ( $to_depth && $depth == $to_depth ) { // If we've reached depth, end the previous element. $cb_args = array_merge( array($output, $previous_element, $depth), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } $depth++; //always do this so when we start the element further down, we know where we are } else if ( $element->$parent_field == $previous_element->$parent_field) { // On the same level as previous element. if ( !$to_depth || ($depth <= $to_depth) ) { $cb_args = array_merge( array($output, $previous_element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } } else if ( $depth > 1 ) { // Ascend one or more levels. if ( !$to_depth || ($depth <= $to_depth) ) { $cb_args = array_merge( array($output, $previous_element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } while ( $parent = array_shift($parents) ) { $depth--; if ( !$to_depth || ($depth < $to_depth) ) { $cb_args = array_merge( array($output, $depth), $args); $output = call_user_func_array(array(&$this, 'end_lvl'), $cb_args); $cb_args = array_merge( array($output, $parent, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } if ( $element->$parent_field == $parents[0]->$id_field ) { break; } } } else if ( !empty($previous_element) ) { // Close off previous element. if ( !$to_depth || ($depth <= $to_depth) ) { $cb_args = array_merge( array($output, $previous_element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'end_el'), $cb_args); } } // Start the element. if ( !$to_depth || ($depth <= $to_depth) ) { if ( $element->$id_field != 0 ) { $cb_args = array_merge( array($output, $element, $depth - 1), $args); $output = call_user_func_array(array(&$this, 'start_el'), $cb_args); } } $previous_element = $element; } return $output; } } class Walker_Page extends Walker { var $tree_type = 'page'; var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this function start_lvl($output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent
      \n"; return $output; } function end_lvl($output, $depth) { $indent = str_repeat("\t", $depth); $output .= "$indent
    \n"; return $output; } function start_el($output, $page, $depth, $current_page, $args) { if ( $depth ) $indent = str_repeat("\t", $depth); extract($args, EXTR_SKIP); $css_class = 'page_item'; $_current_page = get_page( $current_page ); if ( $page->ID == $current_page ) $css_class .= ' current_page_item'; elseif ( $_current_page && $page->ID == $_current_page->post_parent ) $css_class .= ' current_page_parent'; $output .= $indent . '
  • ' . apply_filters('the_title', $page->post_title) . ''; if ( !empty($show_date) ) { if ( 'modified' == $show_date ) $time = $page->post_modified; else $time = $page->post_date; $output .= " " . mysql2date($date_format, $time); } return $output; } function end_el($output, $page, $depth) { $output .= "
  • \n"; return $output; } } class Walker_PageDropdown extends Walker { var $tree_type = 'page'; var $db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); //TODO: decouple this function start_el($output, $page, $depth, $args) { $pad = str_repeat(' ', $depth * 3); $output .= "\t\n"; return $output; } } class Walker_Category extends Walker { var $tree_type = 'category'; var $db_fields = array ('parent' => 'category_parent', 'id' => 'cat_ID'); //TODO: decouple this function start_lvl($output, $depth, $args) { if ( 'list' != $args['style'] ) return $output; $indent = str_repeat("\t", $depth); $output .= "$indent
      \n"; return $output; } function end_lvl($output, $depth, $args) { if ( 'list' != $args['style'] ) return $output; $indent = str_repeat("\t", $depth); $output .= "$indent
    \n"; return $output; } function start_el($output, $category, $depth, $args) { extract($args); $cat_name = attribute_escape( $category->cat_name); $cat_name = apply_filters( 'list_cats', $cat_name, $category ); $link = 'category_description) ) $link .= 'title="' . sprintf(__( 'View all posts filed under %s' ), $cat_name) . '"'; else $link .= 'title="' . attribute_escape( apply_filters( 'category_description', $category->category_description, $category )) . '"'; $link .= '>'; $link .= $cat_name . ''; if ( (! empty($feed_image)) || (! empty($feed)) ) { $link .= ' '; if ( empty($feed_image) ) $link .= '('; $link .= ''; $link .= ''; if ( empty($feed_image) ) $link .= ')'; } if ( isset($show_count) && $show_count ) $link .= ' (' . intval($category->category_count) . ')'; if ( isset($show_date) && $show_date ) { $link .= ' ' . gmdate('Y-m-d', $category->last_update_timestamp); } if ( $current_category ) $_current_category = get_category( $current_category ); if ( 'list' == $args['style'] ) { $output .= "\tcat_ID == $current_category) ) $output .= ' class="current-cat"'; elseif ( $_current_category && ($category->cat_ID == $_current_category->category_parent) ) $output .= ' class="current-cat-parent"'; $output .= ">$link\n"; } else { $output .= "\t$link
    \n"; } return $output; } function end_el($output, $page, $depth, $args) { if ( 'list' != $args['style'] ) return $output; $output .= "\n"; return $output; } } class Walker_CategoryDropdown extends Walker { var $tree_type = 'category'; var $db_fields = array ('parent' => 'category_parent', 'id' => 'cat_ID'); //TODO: decouple this function start_el($output, $category, $depth, $args) { $pad = str_repeat(' ', $depth * 3); $cat_name = apply_filters('list_cats', $category->cat_name, $category); $output .= "\t\n"; return $output; } } class WP_Ajax_Response { var $responses = array(); function WP_Ajax_Response( $args = '' ) { if ( !empty($args) ) $this->add($args); } // a WP_Error object can be passed in 'id' or 'data' function add( $args = '' ) { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('what' => 'object', 'action' => false, 'id' => '0', 'old_id' => false, 'data' => '', 'supplemental' => array()); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); if ( is_wp_error($id) ) { $data = $id; $id = 0; } $response = ''; if ( is_wp_error($data) ) foreach ( $data->get_error_codes() as $code ) $response .= "get_error_message($code) . "]]>"; else $response = ""; $s = ''; if ( (array) $supplemental ) foreach ( $supplemental as $k => $v ) $s .= "<$k>"; if ( false == $action ) $action = $_POST['action']; $x = ''; $x .= ""; // The action attribute in the xml output is formatted like a nonce action $x .= "<$what id='$id'" . ( false != $old_id ? "old_id='$old_id'>" : '>' ); $x .= $response; $x .= $s; $x .= ""; $x .= ""; $this->responses[] = $x; return $x; } function send() { header('Content-type: text/xml'); echo ""; foreach ( $this->responses as $response ) echo $response; echo ''; die(); } } ?> ;wordpress/wp-includes/.svn/text-base/class-IXR.php.svn-basekdata = $data; if (!$type) { $type = $this->calculateType(); } $this->type = $type; if ($type == 'struct') { /* Turn all the values in the array in to new IXR_Value objects */ foreach ($this->data as $key => $value) { $this->data[$key] = new IXR_Value($value); } } if ($type == 'array') { for ($i = 0, $j = count($this->data); $i < $j; $i++) { $this->data[$i] = new IXR_Value($this->data[$i]); } } } function calculateType() { if ($this->data == true || $this->data == false) { return 'boolean'; } if (is_integer($this->data)) { return 'int'; } if (is_double($this->data)) { return 'double'; } // Deal with IXR object types base64 and date if (is_object($this->data) && is_a($this->data, 'IXR_Date')) { return 'date'; } if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) { return 'base64'; } // If it is a normal PHP object convert it in to a struct if (is_object($this->data)) { $this->data = get_object_vars($this->data); return 'struct'; } if (!is_array($this->data)) { return 'string'; } /* We have an array - is it an array or a struct ? */ if ($this->isStruct($this->data)) { return 'struct'; } else { return 'array'; } } function getXml() { /* Return XML for this value */ switch ($this->type) { case 'boolean': return ''.(($this->data) ? '1' : '0').''; break; case 'int': return ''.$this->data.''; break; case 'double': return ''.$this->data.''; break; case 'string': return ''.htmlspecialchars($this->data).''; break; case 'array': $return = ''."\n"; foreach ($this->data as $item) { $return .= ' '.$item->getXml()."\n"; } $return .= ''; return $return; break; case 'struct': $return = ''."\n"; foreach ($this->data as $name => $value) { $name = htmlspecialchars($name); $return .= " $name"; $return .= $value->getXml()."\n"; } $return .= ''; return $return; break; case 'date': case 'base64': return $this->data->getXml(); break; } return false; } function isStruct($array) { /* Nasty function to check if an array is a struct or not */ $expected = 0; foreach ($array as $key => $value) { if ((string)$key != (string)$expected) { return true; } $expected++; } return false; } } class IXR_Message { var $message; var $messageType; // methodCall / methodResponse / fault var $faultCode; var $faultString; var $methodName; var $params; // Current variable stacks var $_arraystructs = array(); // The stack used to keep track of the current array/struct var $_arraystructstypes = array(); // Stack keeping track of if things are structs or array var $_currentStructName = array(); // A stack as well var $_param; var $_value; var $_currentTag; var $_currentTagContents; // The XML parser var $_parser; function IXR_Message ($message) { $this->message = $message; } function parse() { // first remove the XML declaration $this->message = preg_replace('/<\?xml(.*)?\?'.'>/', '', $this->message); if (trim($this->message) == '') { return false; } $this->_parser = xml_parser_create(); // Set XML parser to take the case of tags in to account xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); // Set XML parser callback functions xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, 'tag_open', 'tag_close'); xml_set_character_data_handler($this->_parser, 'cdata'); if (!xml_parse($this->_parser, $this->message)) { /* die(sprintf('XML error: %s at line %d', xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser))); */ return false; } xml_parser_free($this->_parser); // Grab the error messages, if any if ($this->messageType == 'fault') { $this->faultCode = $this->params[0]['faultCode']; $this->faultString = $this->params[0]['faultString']; } return true; } function tag_open($parser, $tag, $attr) { $this->_currentTagContents = ''; $this->currentTag = $tag; switch($tag) { case 'methodCall': case 'methodResponse': case 'fault': $this->messageType = $tag; break; /* Deal with stacks of arrays and structs */ case 'data': // data is to all intents and puposes more interesting than array $this->_arraystructstypes[] = 'array'; $this->_arraystructs[] = array(); break; case 'struct': $this->_arraystructstypes[] = 'struct'; $this->_arraystructs[] = array(); break; } } function cdata($parser, $cdata) { $this->_currentTagContents .= $cdata; } function tag_close($parser, $tag) { $valueFlag = false; switch($tag) { case 'int': case 'i4': $value = (int) trim($this->_currentTagContents); $valueFlag = true; break; case 'double': $value = (double) trim($this->_currentTagContents); $valueFlag = true; break; case 'string': $value = $this->_currentTagContents; $valueFlag = true; break; case 'dateTime.iso8601': $value = new IXR_Date(trim($this->_currentTagContents)); // $value = $iso->getTimestamp(); $valueFlag = true; break; case 'value': // "If no type is indicated, the type is string." if (trim($this->_currentTagContents) != '') { $value = (string)$this->_currentTagContents; $valueFlag = true; } break; case 'boolean': $value = (boolean) trim($this->_currentTagContents); $valueFlag = true; break; case 'base64': $value = base64_decode( trim( $this->_currentTagContents ) ); $valueFlag = true; break; /* Deal with stacks of arrays and structs */ case 'data': case 'struct': $value = array_pop($this->_arraystructs); array_pop($this->_arraystructstypes); $valueFlag = true; break; case 'member': array_pop($this->_currentStructName); break; case 'name': $this->_currentStructName[] = trim($this->_currentTagContents); break; case 'methodName': $this->methodName = trim($this->_currentTagContents); break; } if ($valueFlag) { if (count($this->_arraystructs) > 0) { // Add value to struct or array if ($this->_arraystructstypes[count($this->_arraystructstypes)-1] == 'struct') { // Add to struct $this->_arraystructs[count($this->_arraystructs)-1][$this->_currentStructName[count($this->_currentStructName)-1]] = $value; } else { // Add to array $this->_arraystructs[count($this->_arraystructs)-1][] = $value; } } else { // Just add as a paramater $this->params[] = $value; } } $this->_currentTagContents = ''; } } class IXR_Server { var $data; var $callbacks = array(); var $message; var $capabilities; function IXR_Server($callbacks = false, $data = false) { $this->setCapabilities(); if ($callbacks) { $this->callbacks = $callbacks; } $this->setCallbacks(); $this->serve($data); } function serve($data = false) { if (!$data) { global $HTTP_RAW_POST_DATA; if (!$HTTP_RAW_POST_DATA) { die('XML-RPC server accepts POST requests only.'); } $data = $HTTP_RAW_POST_DATA; } $this->message = new IXR_Message($data); if (!$this->message->parse()) { $this->error(-32700, 'parse error. not well formed'); } if ($this->message->messageType != 'methodCall') { $this->error(-32600, 'server error. invalid xml-rpc. not conforming to spec. Request must be a methodCall'); } $result = $this->call($this->message->methodName, $this->message->params); // Is the result an error? if (is_a($result, 'IXR_Error')) { $this->error($result); } // Encode the result $r = new IXR_Value($result); $resultxml = $r->getXml(); // Create the XML $xml = << $resultxml EOD; // Send it $this->output($xml); } function call($methodname, $args) { if (!$this->hasMethod($methodname)) { return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.'); } $method = $this->callbacks[$methodname]; // Perform the callback and send the response if (count($args) == 1) { // If only one paramater just send that instead of the whole array $args = $args[0]; } // Are we dealing with a function or a method? if (substr($method, 0, 5) == 'this:') { // It's a class method - check it exists $method = substr($method, 5); if (!method_exists($this, $method)) { return new IXR_Error(-32601, 'server error. requested class method "'.$method.'" does not exist.'); } // Call the method $result = $this->$method($args); } else { // It's a function - does it exist? if (is_array($method)) { if (!method_exists($method[0], $method[1])) { return new IXR_Error(-32601, 'server error. requested object method "'.$method[1].'" does not exist.'); } } else if (!function_exists($method)) { return new IXR_Error(-32601, 'server error. requested function "'.$method.'" does not exist.'); } // Call the function $result = call_user_func($method, $args); } return $result; } function error($error, $message = false) { // Accepts either an error object or an error code and message if ($message && !is_object($error)) { $error = new IXR_Error($error, $message); } $this->output($error->getXml()); } function output($xml) { $xml = ''."\n".$xml; $length = strlen($xml); header('Connection: close'); header('Content-Length: '.$length); header('Content-Type: text/xml'); header('Date: '.date('r')); echo $xml; exit; } function hasMethod($method) { return in_array($method, array_keys($this->callbacks)); } function setCapabilities() { // Initialises capabilities array $this->capabilities = array( 'xmlrpc' => array( 'specUrl' => 'http://www.xmlrpc.com/spec', 'specVersion' => 1 ), 'faults_interop' => array( 'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php', 'specVersion' => 20010516 ), 'system.multicall' => array( 'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208', 'specVersion' => 1 ), ); } function getCapabilities($args) { return $this->capabilities; } function setCallbacks() { $this->callbacks['system.getCapabilities'] = 'this:getCapabilities'; $this->callbacks['system.listMethods'] = 'this:listMethods'; $this->callbacks['system.multicall'] = 'this:multiCall'; } function listMethods($args) { // Returns a list of methods - uses array_reverse to ensure user defined // methods are listed before server defined methods return array_reverse(array_keys($this->callbacks)); } function multiCall($methodcalls) { // See http://www.xmlrpc.com/discuss/msgReader$1208 $return = array(); foreach ($methodcalls as $call) { $method = $call['methodName']; $params = $call['params']; if ($method == 'system.multicall') { $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden'); } else { $result = $this->call($method, $params); } if (is_a($result, 'IXR_Error')) { $return[] = array( 'faultCode' => $result->code, 'faultString' => $result->message ); } else { $return[] = array($result); } } return $return; } } class IXR_Request { var $method; var $args; var $xml; function IXR_Request($method, $args) { $this->method = $method; $this->args = $args; $this->xml = << {$this->method} EOD; foreach ($this->args as $arg) { $this->xml .= ''; $v = new IXR_Value($arg); $this->xml .= $v->getXml(); $this->xml .= "\n"; } $this->xml .= ''; } function getLength() { return strlen($this->xml); } function getXml() { return $this->xml; } } class IXR_Client { var $server; var $port; var $path; var $useragent; var $response; var $message = false; var $debug = false; var $timeout; // Storage place for an error message var $error = false; function IXR_Client($server, $path = false, $port = 80, $timeout = false) { if (!$path) { // Assume we have been given a URL instead $bits = parse_url($server); $this->server = $bits['host']; $this->port = isset($bits['port']) ? $bits['port'] : 80; $this->path = isset($bits['path']) ? $bits['path'] : '/'; // Make absolutely sure we have a path if (!$this->path) { $this->path = '/'; } } else { $this->server = $server; $this->path = $path; $this->port = $port; } $this->useragent = 'Incutio XML-RPC'; $this->timeout = $timeout; } function query() { $args = func_get_args(); $method = array_shift($args); $request = new IXR_Request($method, $args); $length = $request->getLength(); $xml = $request->getXml(); $r = "\r\n"; $request = "POST {$this->path} HTTP/1.0$r"; $request .= "Host: {$this->server}$r"; $request .= "Content-Type: text/xml$r"; $request .= "User-Agent: {$this->useragent}$r"; $request .= "Content-length: {$length}$r$r"; $request .= $xml; // Now send the request if ($this->debug) { echo '
    '.htmlspecialchars($request)."\n
    \n\n"; } if ($this->timeout) { $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout); } else { $fp = @fsockopen($this->server, $this->port, $errno, $errstr); } if (!$fp) { $this->error = new IXR_Error(-32300, "transport error - could not open socket: $errno $errstr"); return false; } fputs($fp, $request); $contents = ''; $gotFirstLine = false; $gettingHeaders = true; while (!feof($fp)) { $line = fgets($fp, 4096); if (!$gotFirstLine) { // Check line for '200' if (strstr($line, '200') == false) { $this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200'); return false; } $gotFirstLine = true; } if (trim($line) == '') { $gettingHeaders = false; } if (!$gettingHeaders) { $contents .= trim($line)."\n"; } } if ($this->debug) { echo '
    '.htmlspecialchars($contents)."\n
    \n\n"; } // Now parse what we've got back $this->message = new IXR_Message($contents); if (!$this->message->parse()) { // XML error $this->error = new IXR_Error(-32700, 'parse error. not well formed'); return false; } // Is the message a fault? if ($this->message->messageType == 'fault') { $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString); return false; } // Message must be OK return true; } function getResponse() { // methodResponses can only have one param - return that return $this->message->params[0]; } function isError() { return (is_object($this->error)); } function getErrorCode() { return $this->error->code; } function getErrorMessage() { return $this->error->message; } } class IXR_Error { var $code; var $message; function IXR_Error($code, $message) { $this->code = $code; $this->message = $message; } function getXml() { $xml = << faultCode {$this->code} faultString {$this->message} EOD; return $xml; } } class IXR_Date { var $year; var $month; var $day; var $hour; var $minute; var $second; function IXR_Date($time) { // $time can be a PHP timestamp or an ISO one if (is_numeric($time)) { $this->parseTimestamp($time); } else { $this->parseIso($time); } } function parseTimestamp($timestamp) { $this->year = date('Y', $timestamp); $this->month = date('m', $timestamp); $this->day = date('d', $timestamp); $this->hour = date('H', $timestamp); $this->minute = date('i', $timestamp); $this->second = date('s', $timestamp); } function parseIso($iso) { $this->year = substr($iso, 0, 4); $this->month = substr($iso, 4, 2); $this->day = substr($iso, 6, 2); $this->hour = substr($iso, 9, 2); $this->minute = substr($iso, 12, 2); $this->second = substr($iso, 15, 2); $this->timezone = substr($iso, 17); } function getIso() { return $this->year.$this->month.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second.$this->timezone; } function getXml() { return ''.$this->getIso().''; } function getTimestamp() { return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year); } } class IXR_Base64 { var $data; function IXR_Base64($data) { $this->data = $data; } function getXml() { return ''.base64_encode($this->data).''; } } class IXR_IntrospectionServer extends IXR_Server { var $signatures; var $help; function IXR_IntrospectionServer() { $this->setCallbacks(); $this->setCapabilities(); $this->capabilities['introspection'] = array( 'specUrl' => 'http://xmlrpc.usefulinc.com/doc/reserved.html', 'specVersion' => 1 ); $this->addCallback( 'system.methodSignature', 'this:methodSignature', array('array', 'string'), 'Returns an array describing the return type and required parameters of a method' ); $this->addCallback( 'system.getCapabilities', 'this:getCapabilities', array('struct'), 'Returns a struct describing the XML-RPC specifications supported by this server' ); $this->addCallback( 'system.listMethods', 'this:listMethods', array('array'), 'Returns an array of available methods on this server' ); $this->addCallback( 'system.methodHelp', 'this:methodHelp', array('string', 'string'), 'Returns a documentation string for the specified method' ); } function addCallback($method, $callback, $args, $help) { $this->callbacks[$method] = $callback; $this->signatures[$method] = $args; $this->help[$method] = $help; } function call($methodname, $args) { // Make sure it's in an array if ($args && !is_array($args)) { $args = array($args); } // Over-rides default call method, adds signature check if (!$this->hasMethod($methodname)) { return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.'); } $method = $this->callbacks[$methodname]; $signature = $this->signatures[$methodname]; $returnType = array_shift($signature); // Check the number of arguments if (count($args) != count($signature)) { return new IXR_Error(-32602, 'server error. wrong number of method parameters'); } // Check the argument types $ok = true; $argsbackup = $args; for ($i = 0, $j = count($args); $i < $j; $i++) { $arg = array_shift($args); $type = array_shift($signature); switch ($type) { case 'int': case 'i4': if (is_array($arg) || !is_int($arg)) { $ok = false; } break; case 'base64': case 'string': if (!is_string($arg)) { $ok = false; } break; case 'boolean': if ($arg != false && $arg != true) { $ok = false; } break; case 'float': case 'double': if (!is_float($arg)) { $ok = false; } break; case 'date': case 'dateTime.iso8601': if (!is_a($arg, 'IXR_Date')) { $ok = false; } break; } if (!$ok) { return new IXR_Error(-32602, 'server error. invalid method parameters'); } } // It passed the test - run the "real" method call return parent::call($methodname, $argsbackup); } function methodSignature($method) { if (!$this->hasMethod($method)) { return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.'); } // We should be returning an array of types $types = $this->signatures[$method]; $return = array(); foreach ($types as $type) { switch ($type) { case 'string': $return[] = 'string'; break; case 'int': case 'i4': $return[] = 42; break; case 'double': $return[] = 3.1415; break; case 'dateTime.iso8601': $return[] = new IXR_Date(time()); break; case 'boolean': $return[] = true; break; case 'base64': $return[] = new IXR_Base64('base64'); break; case 'array': $return[] = array('array'); break; case 'struct': $return[] = array('struct' => 'struct'); break; } } return $return; } function methodHelp($method) { return $this->help[$method]; } } class IXR_ClientMulticall extends IXR_Client { var $calls = array(); function IXR_ClientMulticall($server, $path = false, $port = 80) { parent::IXR_Client($server, $path, $port); $this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)'; } function addCall() { $args = func_get_args(); $methodName = array_shift($args); $struct = array( 'methodName' => $methodName, 'params' => $args ); $this->calls[] = $struct; } function query() { // Prepare multicall, then call the parent::query() method return parent::query('system.multicall', $this->calls); } } ?>Awordpress/wp-includes/.svn/text-base/class-phpmailer.php.svn-basegContentType = "text/html"; else $this->ContentType = "text/plain"; } /** * Sets Mailer to send message using SMTP. * @return void */ function IsSMTP() { $this->Mailer = "smtp"; } /** * Sets Mailer to send message using PHP mail() function. * @return void */ function IsMail() { $this->Mailer = "mail"; } /** * Sets Mailer to send message using the $Sendmail program. * @return void */ function IsSendmail() { $this->Mailer = "sendmail"; } /** * Sets Mailer to send message using the qmail MTA. * @return void */ function IsQmail() { $this->Sendmail = "/var/qmail/bin/sendmail"; $this->Mailer = "sendmail"; } ///////////////////////////////////////////////// // RECIPIENT METHODS ///////////////////////////////////////////////// /** * Adds a "To" address. * @param string $address * @param string $name * @return void */ function AddAddress($address, $name = "") { $cur = count($this->to); $this->to[$cur][0] = trim($address); $this->to[$cur][1] = $name; } /** * Adds a "Cc" address. Note: this function works * with the SMTP mailer on win32, not with the "mail" * mailer. * @param string $address * @param string $name * @return void */ function AddCC($address, $name = "") { $cur = count($this->cc); $this->cc[$cur][0] = trim($address); $this->cc[$cur][1] = $name; } /** * Adds a "Bcc" address. Note: this function works * with the SMTP mailer on win32, not with the "mail" * mailer. * @param string $address * @param string $name * @return void */ function AddBCC($address, $name = "") { $cur = count($this->bcc); $this->bcc[$cur][0] = trim($address); $this->bcc[$cur][1] = $name; } /** * Adds a "Reply-to" address. * @param string $address * @param string $name * @return void */ function AddReplyTo($address, $name = "") { $cur = count($this->ReplyTo); $this->ReplyTo[$cur][0] = trim($address); $this->ReplyTo[$cur][1] = $name; } ///////////////////////////////////////////////// // MAIL SENDING METHODS ///////////////////////////////////////////////// /** * Creates message and assigns Mailer. If the message is * not sent successfully then it returns false. Use the ErrorInfo * variable to view description of the error. * @return bool */ function Send() { $header = ""; $body = ""; $result = true; if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { $this->SetError($this->Lang("provide_address")); return false; } // Set whether the message is multipart/alternative if(!empty($this->AltBody)) $this->ContentType = "multipart/alternative"; $this->error_count = 0; // reset errors $this->SetMessageType(); $header .= $this->CreateHeader(); $body = $this->CreateBody(); if($body == "") { return false; } // Choose the mailer switch($this->Mailer) { case "sendmail": $result = $this->SendmailSend($header, $body); break; case "mail": $result = $this->MailSend($header, $body); break; case "smtp": $result = $this->SmtpSend($header, $body); break; default: $this->SetError($this->Mailer . $this->Lang("mailer_not_supported")); $result = false; break; } return $result; } /** * Sends mail using the $Sendmail program. * @access private * @return bool */ function SendmailSend($header, $body) { if ($this->Sender != "") $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, escapeshellarg($this->Sender)); else $sendmail = sprintf("%s -oi -t", $this->Sendmail); if(!@$mail = popen($sendmail, "w")) { $this->SetError($this->Lang("execute") . $this->Sendmail); return false; } fputs($mail, $header); fputs($mail, $body); $result = pclose($mail) >> 8 & 0xFF; if($result != 0) { $this->SetError($this->Lang("execute") . $this->Sendmail); return false; } return true; } /** * Sends mail using the PHP mail() function. * @access private * @return bool */ function MailSend($header, $body) { $to = ""; for($i = 0; $i < count($this->to); $i++) { if($i != 0) { $to .= ", "; } $to .= $this->to[$i][0]; } if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1) { $old_from = ini_get("sendmail_from"); ini_set("sendmail_from", $this->Sender); $params = sprintf("-oi -f %s", $this->Sender); $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header, $params); } else $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header); if (isset($old_from)) ini_set("sendmail_from", $old_from); if(!$rt) { $this->SetError($this->Lang("instantiate")); return false; } return true; } /** * Sends mail via SMTP using PhpSMTP (Author: * Chris Ryan). Returns bool. Returns false if there is a * bad MAIL FROM, RCPT, or DATA input. * @access private * @return bool */ function SmtpSend($header, $body) { include_once($this->PluginDir . "class.smtp.php"); $error = ""; $bad_rcpt = array(); if(!$this->SmtpConnect()) return false; $smtp_from = ($this->Sender == "") ? $this->From : $this->Sender; if(!$this->smtp->Mail($smtp_from)) { $error = $this->Lang("from_failed") . $smtp_from; $this->SetError($error); $this->smtp->Reset(); return false; } // Attempt to send attach all recipients for($i = 0; $i < count($this->to); $i++) { if(!$this->smtp->Recipient($this->to[$i][0])) $bad_rcpt[] = $this->to[$i][0]; } for($i = 0; $i < count($this->cc); $i++) { if(!$this->smtp->Recipient($this->cc[$i][0])) $bad_rcpt[] = $this->cc[$i][0]; } for($i = 0; $i < count($this->bcc); $i++) { if(!$this->smtp->Recipient($this->bcc[$i][0])) $bad_rcpt[] = $this->bcc[$i][0]; } if(count($bad_rcpt) > 0) // Create error message { for($i = 0; $i < count($bad_rcpt); $i++) { if($i != 0) { $error .= ", "; } $error .= $bad_rcpt[$i]; } $error = $this->Lang("recipients_failed") . $error; $this->SetError($error); $this->smtp->Reset(); return false; } if(!$this->smtp->Data($header . $body)) { $this->SetError($this->Lang("data_not_accepted")); $this->smtp->Reset(); return false; } if($this->SMTPKeepAlive == true) $this->smtp->Reset(); else $this->SmtpClose(); return true; } /** * Initiates a connection to an SMTP server. Returns false if the * operation failed. * @access private * @return bool */ function SmtpConnect() { if($this->smtp == NULL) { $this->smtp = new SMTP(); } $this->smtp->do_debug = $this->SMTPDebug; $hosts = explode(";", $this->Host); $index = 0; $connection = ($this->smtp->Connected()); // Retry while there is no connection while($index < count($hosts) && $connection == false) { if(strstr($hosts[$index], ":")) list($host, $port) = explode(":", $hosts[$index]); else { $host = $hosts[$index]; $port = $this->Port; } if($this->smtp->Connect($host, $port, $this->Timeout)) { if ($this->Helo != '') $this->smtp->Hello($this->Helo); else $this->smtp->Hello($this->ServerHostname()); if($this->SMTPAuth) { if(!$this->smtp->Authenticate($this->Username, $this->Password)) { $this->SetError($this->Lang("authenticate")); $this->smtp->Reset(); $connection = false; } } $connection = true; } $index++; } if(!$connection) $this->SetError($this->Lang("connect_host")); return $connection; } /** * Closes the active SMTP session if one exists. * @return void */ function SmtpClose() { if($this->smtp != NULL) { if($this->smtp->Connected()) { $this->smtp->Quit(); $this->smtp->Close(); } } } /** * Sets the language for all class error messages. Returns false * if it cannot load the language file. The default language type * is English. * @param string $lang_type Type of language (e.g. Portuguese: "br") * @param string $lang_path Path to the language file directory * @access public * @return bool */ function SetLanguage($lang_type, $lang_path = "language/") { if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) include($lang_path.'phpmailer.lang-'.$lang_type.'.php'); else if(file_exists($lang_path.'phpmailer.lang-en.php')) include($lang_path.'phpmailer.lang-en.php'); else { $this->SetError("Could not load language file"); return false; } $this->language = $PHPMAILER_LANG; return true; } ///////////////////////////////////////////////// // MESSAGE CREATION METHODS ///////////////////////////////////////////////// /** * Creates recipient headers. * @access private * @return string */ function AddrAppend($type, $addr) { $addr_str = $type . ": "; $addr_str .= $this->AddrFormat($addr[0]); if(count($addr) > 1) { for($i = 1; $i < count($addr); $i++) $addr_str .= ", " . $this->AddrFormat($addr[$i]); } $addr_str .= $this->LE; return $addr_str; } /** * Formats an address correctly. * @access private * @return string */ function AddrFormat($addr) { if(empty($addr[1])) $formatted = $addr[0]; else { $formatted = $this->EncodeHeader($addr[1], 'phrase') . " <" . $addr[0] . ">"; } return $formatted; } /** * Wraps message for use with mailers that do not * automatically perform wrapping and for quoted-printable. * Original written by philippe. * @access private * @return string */ function WrapText($message, $length, $qp_mode = false) { $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; $message = $this->FixEOL($message); if (substr($message, -1) == $this->LE) $message = substr($message, 0, -1); $line = explode($this->LE, $message); $message = ""; for ($i=0 ;$i < count($line); $i++) { $line_part = explode(" ", $line[$i]); $buf = ""; for ($e = 0; $e $length)) { $space_left = $length - strlen($buf) - 1; if ($e != 0) { if ($space_left > 20) { $len = $space_left; if (substr($word, $len - 1, 1) == "=") $len--; elseif (substr($word, $len - 2, 1) == "=") $len -= 2; $part = substr($word, 0, $len); $word = substr($word, $len); $buf .= " " . $part; $message .= $buf . sprintf("=%s", $this->LE); } else { $message .= $buf . $soft_break; } $buf = ""; } while (strlen($word) > 0) { $len = $length; if (substr($word, $len - 1, 1) == "=") $len--; elseif (substr($word, $len - 2, 1) == "=") $len -= 2; $part = substr($word, 0, $len); $word = substr($word, $len); if (strlen($word) > 0) $message .= $part . sprintf("=%s", $this->LE); else $buf = $part; } } else { $buf_o = $buf; $buf .= ($e == 0) ? $word : (" " . $word); if (strlen($buf) > $length and $buf_o != "") { $message .= $buf_o . $soft_break; $buf = $word; } } } $message .= $buf . $this->LE; } return $message; } /** * Set the body wrapping. * @access private * @return void */ function SetWordWrap() { if($this->WordWrap < 1) return; switch($this->message_type) { case "alt": // fall through case "alt_attachments": $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); break; default: $this->Body = $this->WrapText($this->Body, $this->WordWrap); break; } } /** * Assembles message header. * @access private * @return string */ function CreateHeader() { $result = ""; // Set the boundaries $uniq_id = md5(uniqid(time())); $this->boundary[1] = "b1_" . $uniq_id; $this->boundary[2] = "b2_" . $uniq_id; $result .= $this->HeaderLine("Date", $this->RFCDate()); if($this->Sender == "") $result .= $this->HeaderLine("Return-Path", trim($this->From)); else $result .= $this->HeaderLine("Return-Path", trim($this->Sender)); // To be created automatically by mail() if($this->Mailer != "mail") { if(count($this->to) > 0) $result .= $this->AddrAppend("To", $this->to); else if (count($this->cc) == 0) $result .= $this->HeaderLine("To", "undisclosed-recipients:;"); if(count($this->cc) > 0) $result .= $this->AddrAppend("Cc", $this->cc); } $from = array(); $from[0][0] = trim($this->From); $from[0][1] = $this->FromName; $result .= $this->AddrAppend("From", $from); // sendmail and mail() extract Bcc from the header before sending if((($this->Mailer == "sendmail") || ($this->Mailer == "mail")) && (count($this->bcc) > 0)) $result .= $this->AddrAppend("Bcc", $this->bcc); if(count($this->ReplyTo) > 0) $result .= $this->AddrAppend("Reply-to", $this->ReplyTo); // mail() sets the subject itself if($this->Mailer != "mail") $result .= $this->HeaderLine("Subject", $this->EncodeHeader(trim($this->Subject))); $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); $result .= $this->HeaderLine("X-Priority", $this->Priority); if($this->ConfirmReadingTo != "") { $result .= $this->HeaderLine("Disposition-Notification-To", "<" . trim($this->ConfirmReadingTo) . ">"); } // Add custom headers for($index = 0; $index < count($this->CustomHeader); $index++) { $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); } $result .= $this->HeaderLine("MIME-Version", "1.0"); switch($this->message_type) { case "plain": $result .= $this->HeaderLine("Content-Transfer-Encoding", $this->Encoding); $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet); break; case "attachments": // fall through case "alt_attachments": if($this->InlineImageExists()) { $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", "multipart/related", $this->LE, $this->LE, $this->boundary[1], $this->LE); } else { $result .= $this->HeaderLine("Content-Type", "multipart/mixed;"); $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); } break; case "alt": $result .= $this->HeaderLine("Content-Type", "multipart/alternative;"); $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); break; } if($this->Mailer != "mail") $result .= $this->LE.$this->LE; return $result; } /** * Assembles the message body. Returns an empty string on failure. * @access private * @return string */ function CreateBody() { $result = ""; $this->SetWordWrap(); switch($this->message_type) { case "alt": $result .= $this->GetBoundary($this->boundary[1], "", "text/plain", ""); $result .= $this->EncodeString($this->AltBody, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->GetBoundary($this->boundary[1], "", "text/html", ""); $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->EndBoundary($this->boundary[1]); break; case "plain": $result .= $this->EncodeString($this->Body, $this->Encoding); break; case "attachments": $result .= $this->GetBoundary($this->boundary[1], "", "", ""); $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE; $result .= $this->AttachAll(); break; case "alt_attachments": $result .= sprintf("--%s%s", $this->boundary[1], $this->LE); $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", "multipart/alternative", $this->LE, $this->boundary[2], $this->LE.$this->LE); // Create text body $result .= $this->GetBoundary($this->boundary[2], "", "text/plain", "") . $this->LE; $result .= $this->EncodeString($this->AltBody, $this->Encoding); $result .= $this->LE.$this->LE; // Create the HTML body $result .= $this->GetBoundary($this->boundary[2], "", "text/html", "") . $this->LE; $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->EndBoundary($this->boundary[2]); $result .= $this->AttachAll(); break; } if($this->IsError()) $result = ""; return $result; } /** * Returns the start of a message boundary. * @access private */ function GetBoundary($boundary, $charSet, $contentType, $encoding) { $result = ""; if($charSet == "") { $charSet = $this->CharSet; } if($contentType == "") { $contentType = $this->ContentType; } if($encoding == "") { $encoding = $this->Encoding; } $result .= $this->TextLine("--" . $boundary); $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); $result .= $this->LE; $result .= $this->HeaderLine("Content-Transfer-Encoding", $encoding); $result .= $this->LE; return $result; } /** * Returns the end of a message boundary. * @access private */ function EndBoundary($boundary) { return $this->LE . "--" . $boundary . "--" . $this->LE; } /** * Sets the message type. * @access private * @return void */ function SetMessageType() { if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) $this->message_type = "plain"; else { if(count($this->attachment) > 0) $this->message_type = "attachments"; if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) $this->message_type = "alt"; if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) $this->message_type = "alt_attachments"; } } /** * Returns a formatted header line. * @access private * @return string */ function HeaderLine($name, $value) { return $name . ": " . $value . $this->LE; } /** * Returns a formatted mail line. * @access private * @return string */ function TextLine($value) { return $value . $this->LE; } ///////////////////////////////////////////////// // ATTACHMENT METHODS ///////////////////////////////////////////////// /** * Adds an attachment from a path on the filesystem. * Returns false if the file could not be found * or accessed. * @param string $path Path to the attachment. * @param string $name Overrides the attachment name. * @param string $encoding File encoding (see $Encoding). * @param string $type File extension (MIME) type. * @return bool */ function AddAttachment($path, $name = "", $encoding = "base64", $type = "application/octet-stream") { if(!@is_file($path)) { $this->SetError($this->Lang("file_access") . $path); return false; } $filename = basename($path); if($name == "") $name = $filename; $cur = count($this->attachment); $this->attachment[$cur][0] = $path; $this->attachment[$cur][1] = $filename; $this->attachment[$cur][2] = $name; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; $this->attachment[$cur][5] = false; // isStringAttachment $this->attachment[$cur][6] = "attachment"; $this->attachment[$cur][7] = 0; return true; } /** * Attaches all fs, string, and binary attachments to the message. * Returns an empty string on failure. * @access private * @return string */ function AttachAll() { // Return text of body $mime = array(); // Add all attachments for($i = 0; $i < count($this->attachment); $i++) { // Check for string attachment $bString = $this->attachment[$i][5]; if ($bString) $string = $this->attachment[$i][0]; else $path = $this->attachment[$i][0]; $filename = $this->attachment[$i][1]; $name = $this->attachment[$i][2]; $encoding = $this->attachment[$i][3]; $type = $this->attachment[$i][4]; $disposition = $this->attachment[$i][6]; $cid = $this->attachment[$i][7]; $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE); $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); if($disposition == "inline") $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE); // Encode as string attachment if($bString) { $mime[] = $this->EncodeString($string, $encoding); if($this->IsError()) { return ""; } $mime[] = $this->LE.$this->LE; } else { $mime[] = $this->EncodeFile($path, $encoding); if($this->IsError()) { return ""; } $mime[] = $this->LE.$this->LE; } } $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); return join("", $mime); } /** * Encodes attachment in requested format. Returns an * empty string on failure. * @access private * @return string */ function EncodeFile ($path, $encoding = "base64") { if(!@$fd = fopen($path, "rb")) { $this->SetError($this->Lang("file_open") . $path); return ""; } $magic_quotes = get_magic_quotes_runtime(); set_magic_quotes_runtime(0); $file_buffer = fread($fd, filesize($path)); $file_buffer = $this->EncodeString($file_buffer, $encoding); fclose($fd); set_magic_quotes_runtime($magic_quotes); return $file_buffer; } /** * Encodes string to requested format. Returns an * empty string on failure. * @access private * @return string */ function EncodeString ($str, $encoding = "base64") { $encoded = ""; switch(strtolower($encoding)) { case "base64": // chunk_split is found in PHP >= 3.0.6 $encoded = chunk_split(base64_encode($str), 76, $this->LE); break; case "7bit": case "8bit": $encoded = $this->FixEOL($str); if (substr($encoded, -(strlen($this->LE))) != $this->LE) $encoded .= $this->LE; break; case "binary": $encoded = $str; break; case "quoted-printable": $encoded = $this->EncodeQP($str); break; default: $this->SetError($this->Lang("encoding") . $encoding); break; } return $encoded; } /** * Encode a header string to best of Q, B, quoted or none. * @access private * @return string */ function EncodeHeader ($str, $position = 'text') { $x = 0; switch (strtolower($position)) { case 'phrase': if (!preg_match('/[\200-\377]/', $str)) { // Can't use addslashes as we don't know what value has magic_quotes_sybase. $encoded = addcslashes($str, "\0..\37\177\\\""); if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) return ($encoded); else return ("\"$encoded\""); } $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); break; case 'comment': $x = preg_match_all('/[()"]/', $str, $matches); // Fall-through case 'text': default: $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); break; } if ($x == 0) return ($str); $maxlen = 75 - 7 - strlen($this->CharSet); // Try to select the encoding which should produce the shortest output if (strlen($str)/3 < $x) { $encoding = 'B'; $encoded = base64_encode($str); $maxlen -= $maxlen % 4; $encoded = trim(chunk_split($encoded, $maxlen, "\n")); } else { $encoding = 'Q'; $encoded = $this->EncodeQ($str, $position); $encoded = $this->WrapText($encoded, $maxlen, true); $encoded = str_replace("=".$this->LE, "\n", trim($encoded)); } $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); $encoded = trim(str_replace("\n", $this->LE, $encoded)); return $encoded; } /** * Encode string to quoted-printable. * @access private * @return string */ function EncodeQP ($str) { $encoded = $this->FixEOL($str); if (substr($encoded, -(strlen($this->LE))) != $this->LE) $encoded .= $this->LE; // Replace every high ascii, control and = characters $encoded = preg_replace('/([\000-\010\013\014\016-\037\075\177-\377])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); // Replace every spaces and tabs when it's the last character on a line $encoded = preg_replace("/([\011\040])".$this->LE."/e", "'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded); // Maximum line length of 76 characters before CRLF (74 + space + '=') $encoded = $this->WrapText($encoded, 74, true); return $encoded; } /** * Encode string to q encoding. * @access private * @return string */ function EncodeQ ($str, $position = "text") { // There should not be any EOL in the string $encoded = preg_replace("[\r\n]", "", $str); switch (strtolower($position)) { case "phrase": $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); break; case "comment": $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); case "text": default: // Replace every high ascii, control =, ? and _ characters $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); break; } // Replace every spaces to _ (more readable than =20) $encoded = str_replace(" ", "_", $encoded); return $encoded; } /** * Adds a string or binary attachment (non-filesystem) to the list. * This method can be used to attach ascii or binary data, * such as a BLOB record from a database. * @param string $string String attachment data. * @param string $filename Name of the attachment. * @param string $encoding File encoding (see $Encoding). * @param string $type File extension (MIME) type. * @return void */ function AddStringAttachment($string, $filename, $encoding = "base64", $type = "application/octet-stream") { // Append to $attachment array $cur = count($this->attachment); $this->attachment[$cur][0] = $string; $this->attachment[$cur][1] = $filename; $this->attachment[$cur][2] = $filename; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; $this->attachment[$cur][5] = true; // isString $this->attachment[$cur][6] = "attachment"; $this->attachment[$cur][7] = 0; } /** * Adds an embedded attachment. This can include images, sounds, and * just about any other document. Make sure to set the $type to an * image type. For JPEG images use "image/jpeg" and for GIF images * use "image/gif". * @param string $path Path to the attachment. * @param string $cid Content ID of the attachment. Use this to identify * the Id for accessing the image in an HTML form. * @param string $name Overrides the attachment name. * @param string $encoding File encoding (see $Encoding). * @param string $type File extension (MIME) type. * @return bool */ function AddEmbeddedImage($path, $cid, $name = "", $encoding = "base64", $type = "application/octet-stream") { if(!@is_file($path)) { $this->SetError($this->Lang("file_access") . $path); return false; } $filename = basename($path); if($name == "") $name = $filename; // Append to $attachment array $cur = count($this->attachment); $this->attachment[$cur][0] = $path; $this->attachment[$cur][1] = $filename; $this->attachment[$cur][2] = $name; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; $this->attachment[$cur][5] = false; // isStringAttachment $this->attachment[$cur][6] = "inline"; $this->attachment[$cur][7] = $cid; return true; } /** * Returns true if an inline attachment is present. * @access private * @return bool */ function InlineImageExists() { $result = false; for($i = 0; $i < count($this->attachment); $i++) { if($this->attachment[$i][6] == "inline") { $result = true; break; } } return $result; } ///////////////////////////////////////////////// // MESSAGE RESET METHODS ///////////////////////////////////////////////// /** * Clears all recipients assigned in the TO array. Returns void. * @return void */ function ClearAddresses() { $this->to = array(); } /** * Clears all recipients assigned in the CC array. Returns void. * @return void */ function ClearCCs() { $this->cc = array(); } /** * Clears all recipients assigned in the BCC array. Returns void. * @return void */ function ClearBCCs() { $this->bcc = array(); } /** * Clears all recipients assigned in the ReplyTo array. Returns void. * @return void */ function ClearReplyTos() { $this->ReplyTo = array(); } /** * Clears all recipients assigned in the TO, CC and BCC * array. Returns void. * @return void */ function ClearAllRecipients() { $this->to = array(); $this->cc = array(); $this->bcc = array(); } /** * Clears all previously set filesystem, string, and binary * attachments. Returns void. * @return void */ function ClearAttachments() { $this->attachment = array(); } /** * Clears all custom headers. Returns void. * @return void */ function ClearCustomHeaders() { $this->CustomHeader = array(); } ///////////////////////////////////////////////// // MISCELLANEOUS METHODS ///////////////////////////////////////////////// /** * Adds the error message to the error container. * Returns void. * @access private * @return void */ function SetError($msg) { $this->error_count++; $this->ErrorInfo = $msg; } /** * Returns the proper RFC 822 formatted date. * @access private * @return string */ function RFCDate() { $tz = date("Z"); $tzs = ($tz < 0) ? "-" : "+"; $tz = abs($tz); $tz = ($tz/3600)*100 + ($tz%3600)/60; $result = sprintf("%s %s%04d", date("D, j M Y H:i:s"), $tzs, $tz); return $result; } /** * Returns the appropriate server variable. Should work with both * PHP 4.1.0+ as well as older versions. Returns an empty string * if nothing is found. * @access private * @return mixed */ function ServerVar($varName) { global $HTTP_SERVER_VARS; global $HTTP_ENV_VARS; if(!isset($_SERVER)) { $_SERVER = $HTTP_SERVER_VARS; if(!isset($_SERVER["REMOTE_ADDR"])) $_SERVER = $HTTP_ENV_VARS; // must be Apache } if(isset($_SERVER[$varName])) return $_SERVER[$varName]; else return ""; } /** * Returns the server hostname or 'localhost.localdomain' if unknown. * @access private * @return string */ function ServerHostname() { if ($this->Hostname != "") $result = $this->Hostname; elseif ($this->ServerVar('SERVER_NAME') != "") $result = $this->ServerVar('SERVER_NAME'); else $result = "localhost.localdomain"; return $result; } /** * Returns a message in the appropriate language. * @access private * @return string */ function Lang($key) { if(count($this->language) < 1) $this->SetLanguage("en"); // set the default language if(isset($this->language[$key])) return $this->language[$key]; else return "Language string failed to load: " . $key; } /** * Returns true if an error occurred. * @return bool */ function IsError() { return ($this->error_count > 0); } /** * Changes every end of line from CR or LF to CRLF. * @access private * @return string */ function FixEOL($str) { $str = str_replace("\r\n", "\n", $str); $str = str_replace("\r", "\n", $str); $str = str_replace("\n", $this->LE, $str); return $str; } /** * Adds a custom header. * @return void */ function AddCustomHeader($custom_header) { $this->CustomHeader[] = explode(":", $custom_header, 2); } } ?> BUFFER,"integer"); if( !empty($server) ) { // Do not allow programs to alter MAILSERVER // if it is already specified. They can get around // this if they -really- want to, so don't count on it. if(empty($this->MAILSERVER)) $this->MAILSERVER = $server; } if(!empty($timeout)) { settype($timeout,"integer"); $this->TIMEOUT = $timeout; if (!ini_get('safe_mode')) set_time_limit($timeout); } return true; } function update_timer () { if (!ini_get('safe_mode')) set_time_limit($this->TIMEOUT); return true; } function connect ($server, $port = 110) { // Opens a socket to the specified server. Unless overridden, // port defaults to 110. Returns true on success, false on fail // If MAILSERVER is set, override $server with it's value if (!isset($port) || !$port) {$port = 110;} if(!empty($this->MAILSERVER)) $server = $this->MAILSERVER; if(empty($server)){ $this->ERROR = _("POP3 connect:") . ' ' . _("No server specified"); unset($this->FP); return false; } $fp = @fsockopen("$server", $port, $errno, $errstr); if(!$fp) { $this->ERROR = _("POP3 connect:") . ' ' . _("Error ") . "[$errno] [$errstr]"; unset($this->FP); return false; } socket_set_blocking($fp,-1); $this->update_timer(); $reply = fgets($fp,$this->BUFFER); $reply = $this->strip_clf($reply); if($this->DEBUG) error_log("POP3 SEND [connect: $server] GOT [$reply]",0); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 connect:") . ' ' . _("Error ") . "[$reply]"; unset($this->FP); return false; } $this->FP = $fp; $this->BANNER = $this->parse_banner($reply); return true; } function user ($user = "") { // Sends the USER command, returns true or false if( empty($user) ) { $this->ERROR = _("POP3 user:") . ' ' . _("no login ID submitted"); return false; } elseif(!isset($this->FP)) { $this->ERROR = _("POP3 user:") . ' ' . _("connection not established"); return false; } else { $reply = $this->send_cmd("USER $user"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 user:") . ' ' . _("Error ") . "[$reply]"; return false; } else return true; } } function pass ($pass = "") { // Sends the PASS command, returns # of msgs in mailbox, // returns false (undef) on Auth failure if(empty($pass)) { $this->ERROR = _("POP3 pass:") . ' ' . _("No password submitted"); return false; } elseif(!isset($this->FP)) { $this->ERROR = _("POP3 pass:") . ' ' . _("connection not established"); return false; } else { $reply = $this->send_cmd("PASS $pass"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 pass:") . ' ' . _("Authentication failed ") . "[$reply]"; $this->quit(); return false; } else { // Auth successful. $count = $this->last("count"); $this->COUNT = $count; return $count; } } } function apop ($login,$pass) { // Attempts an APOP login. If this fails, it'll // try a standard login. YOUR SERVER MUST SUPPORT // THE USE OF THE APOP COMMAND! // (apop is optional per rfc1939) if(!isset($this->FP)) { $this->ERROR = _("POP3 apop:") . ' ' . _("No connection to server"); return false; } elseif(!$this->ALLOWAPOP) { $retVal = $this->login($login,$pass); return $retVal; } elseif(empty($login)) { $this->ERROR = _("POP3 apop:") . ' ' . _("No login ID submitted"); return false; } elseif(empty($pass)) { $this->ERROR = _("POP3 apop:") . ' ' . _("No password submitted"); return false; } else { $banner = $this->BANNER; if( (!$banner) or (empty($banner)) ) { $this->ERROR = _("POP3 apop:") . ' ' . _("No server banner") . ' - ' . _("abort"); $retVal = $this->login($login,$pass); return $retVal; } else { $AuthString = $banner; $AuthString .= $pass; $APOPString = md5($AuthString); $cmd = "APOP $login $APOPString"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 apop:") . ' ' . _("apop authentication failed") . ' - ' . _("abort"); $retVal = $this->login($login,$pass); return $retVal; } else { // Auth successful. $count = $this->last("count"); $this->COUNT = $count; return $count; } } } } function login ($login = "", $pass = "") { // Sends both user and pass. Returns # of msgs in mailbox or // false on failure (or -1, if the error occurs while getting // the number of messages.) if( !isset($this->FP) ) { $this->ERROR = _("POP3 login:") . ' ' . _("No connection to server"); return false; } else { $fp = $this->FP; if( !$this->user( $login ) ) { // Preserve the error generated by user() return false; } else { $count = $this->pass($pass); if( (!$count) || ($count == -1) ) { // Preserve the error generated by last() and pass() return false; } else return $count; } } } function top ($msgNum, $numLines = "0") { // Gets the header and first $numLines of the msg body // returns data in an array with each returned line being // an array element. If $numLines is empty, returns // only the header information, and none of the body. if(!isset($this->FP)) { $this->ERROR = _("POP3 top:") . ' ' . _("No connection to server"); return false; } $this->update_timer(); $fp = $this->FP; $buffer = $this->BUFFER; $cmd = "TOP $msgNum $numLines"; fwrite($fp, "TOP $msgNum $numLines\r\n"); $reply = fgets($fp, $buffer); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 top:") . ' ' . _("Error ") . "[$reply]"; return false; } $count = 0; $MsgArray = array(); $line = fgets($fp,$buffer); while ( !ereg("^\.\r\n",$line)) { $MsgArray[$count] = $line; $count++; $line = fgets($fp,$buffer); if(empty($line)) { break; } } return $MsgArray; } function pop_list ($msgNum = "") { // If called with an argument, returns that msgs' size in octets // No argument returns an associative array of undeleted // msg numbers and their sizes in octets if(!isset($this->FP)) { $this->ERROR = _("POP3 pop_list:") . ' ' . _("No connection to server"); return false; } $fp = $this->FP; $Total = $this->COUNT; if( (!$Total) or ($Total == -1) ) { return false; } if($Total == 0) { return array("0","0"); // return -1; // mailbox empty } $this->update_timer(); if(!empty($msgNum)) { $cmd = "LIST $msgNum"; fwrite($fp,"$cmd\r\n"); $reply = fgets($fp,$this->BUFFER); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 pop_list:") . ' ' . _("Error ") . "[$reply]"; return false; } list($junk,$num,$size) = preg_split('/\s+/',$reply); return $size; } $cmd = "LIST"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $reply = $this->strip_clf($reply); $this->ERROR = _("POP3 pop_list:") . ' ' . _("Error ") . "[$reply]"; return false; } $MsgArray = array(); $MsgArray[0] = $Total; for($msgC=1;$msgC <= $Total; $msgC++) { if($msgC > $Total) { break; } $line = fgets($fp,$this->BUFFER); $line = $this->strip_clf($line); if(ereg("^\.",$line)) { $this->ERROR = _("POP3 pop_list:") . ' ' . _("Premature end of list"); return false; } list($thisMsg,$msgSize) = preg_split('/\s+/',$line); settype($thisMsg,"integer"); if($thisMsg != $msgC) { $MsgArray[$msgC] = "deleted"; } else { $MsgArray[$msgC] = $msgSize; } } return $MsgArray; } function get ($msgNum) { // Retrieve the specified msg number. Returns an array // where each line of the msg is an array element. if(!isset($this->FP)) { $this->ERROR = _("POP3 get:") . ' ' . _("No connection to server"); return false; } $this->update_timer(); $fp = $this->FP; $buffer = $this->BUFFER; $cmd = "RETR $msgNum"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 get:") . ' ' . _("Error ") . "[$reply]"; return false; } $count = 0; $MsgArray = array(); $line = ""; while ( !ereg("^\.\r\n",$line)) { $line = fgets($fp,$buffer); if (preg_match("/^\s+/", $line) && $count > 0) { $MsgArray[$count-1] .= $line; continue; } if(empty($line)) { break; } $MsgArray[$count] = $line; $count++; } return $MsgArray; } function last ( $type = "count" ) { // Returns the highest msg number in the mailbox. // returns -1 on error, 0+ on success, if type != count // results in a popstat() call (2 element array returned) $last = -1; if(!isset($this->FP)) { $this->ERROR = _("POP3 last:") . ' ' . _("No connection to server"); return $last; } $reply = $this->send_cmd("STAT"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 last:") . ' ' . _("Error ") . "[$reply]"; return $last; } $Vars = preg_split('/\s+/',$reply); $count = $Vars[1]; $size = $Vars[2]; settype($count,"integer"); settype($size,"integer"); if($type != "count") { return array($count,$size); } return $count; } function reset () { // Resets the status of the remote server. This includes // resetting the status of ALL msgs to not be deleted. // This method automatically closes the connection to the server. if(!isset($this->FP)) { $this->ERROR = _("POP3 reset:") . ' ' . _("No connection to server"); return false; } $reply = $this->send_cmd("RSET"); if(!$this->is_ok($reply)) { // The POP3 RSET command -never- gives a -ERR // response - if it ever does, something truely // wild is going on. $this->ERROR = _("POP3 reset:") . ' ' . _("Error ") . "[$reply]"; @error_log("POP3 reset: ERROR [$reply]",0); } $this->quit(); return true; } function send_cmd ( $cmd = "" ) { // Sends a user defined command string to the // POP server and returns the results. Useful for // non-compliant or custom POP servers. // Do NOT includ the \r\n as part of your command // string - it will be appended automatically. // The return value is a standard fgets() call, which // will read up to $this->BUFFER bytes of data, until it // encounters a new line, or EOF, whichever happens first. // This method works best if $cmd responds with only // one line of data. if(!isset($this->FP)) { $this->ERROR = _("POP3 send_cmd:") . ' ' . _("No connection to server"); return false; } if(empty($cmd)) { $this->ERROR = _("POP3 send_cmd:") . ' ' . _("Empty command string"); return ""; } $fp = $this->FP; $buffer = $this->BUFFER; $this->update_timer(); fwrite($fp,"$cmd\r\n"); $reply = fgets($fp,$buffer); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } return $reply; } function quit() { // Closes the connection to the POP3 server, deleting // any msgs marked as deleted. if(!isset($this->FP)) { $this->ERROR = _("POP3 quit:") . ' ' . _("connection does not exist"); return false; } $fp = $this->FP; $cmd = "QUIT"; fwrite($fp,"$cmd\r\n"); $reply = fgets($fp,$this->BUFFER); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } fclose($fp); unset($this->FP); return true; } function popstat () { // Returns an array of 2 elements. The number of undeleted // msgs in the mailbox, and the size of the mbox in octets. $PopArray = $this->last("array"); if($PopArray == -1) { return false; } if( (!$PopArray) or (empty($PopArray)) ) { return false; } return $PopArray; } function uidl ($msgNum = "") { // Returns the UIDL of the msg specified. If called with // no arguments, returns an associative array where each // undeleted msg num is a key, and the msg's uidl is the element // Array element 0 will contain the total number of msgs if(!isset($this->FP)) { $this->ERROR = _("POP3 uidl:") . ' ' . _("No connection to server"); return false; } $fp = $this->FP; $buffer = $this->BUFFER; if(!empty($msgNum)) { $cmd = "UIDL $msgNum"; $reply = $this->send_cmd($cmd); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 uidl:") . ' ' . _("Error ") . "[$reply]"; return false; } list ($ok,$num,$myUidl) = preg_split('/\s+/',$reply); return $myUidl; } else { $this->update_timer(); $UIDLArray = array(); $Total = $this->COUNT; $UIDLArray[0] = $Total; if ($Total < 1) { return $UIDLArray; } $cmd = "UIDL"; fwrite($fp, "UIDL\r\n"); $reply = fgets($fp, $buffer); $reply = $this->strip_clf($reply); if($this->DEBUG) { @error_log("POP3 SEND [$cmd] GOT [$reply]",0); } if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 uidl:") . ' ' . _("Error ") . "[$reply]"; return false; } $line = ""; $count = 1; $line = fgets($fp,$buffer); while ( !ereg("^\.\r\n",$line)) { if(ereg("^\.\r\n",$line)) { break; } list ($msg,$msgUidl) = preg_split('/\s+/',$line); $msgUidl = $this->strip_clf($msgUidl); if($count == $msg) { $UIDLArray[$msg] = $msgUidl; } else { $UIDLArray[$count] = 'deleted'; } $count++; $line = fgets($fp,$buffer); } } return $UIDLArray; } function delete ($msgNum = "") { // Flags a specified msg as deleted. The msg will not // be deleted until a quit() method is called. if(!isset($this->FP)) { $this->ERROR = _("POP3 delete:") . ' ' . _("No connection to server"); return false; } if(empty($msgNum)) { $this->ERROR = _("POP3 delete:") . ' ' . _("No msg number submitted"); return false; } $reply = $this->send_cmd("DELE $msgNum"); if(!$this->is_ok($reply)) { $this->ERROR = _("POP3 delete:") . ' ' . _("Command failed ") . "[$reply]"; return false; } return true; } // ********************************************************* // The following methods are internal to the class. function is_ok ($cmd = "") { // Return true or false on +OK or -ERR if( empty($cmd) ) return false; else return( ereg ("^\+OK", $cmd ) ); } function strip_clf ($text = "") { // Strips \r\n from server responses if(empty($text)) return $text; else { $stripped = str_replace("\r",'',$text); $stripped = str_replace("\n",'',$stripped); return $stripped; } } function parse_banner ( $server_text ) { $outside = true; $banner = ""; $length = strlen($server_text); for($count =0; $count < $length; $count++) { $digit = substr($server_text, $count, 1); if (!empty($digit)) { if( (!$outside) && ($digit != '<') && ($digit != '>') ) { $banner .= $digit; } if ($digit == '<') { $outside = false; } if($digit == '>') { $outside = true; } } } $banner = $this->strip_clf($banner); // Just in case return "<$banner>"; } } // End class ?> smtp_conn = 0; $this->error = null; $this->helo_rply = null; $this->do_debug = 0; } /************************************************************* * CONNECTION FUNCTIONS * ***********************************************************/ /** * Connect to the server specified on the port specified. * If the port is not specified use the default SMTP_PORT. * If tval is specified then a connection will try and be * established with the server for that number of seconds. * If tval is not specified the default is 30 seconds to * try on the connection. * * SMTP CODE SUCCESS: 220 * SMTP CODE FAILURE: 421 * @access public * @return bool */ function Connect($host,$port=0,$tval=30) { # set the error val to null so there is no confusion $this->error = null; # make sure we are __not__ connected if($this->connected()) { # ok we are connected! what should we do? # for now we will just give an error saying we # are already connected $this->error = array("error" => "Already connected to a server"); return false; } if(empty($port)) { $port = $this->SMTP_PORT; } #connect to the smtp server $this->smtp_conn = fsockopen($host, # the host of the server $port, # the port to use $errno, # error number if any $errstr, # error message if any $tval); # give up after ? secs # verify we connected properly if(empty($this->smtp_conn)) { $this->error = array("error" => "Failed to connect to server", "errno" => $errno, "errstr" => $errstr); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF; } return false; } # sometimes the SMTP server takes a little longer to respond # so we will give it a longer timeout for the first read // Windows still does not have support for this timeout function if(substr(PHP_OS, 0, 3) != "WIN") socket_set_timeout($this->smtp_conn, $tval, 0); # get any announcement stuff $announce = $this->get_lines(); # set the timeout of any socket functions at 1/10 of a second //if(function_exists("socket_set_timeout")) // socket_set_timeout($this->smtp_conn, 0, 100000); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce; } return true; } /** * Performs SMTP authentication. Must be run after running the * Hello() method. Returns true if successfully authenticated. * @access public * @return bool */ function Authenticate($username, $password) { // Start authentication fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($code != 334) { $this->error = array("error" => "AUTH not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } // Send encoded username fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($code != 334) { $this->error = array("error" => "Username not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } // Send encoded password fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($code != 235) { $this->error = array("error" => "Password not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Returns true if connected to a server otherwise false * @access private * @return bool */ function Connected() { if(!empty($this->smtp_conn)) { $sock_status = socket_get_status($this->smtp_conn); if($sock_status["eof"]) { # hmm this is an odd situation... the socket is # valid but we aren't connected anymore if($this->do_debug >= 1) { echo "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected"; } $this->Close(); return false; } return true; # everything looks good } return false; } /** * Closes the socket and cleans up the state of the class. * It is not considered good to use this function without * first trying to use QUIT. * @access public * @return void */ function Close() { $this->error = null; # so there is no confusion $this->helo_rply = null; if(!empty($this->smtp_conn)) { # close the connection and cleanup fclose($this->smtp_conn); $this->smtp_conn = 0; } } /*************************************************************** * SMTP COMMANDS * *************************************************************/ /** * Issues a data command and sends the msg_data to the server * finializing the mail transaction. $msg_data is the message * that is to be send with the headers. Each header needs to be * on a single line followed by a with the message headers * and the message body being seperated by and additional . * * Implements rfc 821: DATA * * SMTP CODE INTERMEDIATE: 354 * [data] * . * SMTP CODE SUCCESS: 250 * SMTP CODE FAILURE: 552,554,451,452 * SMTP CODE FAILURE: 451,554 * SMTP CODE ERROR : 500,501,503,421 * @access public * @return bool */ function Data($msg_data) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Data() without being connected"); return false; } fputs($this->smtp_conn,"DATA" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 354) { $this->error = array("error" => "DATA command not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } # the server is ready to accept data! # according to rfc 821 we should not send more than 1000 # including the CRLF # characters on a single line so we will break the data up # into lines by \r and/or \n then if needed we will break # each of those into smaller lines to fit within the limit. # in addition we will be looking for lines that start with # a period '.' and append and additional period '.' to that # line. NOTE: this does not count towards are limit. # normalize the line breaks so we know the explode works $msg_data = str_replace("\r\n","\n",$msg_data); $msg_data = str_replace("\r","\n",$msg_data); $lines = explode("\n",$msg_data); # we need to find a good way to determine is headers are # in the msg_data or if it is a straight msg body # currently I'm assuming rfc 822 definitions of msg headers # and if the first field of the first line (':' sperated) # does not contain a space then it _should_ be a header # and we can process all lines before a blank "" line as # headers. $field = substr($lines[0],0,strpos($lines[0],":")); $in_headers = false; if(!empty($field) && !strstr($field," ")) { $in_headers = true; } $max_line_length = 998; # used below; set here for ease in change while(list(,$line) = @each($lines)) { $lines_out = null; if($line == "" && $in_headers) { $in_headers = false; } # ok we need to break this line up into several # smaller lines while(strlen($line) > $max_line_length) { $pos = strrpos(substr($line,0,$max_line_length)," "); # Patch to fix DOS attack if(!$pos) { $pos = $max_line_length - 1; } $lines_out[] = substr($line,0,$pos); $line = substr($line,$pos + 1); # if we are processing headers we need to # add a LWSP-char to the front of the new line # rfc 822 on long msg headers if($in_headers) { $line = "\t" . $line; } } $lines_out[] = $line; # now send the lines to the server while(list(,$line_out) = @each($lines_out)) { if(strlen($line_out) > 0) { if(substr($line_out, 0, 1) == ".") { $line_out = "." . $line_out; } } fputs($this->smtp_conn,$line_out . $this->CRLF); } } # ok all the message data has been sent so lets get this # over with aleady fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "DATA not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Expand takes the name and asks the server to list all the * people who are members of the _list_. Expand will return * back and array of the result or false if an error occurs. * Each value in the array returned has the format of: * [ ] * The definition of is defined in rfc 821 * * Implements rfc 821: EXPN * * SMTP CODE SUCCESS: 250 * SMTP CODE FAILURE: 550 * SMTP CODE ERROR : 500,501,502,504,421 * @access public * @return string array */ function Expand($name) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Expand() without being connected"); return false; } fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "EXPN not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } # parse the reply and place in our array to return to user $entries = explode($this->CRLF,$rply); while(list(,$l) = @each($entries)) { $list[] = substr($l,4); } return $list; } /** * Sends the HELO command to the smtp server. * This makes sure that we and the server are in * the same known state. * * Implements from rfc 821: HELO * * SMTP CODE SUCCESS: 250 * SMTP CODE ERROR : 500, 501, 504, 421 * @access public * @return bool */ function Hello($host="") { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Hello() without being connected"); return false; } # if a hostname for the HELO wasn't specified determine # a suitable one to send if(empty($host)) { # we need to determine some sort of appopiate default # to send to the server $host = "localhost"; } // Send extended hello first (RFC 2821) if(!$this->SendHello("EHLO", $host)) { if(!$this->SendHello("HELO", $host)) return false; } return true; } /** * Sends a HELO/EHLO command. * @access private * @return bool */ function SendHello($hello, $host) { fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => $hello . " not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } $this->helo_rply = $rply; return true; } /** * Gets help information on the keyword specified. If the keyword * is not specified then returns generic help, ussually contianing * A list of keywords that help is available on. This function * returns the results back to the user. It is up to the user to * handle the returned data. If an error occurs then false is * returned with $this->error set appropiately. * * Implements rfc 821: HELP [ ] * * SMTP CODE SUCCESS: 211,214 * SMTP CODE ERROR : 500,501,502,504,421 * @access public * @return string */ function Help($keyword="") { $this->error = null; # to avoid confusion if(!$this->connected()) { $this->error = array( "error" => "Called Help() without being connected"); return false; } $extra = ""; if(!empty($keyword)) { $extra = " " . $keyword; } fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 211 && $code != 214) { $this->error = array("error" => "HELP not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return $rply; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. * * Implements rfc 821: MAIL FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,421 * @access public * @return bool */ function Mail($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Mail() without being connected"); return false; } fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "MAIL not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Sends the command NOOP to the SMTP server. * * Implements from rfc 821: NOOP * * SMTP CODE SUCCESS: 250 * SMTP CODE ERROR : 500, 421 * @access public * @return bool */ function Noop() { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Noop() without being connected"); return false; } fputs($this->smtp_conn,"NOOP" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "NOOP not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Sends the quit command to the server and then closes the socket * if there is no error or the $close_on_error argument is true. * * Implements from rfc 821: QUIT * * SMTP CODE SUCCESS: 221 * SMTP CODE ERROR : 500 * @access public * @return bool */ function Quit($close_on_error=true) { $this->error = null; # so there is no confusion if(!$this->connected()) { $this->error = array( "error" => "Called Quit() without being connected"); return false; } # send the quit command to the server fputs($this->smtp_conn,"quit" . $this->CRLF); # get any good-bye messages $byemsg = $this->get_lines(); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg; } $rval = true; $e = null; $code = substr($byemsg,0,3); if($code != 221) { # use e as a tmp var cause Close will overwrite $this->error $e = array("error" => "SMTP server rejected quit command", "smtp_code" => $code, "smtp_rply" => substr($byemsg,4)); $rval = false; if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF; } } if(empty($e) || $close_on_error) { $this->Close(); } return $rval; } /** * Sends the command RCPT to the SMTP server with the TO: argument of $to. * Returns true if the recipient was accepted false if it was rejected. * * Implements from rfc 821: RCPT TO: * * SMTP CODE SUCCESS: 250,251 * SMTP CODE FAILURE: 550,551,552,553,450,451,452 * SMTP CODE ERROR : 500,501,503,421 * @access public * @return bool */ function Recipient($to) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Recipient() without being connected"); return false; } fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250 && $code != 251) { $this->error = array("error" => "RCPT not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Sends the RSET command to abort and transaction that is * currently in progress. Returns true if successful false * otherwise. * * Implements rfc 821: RSET * * SMTP CODE SUCCESS: 250 * SMTP CODE ERROR : 500,501,504,421 * @access public * @return bool */ function Reset() { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Reset() without being connected"); return false; } fputs($this->smtp_conn,"RSET" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "RSET failed", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. This command * will send the message to the users terminal if they are logged * in. * * Implements rfc 821: SEND FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,502,421 * @access public * @return bool */ function Send($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Send() without being connected"); return false; } fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "SEND not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. This command * will send the message to the users terminal if they are logged * in and send them an email. * * Implements rfc 821: SAML FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,502,421 * @access public * @return bool */ function SendAndMail($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called SendAndMail() without being connected"); return false; } fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "SAML not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more Recipient * commands may be called followed by a Data command. This command * will send the message to the users terminal if they are logged * in or mail it to them if they are not. * * Implements rfc 821: SOML FROM: * * SMTP CODE SUCCESS: 250 * SMTP CODE SUCCESS: 552,451,452 * SMTP CODE SUCCESS: 500,501,502,421 * @access public * @return bool */ function SendOrMail($from) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called SendOrMail() without being connected"); return false; } fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250) { $this->error = array("error" => "SOML not accepted from server", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return true; } /** * This is an optional command for SMTP that this class does not * support. This method is here to make the RFC821 Definition * complete for this class and __may__ be implimented in the future * * Implements from rfc 821: TURN * * SMTP CODE SUCCESS: 250 * SMTP CODE FAILURE: 502 * SMTP CODE ERROR : 500, 503 * @access public * @return bool */ function Turn() { $this->error = array("error" => "This method, TURN, of the SMTP ". "is not implemented"); if($this->do_debug >= 1) { echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF; } return false; } /** * Verifies that the name is recognized by the server. * Returns false if the name could not be verified otherwise * the response from the server is returned. * * Implements rfc 821: VRFY * * SMTP CODE SUCCESS: 250,251 * SMTP CODE FAILURE: 550,551,553 * SMTP CODE ERROR : 500,501,502,421 * @access public * @return int */ function Verify($name) { $this->error = null; # so no confusion is caused if(!$this->connected()) { $this->error = array( "error" => "Called Verify() without being connected"); return false; } fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); if($this->do_debug >= 2) { echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; } if($code != 250 && $code != 251) { $this->error = array("error" => "VRFY failed on name '$name'", "smtp_code" => $code, "smtp_msg" => substr($rply,4)); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; } return false; } return $rply; } /******************************************************************* * INTERNAL FUNCTIONS * ******************************************************************/ /** * Read in as many lines as possible * either before eof or socket timeout occurs on the operation. * With SMTP we can tell if we have more lines to read if the * 4th character is '-' symbol. If it is a space then we don't * need to read anything else. * @access private * @return string */ function get_lines() { $data = ""; while($str = fgets($this->smtp_conn,515)) { if($this->do_debug >= 4) { echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF; echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF; } $data .= $str; if($this->do_debug >= 4) { echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF; } # if the 4th character is a space then we are done reading # so just break the loop if(substr($str,3,1) == " ") { break; } } return $data; } } ?> >wordpress/wp-includes/.svn/text-base/class-snoopy.php.svn-base3 Copyright (c): 1999-2000 ispi, all rights reserved Version: 1.01 * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA You may contact the author of Snoopy by e-mail at: monte@ispi.net Or, write to: Monte Ohrt CTO, ispi 237 S. 70th suite 220 Lincoln, NE 68510 The latest version of Snoopy can be obtained from: http://snoopy.sourceforge.net/ *************************************************/ if ( !in_array('Snoopy', get_declared_classes() ) ) : class Snoopy { /**** Public variables ****/ /* user definable vars */ var $host = "www.php.net"; // host name we are connecting to var $port = 80; // port we are connecting to var $proxy_host = ""; // proxy host to use var $proxy_port = ""; // proxy port to use var $proxy_user = ""; // proxy user to use var $proxy_pass = ""; // proxy password to use var $agent = "Snoopy v1.2.3"; // agent we masquerade as var $referer = ""; // referer info to pass var $cookies = array(); // array of cookies to pass // $cookies["username"]="joe"; var $rawheaders = array(); // array of raw headers to send // $rawheaders["Content-type"]="text/html"; var $maxredirs = 5; // http redirection depth maximum. 0 = disallow var $lastredirectaddr = ""; // contains address of last redirected address var $offsiteok = true; // allows redirection off-site var $maxframes = 0; // frame content depth maximum. 0 = disallow var $expandlinks = true; // expand links to fully qualified URLs. // this only applies to fetchlinks() // submitlinks(), and submittext() var $passcookies = true; // pass set cookies back through redirects // NOTE: this currently does not respect // dates, domains or paths. var $user = ""; // user for http authentication var $pass = ""; // password for http authentication // http accept types var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; var $results = ""; // where the content is put var $error = ""; // error messages sent here var $response_code = ""; // response code returned from server var $headers = array(); // headers returned from server sent here var $maxlength = 8192; // max return data length (body) var $read_timeout = 0; // timeout on read operations, in seconds // supported only since PHP 4 Beta 4 // set to 0 to disallow timeouts var $timed_out = false; // if a read operation timed out var $status = 0; // http request status var $temp_dir = "/tmp"; // temporary directory that the webserver // has permission to write to. // under Windows, this should be C:\temp var $curl_path = "/usr/local/bin/curl"; // Snoopy will use cURL for fetching // SSL content if a full system path to // the cURL binary is supplied here. // set to false if you do not have // cURL installed. See http://curl.haxx.se // for details on installing cURL. // Snoopy does *not* use the cURL // library functions built into php, // as these functions are not stable // as of this Snoopy release. /**** Private variables ****/ var $_maxlinelen = 4096; // max line length (headers) var $_httpmethod = "GET"; // default http request method var $_httpversion = "HTTP/1.0"; // default http request version var $_submit_method = "POST"; // default submit method var $_submit_type = "application/x-www-form-urlencoded"; // default submit type var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type var $_redirectaddr = false; // will be set if page fetched is a redirect var $_redirectdepth = 0; // increments on an http redirect var $_frameurls = array(); // frame src urls var $_framedepth = 0; // increments on frame depth var $_isproxy = false; // set if using a proxy server var $_fp_timeout = 30; // timeout for socket connection /*======================================================================*\ Function: fetch Purpose: fetch the contents of a web page (and possibly other protocols in the future like ftp, nntp, gopher, etc.) Input: $URI the location of the page to fetch Output: $this->results the output text from the fetch \*======================================================================*/ function fetch($URI) { //preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS); $URI_PARTS = parse_url($URI); if (!empty($URI_PARTS["user"])) $this->user = $URI_PARTS["user"]; if (!empty($URI_PARTS["pass"])) $this->pass = $URI_PARTS["pass"]; if (empty($URI_PARTS["query"])) $URI_PARTS["query"] = ''; if (empty($URI_PARTS["path"])) $URI_PARTS["path"] = ''; switch(strtolower($URI_PARTS["scheme"])) { case "http": $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_connect($fp)) { if($this->_isproxy) { // using proxy, send entire URI $this->_httprequest($URI,$fp,$URI,$this->_httpmethod); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httprequest($path, $fp, $URI, $this->_httpmethod); } $this->_disconnect($fp); if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; $this->fetch($this->_redirectaddr); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } } else { return false; } return true; break; case "https": if(!$this->curl_path) return false; if(function_exists("is_executable")) if (!is_executable($this->curl_path)) return false; $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_isproxy) { // using proxy, send entire URI $this->_httpsrequest($URI,$URI,$this->_httpmethod); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httpsrequest($path, $URI, $this->_httpmethod); } if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; $this->fetch($this->_redirectaddr); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } return true; break; default: // not a valid protocol $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; return false; break; } return true; } /*======================================================================*\ Function: submit Purpose: submit an http form Input: $URI the location to post the data $formvars the formvars to use. format: $formvars["var"] = "val"; $formfiles an array of files to submit format: $formfiles["var"] = "/dir/filename.ext"; Output: $this->results the text output from the post \*======================================================================*/ function submit($URI, $formvars="", $formfiles="") { unset($postdata); $postdata = $this->_prepare_post_body($formvars, $formfiles); $URI_PARTS = parse_url($URI); if (!empty($URI_PARTS["user"])) $this->user = $URI_PARTS["user"]; if (!empty($URI_PARTS["pass"])) $this->pass = $URI_PARTS["pass"]; if (empty($URI_PARTS["query"])) $URI_PARTS["query"] = ''; if (empty($URI_PARTS["path"])) $URI_PARTS["path"] = ''; switch(strtolower($URI_PARTS["scheme"])) { case "http": $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_connect($fp)) { if($this->_isproxy) { // using proxy, send entire URI $this->_httprequest($URI,$fp,$URI,$this->_submit_method,$this->_submit_type,$postdata); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata); } $this->_disconnect($fp); if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; if( strpos( $this->_redirectaddr, "?" ) > 0 ) $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get else $this->submit($this->_redirectaddr,$formvars, $formfiles); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } } else { return false; } return true; break; case "https": if(!$this->curl_path) return false; if(function_exists("is_executable")) if (!is_executable($this->curl_path)) return false; $this->host = $URI_PARTS["host"]; if(!empty($URI_PARTS["port"])) $this->port = $URI_PARTS["port"]; if($this->_isproxy) { // using proxy, send entire URI $this->_httpsrequest($URI, $URI, $this->_submit_method, $this->_submit_type, $postdata); } else { $path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); // no proxy, send only the path $this->_httpsrequest($path, $URI, $this->_submit_method, $this->_submit_type, $postdata); } if($this->_redirectaddr) { /* url was redirected, check if we've hit the max depth */ if($this->maxredirs > $this->_redirectdepth) { if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr)) $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]); // only follow redirect if it's on this site, or offsiteok is true if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) { /* follow the redirect */ $this->_redirectdepth++; $this->lastredirectaddr=$this->_redirectaddr; if( strpos( $this->_redirectaddr, "?" ) > 0 ) $this->fetch($this->_redirectaddr); // the redirect has changed the request method from post to get else $this->submit($this->_redirectaddr,$formvars, $formfiles); } } } if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) { $frameurls = $this->_frameurls; $this->_frameurls = array(); while(list(,$frameurl) = each($frameurls)) { if($this->_framedepth < $this->maxframes) { $this->fetch($frameurl); $this->_framedepth++; } else break; } } return true; break; default: // not a valid protocol $this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; return false; break; } return true; } /*======================================================================*\ Function: fetchlinks Purpose: fetch the links from a web page Input: $URI where you are fetching from Output: $this->results an array of the URLs \*======================================================================*/ function fetchlinks($URI) { if ($this->fetch($URI)) { if($this->lastredirectaddr) $URI = $this->lastredirectaddr; if(is_array($this->results)) { for($x=0;$xresults);$x++) $this->results[$x] = $this->_striplinks($this->results[$x]); } else $this->results = $this->_striplinks($this->results); if($this->expandlinks) $this->results = $this->_expandlinks($this->results, $URI); return true; } else return false; } /*======================================================================*\ Function: fetchform Purpose: fetch the form elements from a web page Input: $URI where you are fetching from Output: $this->results the resulting html form \*======================================================================*/ function fetchform($URI) { if ($this->fetch($URI)) { if(is_array($this->results)) { for($x=0;$xresults);$x++) $this->results[$x] = $this->_stripform($this->results[$x]); } else $this->results = $this->_stripform($this->results); return true; } else return false; } /*======================================================================*\ Function: fetchtext Purpose: fetch the text from a web page, stripping the links Input: $URI where you are fetching from Output: $this->results the text from the web page \*======================================================================*/ function fetchtext($URI) { if($this->fetch($URI)) { if(is_array($this->results)) { for($x=0;$xresults);$x++) $this->results[$x] = $this->_striptext($this->results[$x]); } else $this->results = $this->_striptext($this->results); return true; } else return false; } /*======================================================================*\ Function: submitlinks Purpose: grab links from a form submission Input: $URI where you are submitting from Output: $this->results an array of the links from the post \*======================================================================*/ function submitlinks($URI, $formvars="", $formfiles="") { if($this->submit($URI,$formvars, $formfiles)) { if($this->lastredirectaddr) $URI = $this->lastredirectaddr; if(is_array($this->results)) { for($x=0;$xresults);$x++) { $this->results[$x] = $this->_striplinks($this->results[$x]); if($this->expandlinks) $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); } } else { $this->results = $this->_striplinks($this->results); if($this->expandlinks) $this->results = $this->_expandlinks($this->results,$URI); } return true; } else return false; } /*======================================================================*\ Function: submittext Purpose: grab text from a form submission Input: $URI where you are submitting from Output: $this->results the text from the web page \*======================================================================*/ function submittext($URI, $formvars = "", $formfiles = "") { if($this->submit($URI,$formvars, $formfiles)) { if($this->lastredirectaddr) $URI = $this->lastredirectaddr; if(is_array($this->results)) { for($x=0;$xresults);$x++) { $this->results[$x] = $this->_striptext($this->results[$x]); if($this->expandlinks) $this->results[$x] = $this->_expandlinks($this->results[$x],$URI); } } else { $this->results = $this->_striptext($this->results); if($this->expandlinks) $this->results = $this->_expandlinks($this->results,$URI); } return true; } else return false; } /*======================================================================*\ Function: set_submit_multipart Purpose: Set the form submission content type to multipart/form-data \*======================================================================*/ function set_submit_multipart() { $this->_submit_type = "multipart/form-data"; } /*======================================================================*\ Function: set_submit_normal Purpose: Set the form submission content type to application/x-www-form-urlencoded \*======================================================================*/ function set_submit_normal() { $this->_submit_type = "application/x-www-form-urlencoded"; } /*======================================================================*\ Private functions \*======================================================================*/ /*======================================================================*\ Function: _striplinks Purpose: strip the hyperlinks from an html document Input: $document document to strip. Output: $match an array of the links \*======================================================================*/ function _striplinks($document) { preg_match_all("'<\s*a\s.*?href\s*=\s* # find ]+)) # if quote found, match up to next matching # quote, otherwise match up to next space 'isx",$document,$links); // catenate the non-empty matches from the conditional subpattern while(list($key,$val) = each($links[2])) { if(!empty($val)) $match[] = $val; } while(list($key,$val) = each($links[3])) { if(!empty($val)) $match[] = $val; } // return the links return $match; } /*======================================================================*\ Function: _stripform Purpose: strip the form elements from an html document Input: $document document to strip. Output: $match an array of the links \*======================================================================*/ function _stripform($document) { preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements); // catenate the matches $match = implode("\r\n",$elements[0]); // return the links return $match; } /*======================================================================*\ Function: _striptext Purpose: strip the text from an html document Input: $document document to strip. Output: $text the resulting text \*======================================================================*/ function _striptext($document) { // I didn't use preg eval (//e) since that is only available in PHP 4.0. // so, list your entities one by one here. I included some of the // more common ones. $search = array("']*?>.*?'si", // strip out javascript "'<[\/\!]*?[^<>]*?>'si", // strip out html tags "'([\r\n])[\s]+'", // strip out white space "'&(quot|#34|#034|#x22);'i", // replace html entities "'&(amp|#38|#038|#x26);'i", // added hexadecimal values "'&(lt|#60|#060|#x3c);'i", "'&(gt|#62|#062|#x3e);'i", "'&(nbsp|#160|#xa0);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&(reg|#174);'i", "'&(deg|#176);'i", "'&(#39|#039|#x27);'", "'&(euro|#8364);'i", // europe "'&a(uml|UML);'", // german "'&o(uml|UML);'", "'&u(uml|UML);'", "'&A(uml|UML);'", "'&O(uml|UML);'", "'&U(uml|UML);'", "'ß'i", ); $replace = array( "", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), chr(174), chr(176), chr(39), chr(128), "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß", ); $text = preg_replace($search,$replace,$document); return $text; } /*======================================================================*\ Function: _expandlinks Purpose: expand each link into a fully qualified URL Input: $links the links to qualify $URI the full URI to get the base from Output: $expandedLinks the expanded links \*======================================================================*/ function _expandlinks($links,$URI) { preg_match("/^[^\?]+/",$URI,$match); $match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]); $match = preg_replace("|/$|","",$match); $match_part = parse_url($match); $match_root = $match_part["scheme"]."://".$match_part["host"]; $search = array( "|^http://".preg_quote($this->host)."|i", "|^(\/)|i", "|^(?!http://)(?!mailto:)|i", "|/\./|", "|/[^\/]+/\.\./|" ); $replace = array( "", $match_root."/", $match."/", "/", "/" ); $expandedLinks = preg_replace($search,$replace,$links); return $expandedLinks; } /*======================================================================*\ Function: _httprequest Purpose: go get the http data from the server Input: $url the url to fetch $fp the current open file pointer $URI the full URI $body body contents to send if any (POST) Output: \*======================================================================*/ function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="") { $cookie_headers = ''; if($this->passcookies && $this->_redirectaddr) $this->setcookies(); $URI_PARTS = parse_url($URI); if(empty($url)) $url = "/"; $headers = $http_method." ".$url." ".$this->_httpversion."\r\n"; if(!empty($this->agent)) $headers .= "User-Agent: ".$this->agent."\r\n"; if(!empty($this->host) && !isset($this->rawheaders['Host'])) { $headers .= "Host: ".$this->host; if(!empty($this->port)) $headers .= ":".$this->port; $headers .= "\r\n"; } if(!empty($this->accept)) $headers .= "Accept: ".$this->accept."\r\n"; if(!empty($this->referer)) $headers .= "Referer: ".$this->referer."\r\n"; if(!empty($this->cookies)) { if(!is_array($this->cookies)) $this->cookies = (array)$this->cookies; reset($this->cookies); if ( count($this->cookies) > 0 ) { $cookie_headers .= 'Cookie: '; foreach ( $this->cookies as $cookieKey => $cookieVal ) { $cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; "; } $headers .= substr($cookie_headers,0,-2) . "\r\n"; } } if(!empty($this->rawheaders)) { if(!is_array($this->rawheaders)) $this->rawheaders = (array)$this->rawheaders; while(list($headerKey,$headerVal) = each($this->rawheaders)) $headers .= $headerKey.": ".$headerVal."\r\n"; } if(!empty($content_type)) { $headers .= "Content-type: $content_type"; if ($content_type == "multipart/form-data") $headers .= "; boundary=".$this->_mime_boundary; $headers .= "\r\n"; } if(!empty($body)) $headers .= "Content-length: ".strlen($body)."\r\n"; if(!empty($this->user) || !empty($this->pass)) $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n"; //add proxy auth headers if(!empty($this->proxy_user)) $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n"; $headers .= "\r\n"; // set the read timeout if needed if ($this->read_timeout > 0) socket_set_timeout($fp, $this->read_timeout); $this->timed_out = false; fwrite($fp,$headers.$body,strlen($headers.$body)); $this->_redirectaddr = false; unset($this->headers); while($currentHeader = fgets($fp,$this->_maxlinelen)) { if ($this->read_timeout > 0 && $this->_check_timeout($fp)) { $this->status=-100; return false; } if($currentHeader == "\r\n") break; // if a header begins with Location: or URI:, set the redirect if(preg_match("/^(Location:|URI:)/i",$currentHeader)) { // get URL portion of the redirect preg_match("/^(Location:|URI:)[ ]+(.*)/i",chop($currentHeader),$matches); // look for :// in the Location header to see if hostname is included if(!preg_match("|\:\/\/|",$matches[2])) { // no host in the path, so prepend $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; // eliminate double slash if(!preg_match("|^/|",$matches[2])) $this->_redirectaddr .= "/".$matches[2]; else $this->_redirectaddr .= $matches[2]; } else $this->_redirectaddr = $matches[2]; } if(preg_match("|^HTTP/|",$currentHeader)) { if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status)) { $this->status= $status[1]; } $this->response_code = $currentHeader; } $this->headers[] = $currentHeader; } $results = ''; do { $_data = fread($fp, $this->maxlength); if (strlen($_data) == 0) { break; } $results .= $_data; } while(true); if ($this->read_timeout > 0 && $this->_check_timeout($fp)) { $this->status=-100; return false; } // check if there is a a redirect meta tag if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) { $this->_redirectaddr = $this->_expandlinks($match[1],$URI); } // have we hit our frame depth and is there frame src to fetch? if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) { $this->results[] = $results; for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); } // have we already fetched framed content? elseif(is_array($this->results)) $this->results[] = $results; // no framed content else $this->results = $results; return true; } /*======================================================================*\ Function: _httpsrequest Purpose: go get the https data from the server using curl Input: $url the url to fetch $URI the full URI $body body contents to send if any (POST) Output: \*======================================================================*/ function _httpsrequest($url,$URI,$http_method,$content_type="",$body="") { if($this->passcookies && $this->_redirectaddr) $this->setcookies(); $headers = array(); $URI_PARTS = parse_url($URI); if(empty($url)) $url = "/"; // GET ... header not needed for curl //$headers[] = $http_method." ".$url." ".$this->_httpversion; if(!empty($this->agent)) $headers[] = "User-Agent: ".$this->agent; if(!empty($this->host)) if(!empty($this->port)) $headers[] = "Host: ".$this->host.":".$this->port; else $headers[] = "Host: ".$this->host; if(!empty($this->accept)) $headers[] = "Accept: ".$this->accept; if(!empty($this->referer)) $headers[] = "Referer: ".$this->referer; if(!empty($this->cookies)) { if(!is_array($this->cookies)) $this->cookies = (array)$this->cookies; reset($this->cookies); if ( count($this->cookies) > 0 ) { $cookie_str = 'Cookie: '; foreach ( $this->cookies as $cookieKey => $cookieVal ) { $cookie_str .= $cookieKey."=".urlencode($cookieVal)."; "; } $headers[] = substr($cookie_str,0,-2); } } if(!empty($this->rawheaders)) { if(!is_array($this->rawheaders)) $this->rawheaders = (array)$this->rawheaders; while(list($headerKey,$headerVal) = each($this->rawheaders)) $headers[] = $headerKey.": ".$headerVal; } if(!empty($content_type)) { if ($content_type == "multipart/form-data") $headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary; else $headers[] = "Content-type: $content_type"; } if(!empty($body)) $headers[] = "Content-length: ".strlen($body); if(!empty($this->user) || !empty($this->pass)) $headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass); for($curr_header = 0; $curr_header < count($headers); $curr_header++) { $safer_header = strtr( $headers[$curr_header], "\"", " " ); $cmdline_params .= " -H \"".$safer_header."\""; } if(!empty($body)) $cmdline_params .= " -d \"$body\""; if($this->read_timeout > 0) $cmdline_params .= " -m ".$this->read_timeout; $headerfile = tempnam($temp_dir, "sno"); $safer_URI = strtr( $URI, "\"", " " ); // strip quotes from the URI to avoid shell access exec(escapeshellcmd($this->curl_path." -D \"$headerfile\"".$cmdline_params." \"".$safer_URI."\""),$results,$return); if($return) { $this->error = "Error: cURL could not retrieve the document, error $return."; return false; } $results = implode("\r\n",$results); $result_headers = file("$headerfile"); $this->_redirectaddr = false; unset($this->headers); for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) { // if a header begins with Location: or URI:, set the redirect if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader])) { // get URL portion of the redirect preg_match("/^(Location: |URI:)\s+(.*)/",chop($result_headers[$currentHeader]),$matches); // look for :// in the Location header to see if hostname is included if(!preg_match("|\:\/\/|",$matches[2])) { // no host in the path, so prepend $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; // eliminate double slash if(!preg_match("|^/|",$matches[2])) $this->_redirectaddr .= "/".$matches[2]; else $this->_redirectaddr .= $matches[2]; } else $this->_redirectaddr = $matches[2]; } if(preg_match("|^HTTP/|",$result_headers[$currentHeader])) $this->response_code = $result_headers[$currentHeader]; $this->headers[] = $result_headers[$currentHeader]; } // check if there is a a redirect meta tag if(preg_match("']*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) { $this->_redirectaddr = $this->_expandlinks($match[1],$URI); } // have we hit our frame depth and is there frame src to fetch? if(($this->_framedepth < $this->maxframes) && preg_match_all("']+)'i",$results,$match)) { $this->results[] = $results; for($x=0; $x_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); } // have we already fetched framed content? elseif(is_array($this->results)) $this->results[] = $results; // no framed content else $this->results = $results; unlink("$headerfile"); return true; } /*======================================================================*\ Function: setcookies() Purpose: set cookies for a redirection \*======================================================================*/ function setcookies() { for($x=0; $xheaders); $x++) { if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $this->headers[$x],$match)) $this->cookies[$match[1]] = urldecode($match[2]); } } /*======================================================================*\ Function: _check_timeout Purpose: checks whether timeout has occurred Input: $fp file pointer \*======================================================================*/ function _check_timeout($fp) { if ($this->read_timeout > 0) { $fp_status = socket_get_status($fp); if ($fp_status["timed_out"]) { $this->timed_out = true; return true; } } return false; } /*======================================================================*\ Function: _connect Purpose: make a socket connection Input: $fp file pointer \*======================================================================*/ function _connect(&$fp) { if(!empty($this->proxy_host) && !empty($this->proxy_port)) { $this->_isproxy = true; $host = $this->proxy_host; $port = $this->proxy_port; } else { $host = $this->host; $port = $this->port; } $this->status = 0; if($fp = fsockopen( $host, $port, $errno, $errstr, $this->_fp_timeout )) { // socket connection succeeded return true; } else { // socket connection failed $this->status = $errno; switch($errno) { case -3: $this->error="socket creation failed (-3)"; case -4: $this->error="dns lookup failure (-4)"; case -5: $this->error="connection refused or timed out (-5)"; default: $this->error="connection failed (".$errno.")"; } return false; } } /*======================================================================*\ Function: _disconnect Purpose: disconnect a socket connection Input: $fp file pointer \*======================================================================*/ function _disconnect($fp) { return(fclose($fp)); } /*======================================================================*\ Function: _prepare_post_body Purpose: Prepare post body according to encoding type Input: $formvars - form variables $formfiles - form upload files Output: post body \*======================================================================*/ function _prepare_post_body($formvars, $formfiles) { settype($formvars, "array"); settype($formfiles, "array"); $postdata = ''; if (count($formvars) == 0 && count($formfiles) == 0) return; switch ($this->_submit_type) { case "application/x-www-form-urlencoded": reset($formvars); while(list($key,$val) = each($formvars)) { if (is_array($val) || is_object($val)) { while (list($cur_key, $cur_val) = each($val)) { $postdata .= urlencode($key)."[]=".urlencode($cur_val)."&"; } } else $postdata .= urlencode($key)."=".urlencode($val)."&"; } break; case "multipart/form-data": $this->_mime_boundary = "Snoopy".md5(uniqid(microtime())); reset($formvars); while(list($key,$val) = each($formvars)) { if (is_array($val) || is_object($val)) { while (list($cur_key, $cur_val) = each($val)) { $postdata .= "--".$this->_mime_boundary."\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; $postdata .= "$cur_val\r\n"; } } else { $postdata .= "--".$this->_mime_boundary."\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; $postdata .= "$val\r\n"; } } reset($formfiles); while (list($field_name, $file_names) = each($formfiles)) { settype($file_names, "array"); while (list(, $file_name) = each($file_names)) { if (!is_readable($file_name)) continue; $fp = fopen($file_name, "r"); while (!feof($fp)) { $file_content .= fread($fp, filesize($file_name)); } fclose($fp); $base_name = basename($file_name); $postdata .= "--".$this->_mime_boundary."\r\n"; $postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n"; $postdata .= "$file_content\r\n"; } } $postdata .= "--".$this->_mime_boundary."--\r\n"; break; } return $postdata; } } endif; ?> 9wordpress/wp-includes/.svn/text-base/comment.php.svn-baseget_results("SELECT COUNT(*) as CNT, MIN(NM_NUM_GROUP) as MING, MAX(NM_NUM_GROUP) as MAXG FROM DB.DBA.NEWS_MULTI_MSG WHERE NM_GROUP = " . $grp); $all_mess = $row[0]->CNT; $min_num = $row[0]->MING; $max_num = $row[0]->MAXG; $last_num = $wpdb->get_var("SELECT NG_NEXT_NUM FROM DB.DBA.NEWS_GROUPS WHERE NG_GROUP = " . $grp); if ($last_num == null) $last_num = 0; if ($min_num == null) $min_num = 0; if ($max_num == null) $max_num = 0; if ($last_num == null) $last_num = 0; $wpdb->query("UPDATE DB.DBA.NEWS_GROUPS SET NG_NUM = " . intval($all_mess) . " , NG_FIRST = " . intval($min_num). ", NG_LAST = " . intval($max_num) . " WHERE NG_GROUP= " . intval($grp)); } function wordpress_guid () { return '85FBC77C-7FB5-11DB-BDC2-7A5655D89593'; } function RFC_ID ($postid, $commid = null) { $hash = md5 (wordpress_guid()); $host = `hostname`; $ret = ''; if ($commid == null) $ret = sprintf ("<%s.%s@%s>", $postid, $hash, $host); else $ret = sprintf ("<%s.%s.%s@%s>", $postid, $commid, $hash, $host); return $ret; } function MAIL_SUBJECT ($txt, $id = null) { $enc = base64_encode ($txt); $enc = str_replace ("\r\n", '', $enc); $txt = "'Subject', '=?UTF-8?B?".$enc."?=',"; if ($id != null) $txt.= "'X-WordPress-ID".mediawiki_guid()."','".$id."',"; return $txt; } function MAIL_SUBJECT_TXT ($txt, $id = null) { $enc = base64_encode ($txt); $enc = str_replace ("\r\n", '', $enc); $txt = "Subject: =?UTF-8?B?".$enc."?=\r\n"; if ($id != null) $txt.= "X-WordPress-ID".mediawiki_guid().": ".$id."\r\n"; return $txt; } function RFC_HEADER ($mid, $refs, $gid, $title, $rec, $author_mail, $lenhead, $lenall) { $ses = "serialize (vector (vector (".MAIL_SUBJECT($title); $ses .= sprintf ("'Date','%s',", $rec); $ses .= sprintf ("'Message-Id', '%s',", $mid); if ($refs != null) $ses .= sprintf ("'References', '%s',", $refs); $ses .= sprintf ("'From', '%s',", $author_mail); $ses .= sprintf ("'Content-Type', 'text/html', 'charset','UTF-8',"); $ses .= sprintf ("'Newsgroups', '%s'", $gid); // $ses .= "'Newsgroups','".$gid."'"; $ses .= "),vector(".$lenhead.",".$lenall.")))"; return $ses; } function RFC_HEADER_TXT ($mid, $refs, $gid, $title, $rec, $author_mail) { $ses = MAIL_SUBJECT_TXT($title); $ses .= sprintf ("Date: %s\r\n", $rec); $ses .= sprintf ("Message-Id: %s\r\n", $mid); if ($refs != null) $ses .= sprintf ("References: %s\r\n", $refs); $ses .= sprintf ("From: %s\r\n", $author_mail); $ses .= sprintf ("Content-Type: text/html charset=UTF-8\r\n"); $ses .= sprintf ("Newsgroups: %s\r\n", $gid); return $ses; } function RFC_MSG ($head, $body) { $ses = $head; $ses .= "\r\n\r\n"; $ses .= $body; $ses .= "\r\n.\r\n"; return $ses; } function get_now() { global $wpdb; return $wpdb->get_var("select DB.DBA.date_rfc1123(now()) as NOW"); } function get_raw_now() { global $wpdb; return $wpdb->get_var ('select now() as NOW'); } function notifyOnPageChange($title, $timestamp, $summary, $message, $emailaddress) { // var $to, $subject, $body, $replyto, $from; // var $user, $title, $timestamp, $summary, $minorEdit, $oldid; global $wpdb; $nowstamp = get_now (); $topicname = $title; $subject = $summary; $description = $subject; $topicname = str_replace (' ', '-', $topicname); $nmtype = 'NNTP'; $cnt = $wpdb->get_var ( "select count(*) FROM DB.DBA.NEWS_GROUPS WHERE NG_NAME = '$topicname'" ); if ( intval($cnt) == 0) { $timestamp = get_raw_now (); $wpdb->query ( "INSERT INTO DB.DBA.NEWS_GROUPS ( NG_NEXT_NUM, NG_NAME, NG_DESC, NG_SERVER, NG_POST, NG_UP_TIME, NG_CREAT, NG_UP_INT, NG_PASS, NG_UP_MESS, NG_NUM, NG_FIRST, NG_LAST, NG_LAST_OUT, NG_CLEAR_INT, NG_TYPE ) VALUES ( 0, '$topicname', '$description', null, null, now(), now(), 30, 0, 0, 0, 0, 0, 0, 120, 'NNTP')" ); $row = $wpdb->get_results (" SELECT NG_GROUP, NG_NEXT_NUM FROM DB.DBA.NEWS_GROUPS WHERE NG_NAME = '$topicname'"); $groupid = intval($row[0]->NG_GROUP); $ngnext = intval($row[0]->NG_NEXT_NUM); $rate = doubleval(1.0); $nowstamp = get_now (); $order = $wpdb->get_var ( "SELECT max(HA_ORDER) as ORD FROM DB.DBA.HTTP_ACL WHERE HA_LIST = 'NEWS'"); $order += 1; $query_text = "INSERT INTO DB.DBA.HTTP_ACL ( HA_LIST, HA_OBJECT , HA_ORDER , HA_CLIENT_IP, HA_FLAG, HA_RW, HA_DEST_IP , HA_RATE ) VALUES ( 'NEWS', $groupid , $order , '*', 0, 0, '*', $rate )" ; $wpdb->query ($query_text); } else { $row = $wpdb->get_results (" SELECT NG_GROUP, NG_NEXT_NUM FROM DB.DBA.NEWS_GROUPS WHERE NG_NAME = '$topicname'"); $groupid = intval($row[0]->NG_GROUP); $ngnext = intval($row[0]->NG_NEXT_NUM); } if ($ngnext < 1) { $ngnext = 1; $msgid = RFC_ID ($groupid); } else { $msgid = RFC_ID ($groupid, $ngnext); } $usermail = $emailaddress; // $subject = $summary; $nmheadtxt = RFC_HEADER_TXT ($msgid, null, $topicname, $subject, $nowstamp, $usermail); $len1 = strlen($nmheadtxt); $nmbody = RFC_MSG($nmheadtxt,$message); $len2 = strlen($nmbody); $nmhead = RFC_HEADER ($msgid, null, $topicname, $subject, $nowstamp, $usermail, $len1,$len2); $qu = 'INSERT INTO'. ' DB.DBA.NEWS_MSG'. '(NM_TYPE, NM_OWN, NM_ID, NM_REF, NM_READ, NM_REC_DATE, NM_STAT,'. 'NM_TRY_POST, NM_DELETED, NM_HEAD, NM_BODY, NM_BODY_ID) values'. "('NNTP',0,'".$msgid."',null,0,now(),0,". 'null,0,'.$nmhead.",'". strencode($nmbody) . "',".$ngnext.')'; $wpdb->query ($qu); $wpdb->query ( "INSERT INTO DB.DBA.NEWS_MULTI_MSG ( NM_KEY_ID , NM_GROUP, NM_NUM_GROUP ) VALUES ( '$msgid', $groupid, $ngnext)" ); $ngnext = $ngnext + 1; $wpdb->query ('set triggers off'); $wpdb->query ( "UPDATE DB.DBA.NEWS_GROUPS SET NG_NEXT_NUM = $ngnext WHERE NG_NAME = '$topicname'"); ns_up_num ($groupid); $wpdb->query ('set triggers off'); } function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) { global $wpdb; if ( 1 == get_option('comment_moderation') ) return false; // If moderation is set to manual if ( preg_match_all("|(href\t*?=\t*?['\"]?)?(https?:)?//|i", $comment, $out) >= get_option('comment_max_links') ) return false; // Check # of external links $mod_keys = trim(get_option('moderation_keys')); if ( !empty($mod_keys) ) { $words = explode("\n", $mod_keys ); foreach ($words as $word) { $word = trim($word); // Skip empty lines if ( empty($word) ) continue; // Do some escaping magic so that '#' chars in the // spam words don't break things: $word = preg_quote($word, '#'); $pattern = "#$word#i"; if ( preg_match($pattern, $author) ) return false; if ( preg_match($pattern, $email) ) return false; if ( preg_match($pattern, $url) ) return false; if ( preg_match($pattern, $comment) ) return false; if ( preg_match($pattern, $user_ip) ) return false; if ( preg_match($pattern, $user_agent) ) return false; } } // Comment whitelisting: if ( 1 == get_option('comment_whitelist')) { if ( 'trackback' == $comment_type || 'pingback' == $comment_type ) { // check if domain is in blogroll $uri = parse_url($url); $domain = $uri['host']; $uri = parse_url( get_option('home') ); $home_domain = $uri['host']; if ( $wpdb->get_var("SELECT link_id FROM $wpdb->links WHERE link_url LIKE ('%$domain%')") || $domain == $home_domain ) return true; else return false; } elseif ( $author != '' && $email != '' ) { $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = 1"); // LIMIT 1 if ( ( 1 == $ok_to_comment ) && ( empty($mod_keys) || false == strpos( $email, $mod_keys) ) ) return true; else return false; } else { return false; } } return true; } function get_approved_comments($post_id) { global $wpdb; $post_id = (int) $post_id; return $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post_id . " AND comment_approved = 1 ORDER BY comment_date"); } // Retrieves comment data given a comment ID or comment object. // Handles comment caching. function &get_comment(&$comment, $output = OBJECT) { global $comment_cache, $wpdb; if ( empty($comment) ) return null; if ( is_object($comment) ) { if ( !isset($comment_cache[$comment->comment_ID]) ) $comment_cache[$comment->comment_ID] = &$comment; $_comment = & $comment_cache[$comment->comment_ID]; } else { $comment = (int) $comment; if ( !isset($comment_cache[$comment]) ) { $_comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = " . $comment); // LIMIT 1 $comment_cache[$comment->comment_ID] = & $_comment; } else { $_comment = & $comment_cache[$comment]; } } if ( $output == OBJECT ) { return $_comment; } elseif ( $output == ARRAY_A ) { return get_object_vars($_comment); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_comment)); } else { return $_comment; } } // Deprecate in favor of get_comment()? function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { // less flexible, but saves DB queries global $postc, $id, $commentdata, $wpdb; if ( $no_cache ) { $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = " . $comment_ID; if ( false == $include_unapproved ) $query .= " AND comment_approved = '1'"; $myrow = $wpdb->get_row($query, ARRAY_A); } else { $myrow['comment_ID'] = $postc->comment_ID; $myrow['comment_post_ID'] = $postc->comment_post_ID; $myrow['comment_author'] = $postc->comment_author; $myrow['comment_author_email'] = $postc->comment_author_email; $myrow['comment_author_url'] = $postc->comment_author_url; $myrow['comment_author_IP'] = $postc->comment_author_IP; $myrow['comment_date'] = $postc->comment_date; $myrow['comment_content'] = $postc->comment_content; $myrow['comment_karma'] = $postc->comment_karma; $myrow['comment_approved'] = $postc->comment_approved; $myrow['comment_type'] = $postc->comment_type; } return $myrow; } function get_lastcommentmodified($timezone = 'server') { global $cache_lastcommentmodified, $pagenow, $wpdb; $add_seconds_blog = get_option('gmt_offset') * 3600; $add_seconds_server = date('Z'); $now = current_time('mysql', 1); if ( !isset($cache_lastcommentmodified[$timezone]) ) { switch ( strtolower($timezone)) { case 'gmt': $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC"); // LIMIT 1 break; case 'blog': $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC"); // LIMIT 1 break; case 'server': $lastcommentmodified = $wpdb->get_var("SELECT dateadd( 'second', " . $add_seconds_server . " , stringdate(comment_date_gmt) ) FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC"); // LIMIT 1 break; } $cache_lastcommentmodified[$timezone] = $lastcommentmodified; } else { $lastcommentmodified = $cache_lastcommentmodified[$timezone]; } return $lastcommentmodified; } function sanitize_comment_cookies() { if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) { $comment_author = apply_filters('pre_comment_author_name', $_COOKIE['comment_author_'.COOKIEHASH]); $comment_author = stripslashes($comment_author); $comment_author = attribute_escape($comment_author); $_COOKIE['comment_author_'.COOKIEHASH] = $comment_author; } if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) { $comment_author_email = apply_filters('pre_comment_author_email', $_COOKIE['comment_author_email_'.COOKIEHASH]); $comment_author_email = stripslashes($comment_author_email); $comment_author_email = attribute_escape($comment_author_email); $_COOKIE['comment_author_email_'.COOKIEHASH] = $comment_author_email; } if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) { $comment_author_url = apply_filters('pre_comment_author_url', $_COOKIE['comment_author_url_'.COOKIEHASH]); $comment_author_url = stripslashes($comment_author_url); $comment_author_url = clean_url($comment_author_url); $_COOKIE['comment_author_url_'.COOKIEHASH] = $comment_author_url; } } function wp_allow_comment($commentdata) { global $wpdb; extract($commentdata, EXTR_SKIP); // Simple duplicate check $dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = " . $comment_post_ID . " AND ( comment_author = '$comment_author' "; if ( $comment_author_email ) $dupe .= "OR comment_author_email = '$comment_author_email' "; $dupe .= ") AND comment_content = '$comment_content'"; // LIMIT 1 if ( $wpdb->get_var($dupe) ) wp_die( __('Duplicate comment detected; it looks as though you\'ve already said that!') ); // Simple flood-protection if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = $comment_author_IP OR comment_author_email = '$comment_author_email' ORDER BY comment_date DESC") ) { // LIMIT 1 $time_lastcomment = mysql2date('U', $lasttime); $time_newcomment = mysql2date('U', $comment_date_gmt); $flood_die = apply_filters('comment_flood_filter', false, $time_lastcomment, $time_newcomment); if ( $flood_die ) { do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment); wp_die( __('You are posting comments too quickly. Slow down.') ); } } if ( $user_id ) { $userdata = get_userdata($user_id); $user = new WP_User($user_id); $post_author = $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = " . $comment_post_ID); // LIMIT 1 } if ( $userdata && ( $user_id == $post_author || $user->has_cap('level_9') ) ) { // The author and the admins get respect. $approved = 1; } else { // Everyone else's comments will be checked. if ( check_comment($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent, $comment_type) ) $approved = 1; else $approved = 0; if ( wp_blacklist_check($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent) ) $approved = 'spam'; } $approved = apply_filters('pre_comment_approved', $approved); return $approved; } function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) { global $wpdb; do_action('wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent); if ( preg_match_all('/&#(\d+);/', $comment . $author . $url, $chars) ) { foreach ( (array) $chars[1] as $char ) { // If it's an encoded char in the normal ASCII set, reject if ( 38 == $char ) continue; // Unless it's & if ( $char < 128 ) return true; } } $mod_keys = trim( get_option('blacklist_keys') ); if ( '' == $mod_keys ) return false; // If moderation keys are empty $words = explode("\n", $mod_keys ); foreach ( (array) $words as $word ) { $word = trim($word); // Skip empty lines if ( empty($word) ) { continue; } // Do some escaping magic so that '#' chars in the // spam words don't break things: $word = preg_quote($word, '#'); $pattern = "#$word#i"; if ( preg_match($pattern, $author) || preg_match($pattern, $email) || preg_match($pattern, $url) || preg_match($pattern, $comment) || preg_match($pattern, $user_ip) || preg_match($pattern, $user_agent) ) return true; } return false; } function wp_delete_comment($comment_id) { global $wpdb; do_action('delete_comment', $comment_id); $comment = get_comment($comment_id); if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID = " . $comment_id ) ) // LIMIT 1 return false; $post_id = $comment->comment_post_ID; if ( $post_id && $comment->comment_approved == 1 ) wp_update_comment_count($post_id); do_action('wp_set_comment_status', $comment_id, 'delete'); return true; } function wp_get_comment_status($comment_id) { global $wpdb; $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID = " . $comment_id); // LIMIT 1 if ( $result == NULL ) return 'deleted'; elseif ( $result == '1' ) return 'approved'; elseif ( $result == '0' ) return 'unapproved'; elseif ( $result == 'spam' ) return 'spam'; else return false; } function wp_get_current_commenter() { // Cookies should already be sanitized. $comment_author = ''; if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) $comment_author = $_COOKIE['comment_author_'.COOKIEHASH]; $comment_author_email = ''; if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) $comment_author_email = $_COOKIE['comment_author_email_'.COOKIEHASH]; $comment_author_url = ''; if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) $comment_author_url = $_COOKIE['comment_author_url_'.COOKIEHASH]; return compact('comment_author', 'comment_author_email', 'comment_author_url'); } function wp_insert_comment($commentdata) { global $wpdb; extract($commentdata, EXTR_SKIP); if ( ! isset($comment_author_IP) ) $comment_author_IP = preg_replace( '/[^0-9., ]/', '',$_SERVER['REMOTE_ADDR'] ); if ( ! isset($comment_date) ) $comment_date = current_time('mysql'); if ( ! isset($comment_date_gmt) ) $comment_date_gmt = get_gmt_from_date($comment_date); if ( ! isset($comment_parent) ) $comment_parent = 0; if ( ! isset($comment_approved) ) $comment_approved = 1; if ( ! isset($user_id) ) $user_id = 0; $result = $wpdb->insert("INSERT INTO $wpdb->comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES ('$comment_post_ID', '$comment_author', '$comment_author_email', '$comment_author_url', '$comment_author_IP', '$comment_date', '$comment_date_gmt', '$comment_content', '$comment_approved', '$comment_agent', '$comment_type', '$comment_parent', $user_id) ", $wpdb->comments, "comment_ID"); $id = (int) $wpdb->insert_id; if ( $comment_approved == 1) wp_update_comment_count($comment_post_ID); return $id; } function wp_filter_comment($commentdata) { $commentdata['user_id'] = apply_filters('pre_user_id', $commentdata['user_ID']); $commentdata['comment_agent'] = apply_filters('pre_comment_user_agent', $commentdata['comment_agent']); $commentdata['comment_author'] = apply_filters('pre_comment_author_name', $commentdata['comment_author']); $commentdata['comment_content'] = apply_filters('pre_comment_content', $commentdata['comment_content']); $commentdata['comment_author_IP'] = apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP']); $commentdata['comment_author_url'] = apply_filters('pre_comment_author_url', $commentdata['comment_author_url']); $commentdata['comment_author_email'] = apply_filters('pre_comment_author_email', $commentdata['comment_author_email']); $commentdata['filtered'] = true; return $commentdata; } function wp_throttle_comment_flood($block, $time_lastcomment, $time_newcomment) { if ( $block ) // a plugin has already blocked... we'll let that decision stand return $block; if ( ($time_newcomment - $time_lastcomment) < 15 ) return true; return false; } function wp_new_comment( $commentdata ) { global $wpdb; $commentdata = apply_filters('preprocess_comment', $commentdata); $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; $commentdata['user_ID'] = (int) $commentdata['user_ID']; $commentdata['comment_author_IP'] = preg_replace( '/[^0-9., ]/', '',$_SERVER['REMOTE_ADDR'] ); $commentdata['comment_agent'] = $_SERVER['HTTP_USER_AGENT']; $commentdata['comment_date'] = current_time('mysql'); $commentdata['comment_date_gmt'] = current_time('mysql', 1); $commentdata = wp_filter_comment($commentdata); $commentdata['comment_approved'] = wp_allow_comment($commentdata); $comment_ID = wp_insert_comment($commentdata); $title = $wpdb->get_var("SELECT option_value from $wpdb->options where option_name = 'blogname'"); $title .= ":" . $wpdb->get_var("SELECT post_title from $wpdb->posts where ID = ". $commentdata['comment_post_ID']); notifyOnPageChange($title, $commentdata['comment_date'], $commentdata['comment_author'], $commentdata['comment_content'], $commentdata['comment_author_email']); do_action('comment_post', $comment_ID, $commentdata['comment_approved']); if ( 'spam' != $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching if ( '0' == $commentdata['comment_approved'] ) wp_notify_moderator($comment_ID); $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment if ( get_option('comments_notify') && $commentdata['comment_approved'] && $post->post_author != $commentdata['user_ID'] ) wp_notify_postauthor($comment_ID, $commentdata['comment_type']); } return $comment_ID; } function wp_set_comment_status($comment_id, $comment_status) { global $wpdb; switch ( $comment_status ) { case 'hold': $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID = " . $comment_id; // LIMIT 1 break; case 'approve': $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID = " . $comment_id; // LIMIT 1 break; case 'spam': $query = "UPDATE $wpdb->comments SET comment_approved='spam' WHERE comment_ID = " . $comment_id; break; case 'delete': return wp_delete_comment($comment_id); break; default: return false; } if ( !$wpdb->query($query) ) return false; do_action('wp_set_comment_status', $comment_id, $comment_status); $comment = get_comment($comment_id); wp_update_comment_count($comment->comment_post_ID); return true; } function wp_update_comment($commentarr) { global $wpdb; // First, get all of the original fields $comment = get_comment($commentarr['comment_ID'], ARRAY_A); // Escape data pulled from DB. foreach ( (array) $comment as $key => $value ) $comment[$key] = $wpdb->escape($value); // Merge old and new fields with new fields overwriting old ones. $commentarr = array_merge($comment, $commentarr); $commentarr = wp_filter_comment( $commentarr ); // Now extract the merged array. extract($commentarr, EXTR_SKIP); $comment_content = apply_filters('comment_save_pre', $comment_content); $comment_date_gmt = get_gmt_from_date($comment_date); $result = $wpdb->query( "UPDATE $wpdb->comments SET comment_content = '$comment_content', comment_author = '$comment_author', comment_author_email = '$comment_author_email', comment_approved = '$comment_approved', comment_author_url = '$comment_author_url', comment_date = '$comment_date', comment_date_gmt = '$comment_date_gmt' WHERE comment_ID = $comment_ID" ); $rval = $wpdb->rows_affected; wp_update_comment_count($comment_post_ID); do_action('edit_comment', $comment_ID); return $rval; } function wp_update_comment_count($post_id) { global $wpdb, $comment_count_cache; $post_id = (int) $post_id; if ( !$post_id ) return false; $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = " . $post_id . " AND comment_approved = '1'"); $wpdb->query("UPDATE $wpdb->posts SET comment_count = $count WHERE ID = " . $post_id); $comment_count_cache[$post_id] = $count; $post = get_post($post_id); if ( 'page' == $post->post_type ) clean_page_cache( $post_id ); else clean_post_cache( $post_id ); do_action('edit_post', $post_id); return true; } // // Ping and trackback functions. // function discover_pingback_server_uri($url, $timeout_bytes = 2048) { global $wp_version; $byte_count = 0; $contents = ''; $headers = ''; $pingback_str_dquote = 'rel="pingback"'; $pingback_str_squote = 'rel=\'pingback\''; $x_pingback_str = 'x-pingback: '; $pingback_href_original_pos = 27; extract(parse_url($url), EXTR_SKIP); if ( !isset($host) ) // Not an URL. This should never happen. return false; $path = ( !isset($path) ) ? '/' : $path; $path .= ( isset($query) ) ? '?' . $query : ''; $port = ( isset($port) ) ? $port : 80; // Try to connect to the server at $host $fp = @fsockopen($host, $port, $errno, $errstr, 2); if ( !$fp ) // Couldn't open a connection to $host return false; // Send the GET request $request = "GET $path HTTP/1.1\r\nHost: $host\r\nUser-Agent: WordPress/$wp_version \r\n\r\n"; // ob_end_flush(); fputs($fp, $request); // Let's check for an X-Pingback header first while ( !feof($fp) ) { $line = fgets($fp, 512); if ( trim($line) == '' ) break; $headers .= trim($line)."\n"; $x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str); if ( $x_pingback_header_offset ) { // We got it! preg_match('#x-pingback: (.+)#is', $headers, $matches); $pingback_server_url = trim($matches[1]); return $pingback_server_url; } if ( strpos(strtolower($headers), 'content-type: ') ) { preg_match('#content-type: (.+)#is', $headers, $matches); $content_type = trim($matches[1]); } } if ( preg_match('#(image|audio|video|model)/#is', $content_type) ) // Not an (x)html, sgml, or xml page, no use going further return false; while ( !feof($fp) ) { $line = fgets($fp, 1024); $contents .= trim($line); $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote); $pingback_link_offset_squote = strpos($contents, $pingback_str_squote); if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) { $quote = ($pingback_link_offset_dquote) ? '"' : '\''; $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote; $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset); $pingback_href_start = $pingback_href_pos+6; $pingback_href_end = @strpos($contents, $quote, $pingback_href_start); $pingback_server_url_len = $pingback_href_end - $pingback_href_start; $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len); // We may find rel="pingback" but an incomplete pingback URL if ( $pingback_server_url_len > 0 ) // We got it! return $pingback_server_url; } $byte_count += strlen($line); if ( $byte_count > $timeout_bytes ) { // It's no use going further, there probably isn't any pingback // server to find in this file. (Prevents loading large files.) return false; } } // We didn't find anything. return false; } function do_all_pings() { global $wpdb; // Do pingbacks while ($ping = $wpdb->get_row("SELECT * FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_pingme'")) { // LIMIT 1 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $ping->ID . " AND meta_key = '_pingme'"); pingback($ping->post_content, $ping->ID); } // Do Enclosures while ($enclosure = $wpdb->get_row("SELECT * FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_encloseme'")) { // LIMIT 1 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $enclosure->ID . " AND meta_key = '_encloseme'"); do_enclose($enclosure->post_content, $enclosure->ID); } // Do Trackbacks $trackbacks = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE CHAR_LENGTH(TRIM(to_ping)) > 7 AND post_status = 'publish'"); if ( is_array($trackbacks) ) { foreach ( $trackbacks as $trackback ) do_trackbacks($trackback->ID); } //Do Update Services/Generic Pings generic_ping(); } function do_trackbacks($post_id) { global $wpdb; $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $post_id); $to_ping = get_to_ping($post_id); $pinged = get_pung($post_id); if ( empty($to_ping) ) { $wpdb->query("UPDATE $wpdb->posts SET to_ping = '' WHERE ID = " . $post_id); return; } if ( empty($post->post_excerpt) ) $excerpt = apply_filters('the_content', $post->post_content); else $excerpt = apply_filters('the_excerpt', $post->post_excerpt); $excerpt = str_replace(']]>', ']]>', $excerpt); $excerpt = strip_tags($excerpt); if ( function_exists('mb_strcut') ) // For international trackbacks $excerpt = mb_strcut($excerpt, 0, 252, get_option('blog_charset')) . '...'; else $excerpt = substr($excerpt, 0, 252) . '...'; $post_title = apply_filters('the_title', $post->post_title); $post_title = strip_tags($post_title); if ( $to_ping ) { foreach ( (array) $to_ping as $tb_ping ) { $tb_ping = trim($tb_ping); if ( !in_array($tb_ping, $pinged) ) { trackback($tb_ping, $post_title, $excerpt, $post_id); $pinged[] = $tb_ping; } else { $wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID = " . $post_id ); } } } } function generic_ping($post_id = 0) { $services = get_option('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ( (array) $services as $service ) weblog_ping($service); } return $post_id; } function pingback($content, $post_ID) { global $wp_version, $wpdb; include_once(ABSPATH . WPINC . '/class-IXR.php'); // original code by Mort (http://mort.mine.nu:8080) $log = debug_fopen(ABSPATH . '/pingback.log', 'a'); $post_links = array(); debug_fwrite($log, 'BEGIN ' . date('YmdHis', time()) . "\n"); $pung = get_pung($post_ID); // Variables $ltrs = '\w'; $gunk = '/#~:.?+=&%@!\-'; $punc = '.:?\-'; $any = $ltrs . $gunk . $punc; // Step 1 // Parsing the post, external links (if any) are stored in the $post_links array // This regexp comes straight from phpfreaks.com // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp); // Debug debug_fwrite($log, 'Post contents:'); debug_fwrite($log, $content."\n"); // Step 2. // Walking thru the links array // first we get rid of links pointing to sites, not to specific files // Example: // http://dummy-weblog.org // http://dummy-weblog.org/ // http://dummy-weblog.org/post.php // We don't wanna ping first and second types, even if they have a valid foreach ( $post_links_temp[0] as $link_test ) : if ( !in_array($link_test, $pung) && (url_to_postid($link_test) != $post_ID) // If we haven't pung it already and it isn't a link to itself && !is_local_attachment($link_test) ) : // Also, let's never ping local attachments. $test = parse_url($link_test); if ( isset($test['query']) ) $post_links[] = $link_test; elseif ( ($test['path'] != '/') && ($test['path'] != '') ) $post_links[] = $link_test; endif; endforeach; do_action_ref_array('pre_ping', array(&$post_links, &$pung)); foreach ( (array) $post_links as $pagelinkedto ) { debug_fwrite($log, "Processing -- $pagelinkedto\n"); $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048); if ( $pingback_server_url ) { @ set_time_limit( 60 ); // Now, the RPC call debug_fwrite($log, "Page Linked To: $pagelinkedto \n"); debug_fwrite($log, 'Page Linked From: '); $pagelinkedfrom = get_permalink($post_ID); debug_fwrite($log, $pagelinkedfrom."\n"); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($pingback_server_url); $client->timeout = 3; $client->useragent .= ' -- WordPress/' . $wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto ) ) add_ping( $post_ID, $pagelinkedto ); else debug_fwrite($log, "Error.\n Fault code: ".$client->getErrorCode()." : ".$client->getErrorMessage()."\n"); } } debug_fwrite($log, "\nEND: ".time()."\n****************************\n"); debug_fclose($log); } function privacy_ping_filter($sites) { if ( '0' != get_option('blog_public') ) return $sites; else return ''; } // Send a Trackback function trackback($trackback_url, $title, $excerpt, $ID) { global $wpdb, $wp_version; if ( empty($trackback_url) ) return; $title = urlencode($title); $excerpt = urlencode($excerpt); $blog_name = urlencode(get_option('blogname')); $tb_url = $trackback_url; $url = urlencode(get_permalink($ID)); $query_string = "title=$title&url=$url&blog_name=$blog_name&excerpt=$excerpt"; $trackback_url = parse_url($trackback_url); $http_request = 'POST ' . $trackback_url['path'] . ($trackback_url['query'] ? '?'.$trackback_url['query'] : '') . " HTTP/1.0\r\n"; $http_request .= 'Host: '.$trackback_url['host']."\r\n"; $http_request .= 'Content-Type: application/x-www-form-urlencoded; charset='.get_option('blog_charset')."\r\n"; $http_request .= 'Content-Length: '.strlen($query_string)."\r\n"; $http_request .= "User-Agent: WordPress/" . $wp_version; $http_request .= "\r\n\r\n"; $http_request .= $query_string; if ( '' == $trackback_url['port'] ) $trackback_url['port'] = 80; $fs = @fsockopen($trackback_url['host'], $trackback_url['port'], $errno, $errstr, 4); @fputs($fs, $http_request); /* $debug_file = 'trackback.log'; $fp = fopen($debug_file, 'a'); fwrite($fp, "\n*****\nRequest:\n\n$http_request\n\nResponse:\n\n"); while(!@feof($fs)) { fwrite($fp, @fgets($fs, 4096)); } fwrite($fp, "\n\n"); fclose($fp); */ @fclose($fs); $tb_url = addslashes( $tb_url ); $wpdb->query("UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', '$tb_url') WHERE ID = " . $ID ); return $wpdb->query("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, '$tb_url', '')) WHERE ID = " . $ID ); } function weblog_ping($server = '', $path = '') { global $wp_version; include_once(ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 3; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping $client->query('weblogUpdates.ping', get_option('blogname'), $home); } ?> Bwordpress/wp-includes/.svn/text-base/comment-template.php.svn-base*dcomment_author) ) $author = __('Anonymous'); else $author = $comment->comment_author; return apply_filters('get_comment_author', $author); } function comment_author() { $author = apply_filters('comment_author', get_comment_author() ); echo $author; } function get_comment_author_email() { global $comment; return apply_filters('get_comment_author_email', $comment->comment_author_email); } function comment_author_email() { echo apply_filters('author_email', get_comment_author_email() ); } function comment_author_email_link($linktext='', $before='', $after='') { global $comment; $email = apply_filters('comment_email', $comment->comment_author_email); if ((!empty($email)) && ($email != '@')) { $display = ($linktext != '') ? $linktext : $email; echo $before; echo "$display"; echo $after; } } function get_comment_author_link() { global $comment; $url = get_comment_author_url(); $author = get_comment_author(); if ( empty( $url ) || 'http://' == $url ) $return = $author; else $return = "$author"; return apply_filters('get_comment_author_link', $return); } function comment_author_link() { echo get_comment_author_link(); } function get_comment_author_IP() { global $comment; return apply_filters('get_comment_author_IP', $comment->comment_author_IP); } function comment_author_IP() { echo get_comment_author_IP(); } function get_comment_author_url() { global $comment; return apply_filters('get_comment_author_url', $comment->comment_author_url); } function comment_author_url() { echo apply_filters('comment_url', get_comment_author_url()); } function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) { global $comment; $url = get_comment_author_url(); $display = ($linktext != '') ? $linktext : $url; $display = str_replace( 'http://www.', '', $display ); $display = str_replace( 'http://', '', $display ); if ( '/' == substr($display, -1) ) $display = substr($display, 0, -1); $return = "$before$display$after"; return apply_filters('get_comment_author_url_link', $return); } function comment_author_url_link( $linktext = '', $before = '', $after = '' ) { echo get_comment_author_url_link( $linktext, $before, $after ); } function get_comment_date( $d = '' ) { global $comment; if ( '' == $d ) $date = mysql2date( get_option('date_format'), $comment->comment_date); else $date = mysql2date($d, $comment->comment_date); return apply_filters('get_comment_date', $date, $d); } function comment_date( $d = '' ) { echo get_comment_date( $d ); } function get_comment_excerpt() { global $comment; $comment_text = strip_tags($comment->comment_content); $blah = explode(' ', $comment_text); if (count($blah) > 20) { $k = 20; $use_dotdotdot = 1; } else { $k = count($blah); $use_dotdotdot = 0; } $excerpt = ''; for ($i=0; $i<$k; $i++) { $excerpt .= $blah[$i] . ' '; } $excerpt .= ($use_dotdotdot) ? '...' : ''; return apply_filters('get_comment_excerpt', $excerpt); } function comment_excerpt() { echo apply_filters('comment_excerpt', get_comment_excerpt() ); } function get_comment_ID() { global $comment; return apply_filters('get_comment_ID', $comment->comment_ID); } function comment_ID() { echo get_comment_ID(); } function get_comment_link() { global $comment; return get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; } function get_comments_link() { return get_permalink() . '#comments'; } function comments_link( $file = '', $echo = true ) { echo get_comments_link(); } function get_comments_number( $post_id = 0 ) { global $wpdb, $id; $post_id = (int) $post_id; if ( !$post_id ) $post_id = (int) $id; $post = get_post($post_id); if ( ! isset($post->comment_count) ) $count = 0; else $count = $post->comment_count; return apply_filters('get_comments_number', $count); } function comments_number( $zero = false, $one = false, $more = false, $deprecated = '' ) { global $id; $number = get_comments_number($id); if ( $number > 1 ) $output = str_replace('%', $number, ( false == $more ) ? __('% Comments') : $more); elseif ( $number == 0 ) $output = ( false == $zero ) ? __('No Comments') : $zero; else // must be one $output = ( false == $one ) ? __('1 Comment') : $one; echo apply_filters('comments_number', $output, $number); } function get_comment_text() { global $comment; return apply_filters('get_comment_text', $comment->comment_content); } function comment_text() { echo apply_filters('comment_text', get_comment_text() ); } function get_comment_time( $d = '', $gmt = false ) { global $comment; $comment_date = $gmt? $comment->comment_date_gmt : $comment->comment_date; if ( '' == $d ) $date = mysql2date(get_option('time_format'), $comment_date); else $date = mysql2date($d, $comment_date); return apply_filters('get_comment_time', $date, $d, $gmt); } function comment_time( $d = '' ) { echo get_comment_time($d); } function get_comment_type() { global $comment; if ( '' == $comment->comment_type ) $comment->comment_type = 'comment'; return apply_filters('get_comment_type', $comment->comment_type); } function comment_type($commenttxt = 'Comment', $trackbacktxt = 'Trackback', $pingbacktxt = 'Pingback') { $type = get_comment_type(); switch( $type ) { case 'trackback' : echo $trackbacktxt; break; case 'pingback' : echo $pingbacktxt; break; default : echo $commenttxt; } } function get_trackback_url() { global $id; $tb_url = get_option('siteurl') . '/wp-trackback.php?p=' . $id; if ( '' != get_option('permalink_structure') ) $tb_url = trailingslashit(get_permalink()) . user_trailingslashit('trackback', 'single_trackback'); return apply_filters('trackback_url', $tb_url); } function trackback_url( $display = true ) { if ( $display) echo get_trackback_url(); else return get_trackback_url(); } function trackback_rdf($timezone = 0) { global $id; if (stripos($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator') == false) { echo ' \n"; echo ''; } } function comments_open() { global $post; if ( 'open' == $post->comment_status ) return true; else return false; } function pings_open() { global $post; if ( 'open' == $post->ping_status ) return true; else return false; } function wp_comment_form_unfiltered_html_nonce() { global $post; if ( current_user_can('unfiltered_html') ) wp_nonce_field('unfiltered-html-comment_' . $post->ID, '_wp_unfiltered_html_comment', false); } function comments_template( $file = '/comments.php' ) { global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity; if ( ! (is_single() || is_page() || $withcomments) ) return; $req = get_option('require_name_email'); $commenter = wp_get_current_commenter(); extract($commenter, EXTR_SKIP); // TODO: Use API instead of SELECTs. if ( $user_ID) { $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID . " AND (comment_approved = '1' OR ( user_id = " . $user_ID . " AND comment_approved = '0' ) ) ORDER BY comment_date"); } else if ( empty($comment_author) ) { $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID . " AND comment_approved = '1' ORDER BY comment_date"); } else { $author_db = $wpdb->escape($comment_author); $email_db = $wpdb->escape($comment_author_email); $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post->ID . " AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date"); } // keep $comments for legacy's sake (remember $table*? ;) ) $comments = $wp_query->comments = apply_filters( 'comments_array', $comments, $post->ID ); $wp_query->comment_count = count($wp_query->comments); define('COMMENTS_TEMPLATE', true); $include = apply_filters('comments_template', TEMPLATEPATH . $file ); if ( file_exists( $include ) ) require( $include ); else require( ABSPATH . 'wp-content/themes/default/comments.php'); } function comments_popup_script($width=400, $height=400, $file='') { global $wpcommentspopupfile, $wptrackbackpopupfile, $wppingbackpopupfile, $wpcommentsjavascript; if (empty ($file)) { $wpcommentspopupfile = ''; // Use the index. } else { $wpcommentspopupfile = $file; } $wpcommentsjavascript = 1; $javascript = "\n"; echo $javascript; } function comments_popup_link($zero='No Comments', $one='1 Comment', $more='% Comments', $CSSclass='', $none='Comments Off') { global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $wpdb; if ( is_single() || is_page() ) return; $number = get_comments_number($id); if ( 0 == $number && 'closed' == $post->comment_status && 'closed' == $post->ping_status ) { echo '' . $none . ''; return; } if ( !empty($post->post_password) ) { // if there's a password if ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie echo(__('Enter your password to view comments')); return; } } echo ''; comments_number($zero, $one, $more, $number); echo ''; } ?> 8wordpress/wp-includes/.svn/text-base/compat.php.svn-base A if (get_class($object) == strtolower($class)) { return true; } else { return is_subclass_of($object, $class); } } } if (!function_exists('ob_clean')) { function ob_clean() { // by Aidan Lister if (@ob_end_clean()) { return ob_start(); } return false; } } /* Added in PHP 4.3.0 */ function printr($var, $do_not_echo = false) { // from php.net/print_r user contributed notes ob_start(); print_r($var); $code = htmlentities(ob_get_contents()); ob_clean(); if (!$do_not_echo) { echo "
    $code
    "; } ob_end_clean(); return $code; } /* compatibility with PHP versions older than 4.3 */ if ( !function_exists('file_get_contents') ) { function file_get_contents( $file ) { $file = file($file); return !$file ? false : implode('', $file); } } if (!defined('CASE_LOWER')) { define('CASE_LOWER', 0); } if (!defined('CASE_UPPER')) { define('CASE_UPPER', 1); } /** * Replace array_change_key_case() * * @category PHP * @package PHP_Compat * @link http://php.net/function.array_change_key_case * @author Stephan Schmidt * @author Aidan Lister * @version $Revision: 5187 $ * @since PHP 4.2.0 * @require PHP 4.0.0 (user_error) */ if (!function_exists('array_change_key_case')) { function array_change_key_case($input, $case = CASE_LOWER) { if (!is_array($input)) { user_error('array_change_key_case(): The argument should be an array', E_USER_WARNING); return false; } $output = array (); $keys = array_keys($input); $casefunc = ($case == CASE_LOWER) ? 'strtolower' : 'strtoupper'; foreach ($keys as $key) { $output[$casefunc($key)] = $input[$key]; } return $output; } } // From php.net if(!function_exists('http_build_query')) { function http_build_query( $formdata, $numeric_prefix = null, $key = null ) { $res = array(); foreach ((array)$formdata as $k=>$v) { $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k); if ($key) $tmp_key = $key.'['.$tmp_key.']'; $res[] = ( ( is_array($v) || is_object($v) ) ? http_build_query($v, null, $tmp_key) : $tmp_key."=".urlencode($v) ); } $separator = ini_get('arg_separator.output'); return implode($separator, $res); } } if ( !function_exists('_') ) { function _($string) { return $string; } } // Added in PHP 5.0 if (!function_exists('stripos')) { function stripos($haystack, $needle, $offset = 0) { return strpos(strtolower($haystack), strtolower($needle), $offset); } } ?> 6wordpress/wp-includes/.svn/text-base/cron.php.svn-base false, 'args' => $args ); uksort( $crons, "strnatcasecmp" ); _set_cron_array( $crons ); } function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) { $crons = _get_cron_array(); $schedules = wp_get_schedules(); $key = md5(serialize($args)); if ( !isset( $schedules[$recurrence] ) ) return false; $crons[$timestamp][$hook][$key] = array( 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] ); uksort( $crons, "strnatcasecmp" ); _set_cron_array( $crons ); } function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array()) { $crons = _get_cron_array(); $schedules = wp_get_schedules(); $key = md5(serialize($args)); $interval = 0; // First we try to get it from the schedule if ( 0 == $interval ) $interval = $schedules[$recurrence]['interval']; // Now we try to get it from the saved interval in case the schedule disappears if ( 0 == $interval ) $interval = $crons[$timestamp][$hook][$key]['interval']; // Now we assume something is wrong and fail to schedule if ( 0 == $interval ) return false; while ( $timestamp < time() + 1 ) $timestamp += $interval; wp_schedule_event( $timestamp, $recurrence, $hook, $args ); } function wp_unschedule_event( $timestamp, $hook, $args = array() ) { $crons = _get_cron_array(); $key = md5(serialize($args)); unset( $crons[$timestamp][$hook][$key] ); if ( empty($crons[$timestamp][$hook]) ) unset( $crons[$timestamp][$hook] ); if ( empty($crons[$timestamp]) ) unset( $crons[$timestamp] ); _set_cron_array( $crons ); } function wp_clear_scheduled_hook( $hook ) { $args = array_slice( func_get_args(), 1 ); while ( $timestamp = wp_next_scheduled( $hook, $args ) ) wp_unschedule_event( $timestamp, $hook, $args ); } function wp_next_scheduled( $hook, $args = array() ) { $crons = _get_cron_array(); $key = md5(serialize($args)); if ( empty($crons) ) return false; foreach ( $crons as $timestamp => $cron ) { if ( isset( $cron[$hook][$key] ) ) return $timestamp; } return false; } function spawn_cron() { $crons = _get_cron_array(); if ( !is_array($crons) ) return; $keys = array_keys( $crons ); if ( array_shift( $keys ) > time() ) return; $cron_url = get_option( 'siteurl' ) . '/wp-cron.php'; $parts = parse_url( $cron_url ); if ($parts['scheme'] == 'https') { // support for SSL was added in 4.3.0 if (version_compare(phpversion(), '4.3.0', '>=') && function_exists('openssl_open')) { $argyle = @fsockopen('ssl://' . $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01); } else { return false; } } else { $argyle = @ fsockopen( $parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01 ); } if ( $argyle ) fputs( $argyle, "GET {$parts['path']}?check=" . wp_hash('187425') . " HTTP/1.0\r\n" . "Host: {$_SERVER['HTTP_HOST']}\r\n\r\n" ); } function wp_cron() { // Prevent infinite loops caused by lack of wp-cron.php if ( strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') != false ) return; $crons = _get_cron_array(); if ( !is_array($crons) ) return; $keys = array_keys( $crons ); if ( isset($keys[0]) && $keys[0] > time() ) return; $schedules = wp_get_schedules(); foreach ( $crons as $timestamp => $cronhooks ) { if ( $timestamp > time() ) break; foreach ( $cronhooks as $hook => $args ) { if ( isset($schedules[$hook]['callback']) && !call_user_func( $schedules[$hook]['callback'] ) ) continue; spawn_cron(); break 2; } } } function wp_get_schedules() { $schedules = array( 'hourly' => array( 'interval' => 3600, 'display' => __('Once Hourly') ), 'daily' => array( 'interval' => 86400, 'display' => __('Once Daily') ), ); return array_merge( apply_filters( 'cron_schedules', array() ), $schedules ); } function wp_get_schedule($hook, $args = array()) { $crons = _get_cron_array(); $key = md5(serialize($args)); if ( empty($crons) ) return false; foreach ( $crons as $timestamp => $cron ) { if ( isset( $cron[$hook][$key] ) ) return $cron[$hook][$key]['schedule']; } return false; } // // Private functions // function _get_cron_array() { $cron = get_option('cron'); if ( ! is_array($cron) ) return false; if ( !isset($cron['version']) ) $cron = _upgrade_cron_array($cron); unset($cron['version']); return $cron; } function _set_cron_array($cron) { $cron['version'] = 2; update_option( 'cron', $cron ); } function _upgrade_cron_array($cron) { if ( isset($cron['version']) && 2 == $cron['version']) return $cron; $new_cron = array(); foreach ($cron as $timestamp => $hooks) { foreach ( $hooks as $hook => $args ) { $key = md5(serialize($args['args'])); $new_cron[$timestamp][$hook][$key] = $args; } } $new_cron['version'] = 2; update_option( 'cron', $new_cron ); return $new_cron; } ?> Awordpress/wp-includes/.svn/text-base/default-filters.php.svn-baseBposts; $tableusers = $wpdb->users; $tablecategories = $wpdb->categories; $tablepost2cat = $wpdb->post2cat; $tablecomments = $wpdb->comments; $tablelinks = $wpdb->links; $tablelinkcategories = 'linkcategories_is_gone'; $tableoptions = $wpdb->options; $tablepostmeta = $wpdb->postmeta; /* * Deprecated functions come here to die. */ // Use get_post(). function get_postdata($postid) { $post = &get_post($postid); $postdata = array ( 'ID' => $post->ID, 'Author_ID' => $post->post_author, 'Date' => $post->post_date, 'Content' => $post->post_content, 'Excerpt' => $post->post_excerpt, 'Title' => $post->post_title, 'Category' => $post->post_category, 'post_status' => $post->post_status, 'comment_status' => $post->comment_status, 'ping_status' => $post->ping_status, 'post_password' => $post->post_password, 'to_ping' => $post->to_ping, 'pinged' => $post->pinged, 'post_type' => $post->post_type, 'post_name' => $post->post_name ); return $postdata; } // Use the new post loop. function start_wp() { global $wp_query, $post; // Since the old style loop is being used, advance the query iterator here. $wp_query->next_post(); setup_postdata($post); } function the_category_ID($echo = true) { // Grab the first cat in the list. $categories = get_the_category(); $cat = $categories[0]->cat_ID; if ( $echo ) echo $cat; return $cat; } function the_category_head($before='', $after='') { global $currentcat, $previouscat; // Grab the first cat in the list. $categories = get_the_category(); $currentcat = $categories[0]->category_id; if ( $currentcat != $previouscat ) { echo $before; echo get_the_category_by_ID($currentcat); echo $after; $previouscat = $currentcat; } } // Use previous_post_link(). function previous_post($format='%', $previous='previous post: ', $title='yes', $in_same_cat='no', $limitprev=1, $excluded_categories='') { if ( empty($in_same_cat) || 'no' == $in_same_cat ) $in_same_cat = false; else $in_same_cat = true; $post = get_previous_post($in_same_cat, $excluded_categories); if ( !$post ) return; $string = ''.$previous; if ( 'yes' == $title ) $string .= apply_filters('the_title', $post->post_title, $post); $string .= ''; $format = str_replace('%', $string, $format); echo $format; } // Use next_post_link(). function next_post($format='%', $next='next post: ', $title='yes', $in_same_cat='no', $limitnext=1, $excluded_categories='') { if ( empty($in_same_cat) || 'no' == $in_same_cat ) $in_same_cat = false; else $in_same_cat = true; $post = get_next_post($in_same_cat, $excluded_categories); if ( !$post ) return; $string = ''.$next; if ( 'yes' == $title ) $string .= apply_filters('the_title', $post->post_title, $nextpost); $string .= ''; $format = str_replace('%', $string, $format); echo $format; } // // Use current_user_can() for these. // /* returns true if $user_id can create a new post */ function user_can_create_post($user_id, $blog_id = 1, $category_id = 'None') { $author_data = get_userdata($user_id); return ($author_data->user_level > 1); } /* returns true if $user_id can create a new post */ function user_can_create_draft($user_id, $blog_id = 1, $category_id = 'None') { $author_data = get_userdata($user_id); return ($author_data->user_level >= 1); } /* returns true if $user_id can edit $post_id */ function user_can_edit_post($user_id, $post_id, $blog_id = 1) { $author_data = get_userdata($user_id); $post = get_post($post_id); $post_author_data = get_userdata($post->post_author); if ( (($user_id == $post_author_data->ID) && !($post->post_status == 'publish' && $author_data->user_level < 2)) || ($author_data->user_level > $post_author_data->user_level) || ($author_data->user_level >= 10) ) { return true; } else { return false; } } /* returns true if $user_id can delete $post_id */ function user_can_delete_post($user_id, $post_id, $blog_id = 1) { // right now if one can edit, one can delete return user_can_edit_post($user_id, $post_id, $blog_id); } /* returns true if $user_id can set new posts' dates on $blog_id */ function user_can_set_post_date($user_id, $blog_id = 1, $category_id = 'None') { $author_data = get_userdata($user_id); return (($author_data->user_level > 4) && user_can_create_post($user_id, $blog_id, $category_id)); } /* returns true if $user_id can edit $post_id's date */ function user_can_edit_post_date($user_id, $post_id, $blog_id = 1) { $author_data = get_userdata($user_id); return (($author_data->user_level > 4) && user_can_edit_post($user_id, $post_id, $blog_id)); } /* returns true if $user_id can edit $post_id's comments */ function user_can_edit_post_comments($user_id, $post_id, $blog_id = 1) { // right now if one can edit a post, one can edit comments made on it return user_can_edit_post($user_id, $post_id, $blog_id); } /* returns true if $user_id can delete $post_id's comments */ function user_can_delete_post_comments($user_id, $post_id, $blog_id = 1) { // right now if one can edit comments, one can delete comments return user_can_edit_post_comments($user_id, $post_id, $blog_id); } function user_can_edit_user($user_id, $other_user) { $user = get_userdata($user_id); $other = get_userdata($other_user); if ( $user->user_level > $other->user_level || $user->user_level > 8 || $user->ID == $other->ID ) return true; else return false; } /** function get_linksbyname() ** Gets the links associated with category 'cat_name'. ** Parameters: ** cat_name (default 'noname') - The category name to use. If no ** match is found uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and it's description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description' or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined ** show_rating (default false) - show rating stars/chars ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp */ function get_linksbyname($cat_name = "noname", $before = '', $after = '
    ', $between = " ", $show_images = true, $orderby = 'id', $show_description = true, $show_rating = false, $limit = -1, $show_updated = 0) { global $wpdb; $cat_id = -1; $results = $wpdb->get_results("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$cat_name'"); if ($results) { foreach ($results as $result) { $cat_id = $result->cat_ID; } } get_links($cat_id, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated); } /** function wp_get_linksbyname() ** Gets the links associated with the named category. ** Parameters: ** category (no default) - The category to use. **/ function wp_get_linksbyname($category, $args = '') { global $wpdb; $cat_id = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='$category'"); // LIMIT 1 if (! $cat_id) return; $args = add_query_arg('category', $cat_id, $args); wp_get_links($args); } /** function get_linkobjectsbyname() ** Gets an array of link objects associated with category 'cat_name'. ** Parameters: ** cat_name (default 'noname') - The category name to use. If no ** match is found uses all ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description', or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** ** Use this like: ** $links = get_linkobjectsbyname('fred'); ** foreach ($links as $link) { ** echo '
  • '.$link->link_name.'
  • '; ** } **/ // Deprecate in favor of get_linkz(). function get_linkobjectsbyname($cat_name = "noname" , $orderby = 'name', $limit = -1) { global $wpdb; $cat_id = -1; //$results = $wpdb->get_results("SELECT cat_id FROM $wpdb->linkcategories WHERE cat_name='$cat_name'"); // TODO: Fix me. if ($results) { foreach ($results as $result) { $cat_id = $result->cat_id; } } return get_linkobjects($cat_id, $orderby, $limit); } /** function get_linkobjects() ** Gets an array of link objects associated with category n. ** Parameters: ** category (default -1) - The category to use. If no category supplied ** uses all ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url', 'description', or 'rating'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** ** Use this like: ** $links = get_linkobjects(1); ** if ($links) { ** foreach ($links as $link) { ** echo '
  • '.$link->link_name.'
    '.$link->link_description.'
  • '; ** } ** } ** Fields are: ** link_id ** link_url ** link_name ** link_image ** link_target ** link_category ** link_description ** link_visible ** link_owner ** link_rating ** link_updated ** link_rel ** link_notes **/ // Deprecate in favor of get_linkz(). function get_linkobjects($category = -1, $orderby = 'name', $limit = -1) { global $wpdb; $sql = "SELECT * FROM $wpdb->links WHERE link_visible = 'Y'"; if ($category != -1) { $sql .= " AND link_category = $category "; } if ($orderby == '') $orderby = 'id'; if (substr($orderby,0,1) == '_') { $direction = ' DESC'; $orderby = substr($orderby,1); } if (strcasecmp('rand',$orderby) == 0) { $orderby = 'rand()'; } else { $orderby = " link_" . $orderby; } $sql .= ' ORDER BY ' . $orderby; $sql .= $direction; /* The next 2 lines implement LIMIT TO processing */ // if ($limit != -1) // $sql .= " LIMIT $limit"; $results = $wpdb->get_results($sql); if ($results) { foreach ($results as $result) { $result->link_url = $result->link_url; $result->link_name = $result->link_name; $result->link_description = $result->link_description; $result->link_notes = $result->link_notes; $newresults[] = $result; } } return $newresults; } /** function get_linksbyname_withrating() ** Gets the links associated with category 'cat_name' and display rating stars/chars. ** Parameters: ** cat_name (default 'noname') - The category name to use. If no ** match is found uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and it's description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url' or 'description'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp */ function get_linksbyname_withrating($cat_name = "noname", $before = '', $after = '
    ', $between = " ", $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { get_linksbyname($cat_name, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); } /** function get_links_withrating() ** Gets the links associated with category n and display rating stars/chars. ** Parameters: ** category (default -1) - The category to use. If no category supplied ** uses all ** before (default '') - the html to output before the link ** after (default '
    ') - the html to output after the link ** between (default ' ') - the html to output between the link/image ** and it's description. Not used if no image or show_images == true ** show_images (default true) - whether to show images (if defined). ** orderby (default 'id') - the order to output the links. E.g. 'id', 'name', ** 'url' or 'description'. Or maybe owner. If you start the ** name with an underscore the order will be reversed. ** You can also specify 'rand' as the order which will return links in a ** random order. ** show_description (default true) - whether to show the description if ** show_images=false/not defined . ** limit (default -1) - Limit to X entries. If not specified, all entries ** are shown. ** show_updated (default 0) - whether to show last updated timestamp */ function get_links_withrating($category = -1, $before = '', $after = '
    ', $between = " ", $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); } /** function get_get_autotoggle() ** Gets the auto_toggle setting of category n. ** Parameters: id (default 0) - The category to get. If no category supplied ** uses 0 */ function get_autotoggle($id = 0) { return 0; } // Use wp_list_cats(). function list_cats($optionall = 1, $all = 'All', $sort_column = 'ID', $sort_order = 'asc', $file = '', $list = true, $optiondates = 0, $optioncount = 0, $hide_empty = 1, $use_desc_for_title = 1, $children=FALSE, $child_of=0, $categories=0, $recurse=0, $feed = '', $feed_image = '', $exclude = '', $hierarchical=FALSE) { $query = compact('optionall', 'all', 'sort_column', 'sort_order', 'file', 'list', 'optiondates', 'optioncount', 'hide_empty', 'use_desc_for_title', 'children', 'child_of', 'categories', 'recurse', 'feed', 'feed_image', 'exclude', 'hierarchical'); return wp_list_cats($query); } function wp_list_cats($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); // Map to new names. if ( isset($r['optionall']) && isset($r['all'])) $r['show_option_all'] = $r['all']; if ( isset($r['sort_column']) ) $r['orderby'] = $r['sort_column']; if ( isset($r['sort_order']) ) $r['order'] = $r['sort_order']; if ( isset($r['optiondates']) ) $r['show_last_update'] = $r['optiondates']; if ( isset($r['optioncount']) ) $r['show_count'] = $r['optioncount']; if ( isset($r['list']) ) $r['style'] = $r['list'] ? 'list' : 'break'; $r['title_li'] = ''; return wp_list_categories($r); } function dropdown_cats($optionall = 1, $all = 'All', $orderby = 'ID', $order = 'asc', $show_last_update = 0, $show_count = 0, $hide_empty = 1, $optionnone = FALSE, $selected = 0, $exclude = 0) { $show_option_all = ''; if ( $optionall ) $show_option_all = $all; $show_option_none = ''; if ( $optionnone ) $show_option_none = __('None'); $vars = compact('show_option_all', 'show_option_none', 'orderby', 'order', 'show_last_update', 'show_count', 'hide_empty', 'selected', 'exclude'); $query = add_query_arg($vars, ''); return wp_dropdown_categories($query); } // Use wp_print_scripts() or WP_Scripts. function tinymce_include() { wp_print_script('wp_tiny_mce'); } function list_authors($optioncount = false, $exclude_admin = true, $show_fullname = false, $hide_empty = true, $feed = '', $feed_image = '') { $args = compact('optioncount', 'exclude_admin', 'show_fullname', 'hide_empty', 'feed', 'feed_image'); return wp_list_authors($args); } function wp_get_post_cats($blogid = '1', $post_ID = 0) { return wp_get_post_categories($post_ID); } function wp_set_post_cats($blogid = '1', $post_ID = 0, $post_categories = array()) { return wp_set_post_categories($post_ID, $post_categories); } // Use wp_get_archives(). function get_archives($type='', $limit='', $format='html', $before = '', $after = '', $show_post_count = false) { $args = compact('type', 'limit', 'format', 'before', 'after', 'show_post_count'); return wp_get_archives($args); } // Use get_author_posts_url(). function get_author_link($echo = false, $author_id, $author_nicename = '') { $link = get_author_posts_url($author_id, $author_nicename); if ( $echo ) echo $link; return $link; } // Use wp_link_pages(). function link_pages($before='
    ', $after='
    ', $next_or_number='number', $nextpagelink='next page', $previouspagelink='previous page', $pagelink='%', $more_file='') { $args = compact('before', 'after', 'next_or_number', 'nextpagelink', 'previouspagelink', 'pagelink', 'more_file'); return wp_link_pages($args); } // Use get_option(). function get_settings($option) { return get_option($option); } ?>Dwordpress/wp-includes/.svn/text-base/feed-atom-comments.php.svn-base '; ?> > <?php if ( is_singular() ) printf(__('Comments on: %s'), get_the_title_rss()); elseif ( is_search() ) printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars['s'])); else printf(__('Comments for %s'), get_bloginfo_rss( 'name' ) . get_wp_title_rss()); ?> WordPress comment_post_ID); get_post_custom($comment_post->ID); ?> <?php if ( !is_singular() ) { $title = get_the_title($comment_post->ID); $title = apply_filters('the_title', $title); $title = apply_filters('the_title_rss', $title); printf(__('Comment on %1$s by %2$s'), $title, get_comment_author_rss()); } else { printf(__('By: %s'), get_comment_author_rss()); } ?> ' . get_comment_author_url() . ''; ?> post_password) && $_COOKIE['wp-postpass'] != $comment_post->post_password) : ?> ]]> ]]> comment_ID, $comment_post->ID); ?> ;wordpress/wp-includes/.svn/text-base/feed-atom.php.svn-base '; ?> > <?php bloginfo_rss('name'); wp_title_rss(); ?> WordPress <![CDATA[<?php the_title_rss() ?>]]> ]]> ]]> 6wordpress/wp-includes/.svn/text-base/feed.php.svn-base4 $cut ) { $k = $cut; $use_dotdotdot = 1; } else { $k = count($blah); $use_dotdotdot = 0; } for ( $i=0; $i<$k; $i++ ) $excerpt .= $blah[$i].' '; $excerpt .= ($use_dotdotdot) ? '...' : ''; $content = $excerpt; } $content = str_replace(']]>', ']]>', $content); echo $content; } function the_excerpt_rss() { $output = get_the_excerpt(true); echo apply_filters('the_excerpt_rss', $output); } function permalink_single_rss($file = '') { echo get_permalink(); } function comment_link() { echo get_comment_link(); } function get_comment_author_rss() { return apply_filters('comment_author_rss', get_comment_author() ); } function comment_author_rss() { echo get_comment_author_rss(); } function comment_text_rss() { $comment_text = get_comment_text(); $comment_text = apply_filters('comment_text_rss', $comment_text); echo $comment_text; } function comments_rss_link($link_text = 'Comments RSS', $commentsrssfilename = 'nolongerused') { $url = get_post_comments_feed_link(); echo "$link_text"; } function comments_rss($commentsrssfilename = 'nolongerused') { return get_post_comments_feed_link(); } function get_author_rss_link($echo = false, $author_id, $author_nicename) { $auth_ID = (int) $author_id; $permalink_structure = get_option('permalink_structure'); if ( '' == $permalink_structure ) { $link = get_option('home') . '?feed=rss2&author=' . $author_id; } else { $link = get_author_posts_url($author_id, $author_nicename); $link = $link . user_trailingslashit('feed', 'feed'); } $link = apply_filters('author_feed_link', $link); if ( $echo ) echo $link; return $link; } function get_category_rss_link($echo = false, $cat_ID, $category_nicename) { $permalink_structure = get_option('permalink_structure'); if ( '' == $permalink_structure ) { $link = get_option('home') . '?feed=rss2&cat=' . $cat_ID; } else { $link = get_category_link($cat_ID); $link = $link . user_trailingslashit('feed', 'feed'); } $link = apply_filters('category_feed_link', $link); if ( $echo ) echo $link; return $link; } function get_the_category_rss($type = 'rss') { $categories = get_the_category(); $home = get_bloginfo_rss('home'); $the_list = ''; foreach ( (array) $categories as $category ) { $cat_name = convert_chars($category->cat_name); if ( 'rdf' == $type ) $the_list .= "\n\t\t\n"; if ( 'atom' == $type ) $the_list .= sprintf( '', attribute_escape( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), attribute_escape( $category->cat_name ) ); else $the_list .= "\n\t\t\n"; } return apply_filters('the_category_rss', $the_list, $type); } function the_category_rss($type = 'rss') { echo get_the_category_rss($type); } function html_type_rss() { $type = get_bloginfo('html_type'); if (strpos($type, 'xhtml') != false) $type = 'xhtml'; else $type = 'html'; echo $type; } function rss_enclosure() { global $id, $post; if ( !empty($post->post_password) && ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) ) return; foreach (get_post_custom() as $key => $val) { if ($key == 'enclosure') { foreach ((array)$val as $enc) { $enclosure = split("\n", $enc); echo apply_filters('rss_enclosure', '' . "\n"); } } } } function atom_enclosure() { global $id, $post; if ( !empty($post->post_password) && ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) ) return; foreach (get_post_custom() as $key => $val) { if ($key == 'enclosure') { foreach ((array)$val as $enc) { $enclosure = split("\n", $enc); echo apply_filters('atom_enclosure', '' . "\n"); } } } } ?>:wordpress/wp-includes/.svn/text-base/feed-rdf.php.svn-base@ '; ?> > "> <?php bloginfo_rss('name'); wp_title_rss(); ?> hourly 1 2000-01-01T12:00+00:00 <?php the_title_rss() ?> post_date_gmt, false); ?> ]]> Dwordpress/wp-includes/.svn/text-base/feed-rss2-comments.php.svn-base N'; ?> <?php if ( is_singular() ) printf(__('Comments on: %s'), get_the_title_rss()); elseif ( is_search() ) printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars['s'])); else printf(__('Comments for %s'), get_bloginfo_rss( 'name' ) . get_wp_title_rss()); ?> http://wordpress.org/?v= comment_post_ID); get_post_custom($comment_post->ID); ?> <?php if ( !is_singular() ) { $title = get_the_title($comment_post->ID); $title = apply_filters('the_title', $title); $title = apply_filters('the_title_rss', $title); printf(__('Comment on %1$s by %2$s'), $title, get_comment_author_rss()); } else { printf(__('By: %s'), get_comment_author_rss()); } ?> post_password) && $_COOKIE['wp-postpass'] != $comment_post->post_password) : ?> ]]> ]]> comment_ID, $comment_post->ID); ?> ;wordpress/wp-includes/.svn/text-base/feed-rss2.php.svn-base '; ?> > <?php bloginfo_rss('name'); wp_title_rss(); ?> http://wordpress.org/?v= <?php the_title_rss() ?> ]]> ]]> post_content ) > 0 ) : ?> ]]> ]]> :wordpress/wp-includes/.svn/text-base/feed-rss.php.svn-base '; ?> <?php bloginfo_rss('name'); wp_title_rss(); ?> http://backend.userland.com/rss092 <?php the_title_rss() ?> ]]> )/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE); $stop = count($textarr); // if a plugin has provided an autocorrect array, use it if ( isset($wp_cockneyreplace) ) { $cockney = array_keys($wp_cockneyreplace); $cockneyreplace = array_values($wp_cockneyreplace); } else { $cockney = array("'tain't","'twere","'twas","'tis","'twill","'til","'bout","'nuff","'round","'cause"); $cockneyreplace = array("’tain’t","’twere","’twas","’tis","’twill","’til","’bout","’nuff","’round","’cause"); } $static_characters = array_merge(array('---', ' -- ', '--', 'xn–', '...', '``', '\'s', '\'\'', ' (tm)'), $cockney); $static_replacements = array_merge(array('—', ' — ', '–', 'xn--', '…', '“', '’s', '”', ' ™'), $cockneyreplace); $dynamic_characters = array('/\'(\d\d(?:’|\')?s)/', '/(\s|\A|")\'/', '/(\d+)"/', '/(\d+)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A)"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/(\d+)x(\d+)/'); $dynamic_replacements = array('’$1','$1‘', '$1″', '$1′', '$1’$2', '$1“$2', '”$1', '’$1', '$1×$2'); for ( $i = 0; $i < $stop; $i++ ) { $curl = $textarr[$i]; if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag // static strings $curl = str_replace($static_characters, $static_replacements, $curl); // regular expressions $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); } elseif (strpos($curl, '', '', $text); $text = str_replace('

    ', "\n", $text); $text = str_replace('

    ', '', $text); return $text; } function wpautop($pee, $br = 1) { $pee = $pee . "\n"; // just to make things a little easier, pad the end $pee = preg_replace('|
    \s*
    |', "\n\n", $pee); // Space things out a little $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)'; $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee); $pee = preg_replace('!()!', "$1\n\n", $pee); $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates $pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "

    $1

    \n", $pee); // make paragraphs, including one at the end $pee = preg_replace('|

    \s*?

    |', '', $pee); // under certain strange conditions it could create a P of entirely whitespace $pee = preg_replace('!

    ([^<]+)\s*?(]*>)!', "

    $1

    $2", $pee); $pee = preg_replace( '|

    |', "$1

    ", $pee ); $pee = preg_replace('!

    \s*(]*>)\s*

    !', "$1", $pee); // don't pee all over a tag $pee = preg_replace("|

    (|", "$1", $pee); // problem with nested lists $pee = preg_replace('|

    ]*)>|i', "

    ", $pee); $pee = str_replace('

    ', '

    ', $pee); $pee = preg_replace('!

    \s*(]*>)!', "$1", $pee); $pee = preg_replace('!(]*>)\s*

    !', "$1", $pee); if ($br) { $pee = preg_replace('/<(script|style).*?<\/\\1>/se', 'str_replace("\n", "", "\\0")', $pee); $pee = preg_replace('|(?)\s*\n|', "
    \n", $pee); // optionally make line breaks $pee = str_replace('', "\n", $pee); } $pee = preg_replace('!(]*>)\s*
    !', "$1", $pee); $pee = preg_replace('!
    (\s*]*>)!', '$1', $pee); if (strpos($pee, ')(.*?)!ise', " stripslashes('$1') . stripslashes(clean_pre('$2')) . '' ", $pee); $pee = preg_replace( "|\n

    $|", '

    ', $pee ); return $pee; } function seems_utf8($Str) { # by bmorel at ssi dot fr for ($i=0; $i', '>', $text); if ( 'double' == $quotes ) { $text = str_replace('"', '"', $text); } elseif ( 'single' == $quotes ) { $text = str_replace("'", ''', $text); } elseif ( $quotes ) { $text = str_replace('"', '"', $text); $text = str_replace("'", ''', $text); } return $text; } function utf8_uri_encode( $utf8_string, $length = 0 ) { $unicode = ''; $values = array(); $num_octets = 1; for ($i = 0; $i < strlen( $utf8_string ); $i++ ) { $value = ord( $utf8_string[ $i ] ); if ( $value < 128 ) { if ( $length && ( strlen($unicode) + 1 > $length ) ) break; $unicode .= chr($value); } else { if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3; $values[] = $value; if ( $length && ( (strlen($unicode) + ($num_octets * 3)) > $length ) ) break; if ( count( $values ) == $num_octets ) { if ($num_octets == 3) { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]); } else { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]); } $values = array(); $num_octets = 1; } } } return $unicode; } function remove_accents($string) { if ( !preg_match('/[\x80-\xff]/', $string) ) return $string; if (seems_utf8($string)) { $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', chr(195).chr(159) => 's', chr(195).chr(160) => 'a', chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', chr(195).chr(191) => 'y', // Decompositions for Latin Extended-A chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', chr(197).chr(154) => 'S',chr(197).chr(155) => 's', chr(197).chr(156) => 'S',chr(197).chr(157) => 's', chr(197).chr(158) => 'S',chr(197).chr(159) => 's', chr(197).chr(160) => 'S', chr(197).chr(161) => 's', chr(197).chr(162) => 'T', chr(197).chr(163) => 't', chr(197).chr(164) => 'T', chr(197).chr(165) => 't', chr(197).chr(166) => 'T', chr(197).chr(167) => 't', chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', chr(197).chr(190) => 'z', chr(197).chr(191) => 's', // Euro Sign chr(226).chr(130).chr(172) => 'E', // GBP (Pound) Sign chr(194).chr(163) => ''); $string = strtr($string, $chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) .chr(252).chr(253).chr(255); $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $string = strtr($string, $chars['in'], $chars['out']); $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); $string = str_replace($double_chars['in'], $double_chars['out'], $string); } return $string; } function sanitize_file_name( $name ) { // Like sanitize_title, but with periods $name = strtolower( $name ); $name = preg_replace('/&.+?;/', '', $name); // kill entities $name = str_replace( '_', '-', $name ); $name = preg_replace('/[^a-z0-9\s-.]/', '', $name); $name = preg_replace('/\s+/', '-', $name); $name = preg_replace('|-+|', '-', $name); $name = trim($name, '-'); return $name; } function sanitize_user( $username, $strict = false ) { $raw_username = $username; $username = strip_tags($username); // Kill octets $username = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '', $username); $username = preg_replace('/&.+?;/', '', $username); // Kill entities // If strict, reduce to ASCII for max portability. if ( $strict ) $username = preg_replace('|[^a-z0-9 _.\-@]|i', '', $username); return apply_filters('sanitize_user', $username, $raw_username, $strict); } function sanitize_title($title, $fallback_title = '') { $title = strip_tags($title); $title = apply_filters('sanitize_title', $title); if (empty($title)) { $title = $fallback_title; } return $title; } function sanitize_title_with_dashes($title) { $title = strip_tags($title); // Preserve escaped octets. $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); // Remove percent signs that are not part of an octet. $title = str_replace('%', '', $title); // Restore octets. $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); $title = remove_accents($title); if (seems_utf8($title)) { if (function_exists('mb_strtolower')) { $title = mb_strtolower($title, 'UTF-8'); } $title = utf8_uri_encode($title, 200); } $title = strtolower($title); $title = preg_replace('/&.+?;/', '', $title); // kill entities $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); $title = preg_replace('/\s+/', '-', $title); $title = preg_replace('|-+|', '-', $title); $title = trim($title, '-'); return $title; } function convert_chars($content, $flag = 'obsolete') { // Translation of invalid Unicode references range to valid range $wp_htmltranswinuni = array( '€' => '€', // the Euro sign '' => '', '‚' => '‚', // these are Windows CP1252 specific characters 'ƒ' => 'ƒ', // they would look weird on non-Windows browsers '„' => '„', '…' => '…', '†' => '†', '‡' => '‡', 'ˆ' => 'ˆ', '‰' => '‰', 'Š' => 'Š', '‹' => '‹', 'Œ' => 'Œ', '' => '', 'Ž' => 'ž', '' => '', '' => '', '‘' => '‘', '’' => '’', '“' => '“', '”' => '”', '•' => '•', '–' => '–', '—' => '—', '˜' => '˜', '™' => '™', 'š' => 'š', '›' => '›', 'œ' => 'œ', '' => '', 'ž' => '', 'Ÿ' => 'Ÿ' ); // Remove metadata tags $content = preg_replace('/(.+?)<\/title>/','',$content); $content = preg_replace('/<category>(.+?)<\/category>/','',$content); // Converts lone & characters into & (a.k.a. &) $content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content); // Fix Word pasting $content = strtr($content, $wp_htmltranswinuni); // Just a little XHTML help $content = str_replace('<br>', '<br />', $content); $content = str_replace('<hr>', '<hr />', $content); return $content; } function funky_javascript_fix($text) { // Fixes for browsers' javascript bugs global $is_macIE, $is_winIE; if ( $is_winIE || $is_macIE ) $text = preg_replace("/\%u([0-9A-F]{4,4})/e", "'&#'.base_convert('\\1',16,10).';'", $text); return $text; } /* balanceTags Balances Tags of string using a modified stack. @param text Text to be balanced @param force Forces balancing, ignoring the value of the option @return Returns balanced text @author Leonard Lin (leonard@acm.org) @version v1.1 @date November 4, 2001 @license GPL v2.0 @notes @changelog --- Modified by Scott Reilly (coffee2code) 02 Aug 2004 1.2 ***TODO*** Make better - change loop condition to $text 1.1 Fixed handling of append/stack pop order of end text Added Cleaning Hooks 1.0 First Version */ function balanceTags($text, $force = false) { if ( !$force && get_option('use_balanceTags') == 0 ) return $text; $tagstack = array(); $stacksize = 0; $tagqueue = ''; $newtext = ''; # WP bug fix for comments - in case you REALLY meant to type '< !--' $text = str_replace('< !--', '< !--', $text); # WP bug fix for LOVE <3 (and other situations with '<' before a number) $text = preg_replace('#<([0-9]{1})#', '<$1', $text); while (preg_match("/<(\/?\w*)\s*([^>]*)>/",$text,$regex)) { $newtext .= $tagqueue; $i = strpos($text,$regex[0]); $l = strlen($regex[0]); // clear the shifter $tagqueue = ''; // Pop or Push if ($regex[1][0] == "/") { // End Tag $tag = strtolower(substr($regex[1],1)); // if too many closing tags if($stacksize <= 0) { $tag = ''; //or close to be safe $tag = '/' . $tag; } // if stacktop value = tag close value then pop else if ($tagstack[$stacksize - 1] == $tag) { // found closing tag $tag = '</' . $tag . '>'; // Close Tag // Pop array_pop ($tagstack); $stacksize--; } else { // closing tag not at top, search for it for ($j=$stacksize-1;$j>=0;$j--) { if ($tagstack[$j] == $tag) { // add tag to tagqueue for ($k=$stacksize-1;$k>=$j;$k--){ $tagqueue .= '</' . array_pop ($tagstack) . '>'; $stacksize--; } break; } } $tag = ''; } } else { // Begin Tag $tag = strtolower($regex[1]); // Tag Cleaning // If self-closing or '', don't do anything. if((substr($regex[2],-1) == '/') || ($tag == '')) { } // ElseIf it's a known single-entity tag but it doesn't close itself, do so elseif ($tag == 'br' || $tag == 'img' || $tag == 'hr' || $tag == 'input') { $regex[2] .= '/'; } else { // Push the tag onto the stack // If the top of the stack is the same as the tag we want to push, close previous tag if (($stacksize > 0) && ($tag != 'div') && ($tagstack[$stacksize - 1] == $tag)) { $tagqueue = '</' . array_pop ($tagstack) . '>'; $stacksize--; } $stacksize = array_push ($tagstack, $tag); } // Attributes $attributes = $regex[2]; if($attributes) { $attributes = ' '.$attributes; } $tag = '<'.$tag.$attributes.'>'; //If already queuing a close tag, then put this tag on, too if ($tagqueue) { $tagqueue .= $tag; $tag = ''; } } $newtext .= substr($text,0,$i) . $tag; $text = substr($text,$i+$l); } // Clear Tag Queue $newtext .= $tagqueue; // Add Remaining text $newtext .= $text; // Empty Stack while($x = array_pop($tagstack)) { $newtext .= '</' . $x . '>'; // Add remaining tags to close } // WP fix for the bug with HTML comments $newtext = str_replace("< !--","<!--",$newtext); $newtext = str_replace("< !--","< !--",$newtext); return $newtext; } function force_balance_tags($text) { return balanceTags($text, true); } function format_to_edit($content, $richedit = false) { $content = apply_filters('format_to_edit', $content); if (! $richedit ) $content = htmlspecialchars($content); return $content; } function format_to_post($content) { global $wpdb; $content = apply_filters('format_to_post', $content); return $content; } function zeroise($number,$threshold) { // function to add leading zeros when necessary return sprintf('%0'.$threshold.'s', $number); } function backslashit($string) { $string = preg_replace('/^([0-9])/', '\\\\\\\\\1', $string); $string = preg_replace('/([a-z])/i', '\\\\\1', $string); return $string; } function trailingslashit($string) { return untrailingslashit($string) . '/'; } function untrailingslashit($string) { return rtrim($string, '/'); } function addslashes_gpc($gpc) { global $wpdb; if (get_magic_quotes_gpc()) { $gpc = stripslashes($gpc); } return $wpdb->escape($gpc); } function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } function urlencode_deep($value) { $value = is_array($value) ? array_map('urlencode_deep', $value) : urlencode($value); return $value; } function antispambot($emailaddy, $mailto=0) { $emailNOSPAMaddy = ''; srand ((float) microtime() * 1000000); for ($i = 0; $i < strlen($emailaddy); $i = $i + 1) { $j = floor(rand(0, 1+$mailto)); if ($j==0) { $emailNOSPAMaddy .= '&#'.ord(substr($emailaddy,$i,1)).';'; } elseif ($j==1) { $emailNOSPAMaddy .= substr($emailaddy,$i,1); } elseif ($j==2) { $emailNOSPAMaddy .= '%'.zeroise(dechex(ord(substr($emailaddy, $i, 1))), 2); } } $emailNOSPAMaddy = str_replace('@','@',$emailNOSPAMaddy); return $emailNOSPAMaddy; } function make_clickable($ret) { $ret = ' ' . $ret; // in testing, using arrays here was found to be faster $ret = preg_replace( array( '#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])([a-z0-9\-_.]+)@([^,< \n\r]+)#i'), array( '$1<a href="$2" rel="nofollow">$2</a>', '$1<a href="http://$2" rel="nofollow">$2</a>', '$1<a href="mailto:$2@$3">$2@$3</a>'),$ret); // this one is not in an array because we need it to run last, for cleanup of accidental links within links $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret); $ret = trim($ret); return $ret; } function wp_rel_nofollow( $text ) { global $wpdb; // This is a pre save filter, so text is already escaped. $text = stripslashes($text); $text = preg_replace('|<a (.+?)>|ie', "'<a ' . str_replace(' rel=\"nofollow\"','',stripslashes('$1')) . ' rel=\"nofollow\">'", $text); $text = $wpdb->escape($text); return $text; } function convert_smilies($text) { global $wp_smiliessearch, $wp_smiliesreplace; $output = ''; if (get_option('use_smilies')) { // HTML loop taken from texturize function, could possible be consolidated $textarr = preg_split("/(<.*>)/U", $text, -1, PREG_SPLIT_DELIM_CAPTURE); // capture the tags as well as in between $stop = count($textarr);// loop stuff for ($i = 0; $i < $stop; $i++) { $content = $textarr[$i]; if ((strlen($content) > 0) && ('<' != $content{0})) { // If it's not a tag $content = preg_replace($wp_smiliessearch, $wp_smiliesreplace, $content); } $output .= $content; } } else { // return default text. $output = $text; } return $output; } function is_email($user_email) { $chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i"; if (strpos($user_email, '@') != false && strpos($user_email, '.') != false) { if (preg_match($chars, $user_email)) { return true; } else { return false; } } else { return false; } } // used by wp-mail to handle charsets in email subjects function wp_iso_descrambler($string) { /* this may only work with iso-8859-1, I'm afraid */ if (!preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) { return $string; } else { $subject = str_replace('_', ' ', $matches[2]); $subject = preg_replace('#\=([0-9a-f]{2})#ei', "chr(hexdec(strtolower('$1')))", $subject); return $subject; } } // give it a date, it will give you the same date as GMT function get_gmt_from_date($string) { // note: this only substracts $time_difference from the given date preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches); $string_time = gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]); $string_gmt = gmdate('Y-m-d H:i:s', $string_time - get_option('gmt_offset') * 3600); return $string_gmt; } // give it a GMT date, it will give you the same date with $time_difference added function get_date_from_gmt($string) { // note: this only adds $time_difference to the given date preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches); $string_time = gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]); $string_localtime = gmdate('Y-m-d H:i:s', $string_time + get_option('gmt_offset')*3600); return $string_localtime; } // computes an offset in seconds from an iso8601 timezone function iso8601_timezone_to_offset($timezone) { // $timezone is either 'Z' or '[+|-]hhmm' if ($timezone == 'Z') { $offset = 0; } else { $sign = (substr($timezone, 0, 1) == '+') ? 1 : -1; $hours = intval(substr($timezone, 1, 2)); $minutes = intval(substr($timezone, 3, 4)) / 60; $offset = $sign * 3600 * ($hours + $minutes); } return $offset; } // converts an iso8601 date to MySQL DateTime format used by post_date[_gmt] function iso8601_to_datetime($date_string, $timezone = USER) { if ($timezone == GMT) { preg_match('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits); if (!empty($date_bits[7])) { // we have a timezone, so let's compute an offset $offset = iso8601_timezone_to_offset($date_bits[7]); } else { // we don't have a timezone, so we assume user local timezone (not server's!) $offset = 3600 * get_option('gmt_offset'); } $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); $timestamp -= $offset; return gmdate('Y-m-d H:i:s', $timestamp); } elseif ($timezone == USER) { return preg_replace('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string); } } function popuplinks($text) { // Comment text in popup windows should be filtered through this. // Right now it's a moderately dumb function, ideally it would detect whether // a target or rel attribute was already there and adjust its actions accordingly. $text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text); return $text; } function sanitize_email($email) { return preg_replace('/[^a-z0-9+_.@-]/i', '', $email); } function human_time_diff( $from, $to = '' ) { if ( empty($to) ) $to = time(); $diff = (int) abs($to - $from); if ($diff <= 3600) { $mins = round($diff / 60); if ($mins <= 1) { $mins = 1; } $since = sprintf(__ngettext('%s min', '%s mins', $mins), $mins); } else if (($diff <= 86400) && ($diff > 3600)) { $hours = round($diff / 3600); if ($hours <= 1) { $hour = 1; } $since = sprintf(__ngettext('%s hour', '%s hours', $hours), $hours); } elseif ($diff >= 86400) { $days = round($diff / 86400); if ($days <= 1) { $days = 1; } $since = sprintf(__ngettext('%s day', '%s days', $days), $days); } return $since; } function wp_trim_excerpt($text) { // Fakes an excerpt if needed global $post; if ( '' == $text ) { $text = get_the_content(''); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = 55; $words = explode(' ', $text, $excerpt_length + 1); if (count($words) > $excerpt_length) { array_pop($words); array_push($words, '[...]'); $text = implode(' ', $words); } } return $text; } function ent2ncr($text) { $to_ncr = array( '"' => '"', '&' => '&', '⁄' => '/', '<' => '<', '>' => '>', '|' => '|', ' ' => ' ', '¡' => '¡', '¢' => '¢', '£' => '£', '¤' => '¤', '¥' => '¥', '¦' => '¦', '&brkbar;' => '¦', '§' => '§', '¨' => '¨', '¨' => '¨', '©' => '©', 'ª' => 'ª', '«' => '«', '¬' => '¬', '­' => '­', '®' => '®', '¯' => '¯', '&hibar;' => '¯', '°' => '°', '±' => '±', '²' => '²', '³' => '³', '´' => '´', 'µ' => 'µ', '¶' => '¶', '·' => '·', '¸' => '¸', '¹' => '¹', 'º' => 'º', '»' => '»', '¼' => '¼', '½' => '½', '¾' => '¾', '¿' => '¿', 'À' => 'À', 'Á' => 'Á', 'Â' => 'Â', 'Ã' => 'Ã', 'Ä' => 'Ä', 'Å' => 'Å', 'Æ' => 'Æ', 'Ç' => 'Ç', 'È' => 'È', 'É' => 'É', 'Ê' => 'Ê', 'Ë' => 'Ë', 'Ì' => 'Ì', 'Í' => 'Í', 'Î' => 'Î', 'Ï' => 'Ï', 'Ð' => 'Ð', 'Ñ' => 'Ñ', 'Ò' => 'Ò', 'Ó' => 'Ó', 'Ô' => 'Ô', 'Õ' => 'Õ', 'Ö' => 'Ö', '×' => '×', 'Ø' => 'Ø', 'Ù' => 'Ù', 'Ú' => 'Ú', 'Û' => 'Û', 'Ü' => 'Ü', 'Ý' => 'Ý', 'Þ' => 'Þ', 'ß' => 'ß', 'à' => 'à', 'á' => 'á', 'â' => 'â', 'ã' => 'ã', 'ä' => 'ä', 'å' => 'å', 'æ' => 'æ', 'ç' => 'ç', 'è' => 'è', 'é' => 'é', 'ê' => 'ê', 'ë' => 'ë', 'ì' => 'ì', 'í' => 'í', 'î' => 'î', 'ï' => 'ï', 'ð' => 'ð', 'ñ' => 'ñ', 'ò' => 'ò', 'ó' => 'ó', 'ô' => 'ô', 'õ' => 'õ', 'ö' => 'ö', '÷' => '÷', 'ø' => 'ø', 'ù' => 'ù', 'ú' => 'ú', 'û' => 'û', 'ü' => 'ü', 'ý' => 'ý', 'þ' => 'þ', 'ÿ' => 'ÿ', 'Œ' => 'Œ', 'œ' => 'œ', 'Š' => 'Š', 'š' => 'š', 'Ÿ' => 'Ÿ', 'ƒ' => 'ƒ', 'ˆ' => 'ˆ', '˜' => '˜', 'Α' => 'Α', 'Β' => 'Β', 'Γ' => 'Γ', 'Δ' => 'Δ', 'Ε' => 'Ε', 'Ζ' => 'Ζ', 'Η' => 'Η', 'Θ' => 'Θ', 'Ι' => 'Ι', 'Κ' => 'Κ', 'Λ' => 'Λ', 'Μ' => 'Μ', 'Ν' => 'Ν', 'Ξ' => 'Ξ', 'Ο' => 'Ο', 'Π' => 'Π', 'Ρ' => 'Ρ', 'Σ' => 'Σ', 'Τ' => 'Τ', 'Υ' => 'Υ', 'Φ' => 'Φ', 'Χ' => 'Χ', 'Ψ' => 'Ψ', 'Ω' => 'Ω', 'α' => 'α', 'β' => 'β', 'γ' => 'γ', 'δ' => 'δ', 'ε' => 'ε', 'ζ' => 'ζ', 'η' => 'η', 'θ' => 'θ', 'ι' => 'ι', 'κ' => 'κ', 'λ' => 'λ', 'μ' => 'μ', 'ν' => 'ν', 'ξ' => 'ξ', 'ο' => 'ο', 'π' => 'π', 'ρ' => 'ρ', 'ς' => 'ς', 'σ' => 'σ', 'τ' => 'τ', 'υ' => 'υ', 'φ' => 'φ', 'χ' => 'χ', 'ψ' => 'ψ', 'ω' => 'ω', 'ϑ' => 'ϑ', 'ϒ' => 'ϒ', 'ϖ' => 'ϖ', ' ' => ' ', ' ' => ' ', ' ' => ' ', '‌' => '‌', '‍' => '‍', '‎' => '‎', '‏' => '‏', '–' => '–', '—' => '—', '‘' => '‘', '’' => '’', '‚' => '‚', '“' => '“', '”' => '”', '„' => '„', '†' => '†', '‡' => '‡', '•' => '•', '…' => '…', '‰' => '‰', '′' => '′', '″' => '″', '‹' => '‹', '›' => '›', '‾' => '‾', '⁄' => '⁄', '€' => '€', 'ℑ' => 'ℑ', '℘' => '℘', 'ℜ' => 'ℜ', '™' => '™', 'ℵ' => 'ℵ', '↵' => '↵', '⇐' => '⇐', '⇑' => '⇑', '⇒' => '⇒', '⇓' => '⇓', '⇔' => '⇔', '∀' => '∀', '∂' => '∂', '∃' => '∃', '∅' => '∅', '∇' => '∇', '∈' => '∈', '∉' => '∉', '∋' => '∋', '∏' => '∏', '∑' => '∑', '−' => '−', '∗' => '∗', '√' => '√', '∝' => '∝', '∞' => '∞', '∠' => '∠', '∧' => '∧', '∨' => '∨', '∩' => '∩', '∪' => '∪', '∫' => '∫', '∴' => '∴', '∼' => '∼', '≅' => '≅', '≈' => '≈', '≠' => '≠', '≡' => '≡', '≤' => '≤', '≥' => '≥', '⊂' => '⊂', '⊃' => '⊃', '⊄' => '⊄', '⊆' => '⊆', '⊇' => '⊇', '⊕' => '⊕', '⊗' => '⊗', '⊥' => '⊥', '⋅' => '⋅', '⌈' => '⌈', '⌉' => '⌉', '⌊' => '⌊', '⌋' => '⌋', '⟨' => '〈', '⟩' => '〉', '←' => '←', '↑' => '↑', '→' => '→', '↓' => '↓', '↔' => '↔', '◊' => '◊', '♠' => '♠', '♣' => '♣', '♥' => '♥', '♦' => '♦' ); return str_replace( array_keys($to_ncr), array_values($to_ncr), $text ); } function wp_richedit_pre($text) { // Filtering a blank results in an annoying <br />\n if ( empty($text) ) return apply_filters('richedit_pre', ''); $output = $text; $output = convert_chars($output); $output = wpautop($output); // These must be double-escaped or planets will collide. $output = str_replace('<', '&lt;', $output); $output = str_replace('>', '&gt;', $output); return apply_filters('richedit_pre', $output); } function clean_url( $url, $protocols = null ) { if ('' == $url) return $url; // printf ("URL [$url]"); $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@]|i', '', $url); // printf ("URL_EXIT [$url]"); $strip = array('%0d', '%0a'); $url = str_replace($strip, '', $url); $url = str_replace(';//', '://', $url); // Append http unless a relative link starting with / or a php file. if ( strpos($url, '://') == false && substr( $url, 0, 1 ) != '/' && !preg_match('/^[a-z0-9-]+?\.php/i', $url) ) $url = 'http://' . $url; $url = preg_replace('/&([^#])(?![a-z]{2,8};)/', '&$1', $url); if ( !is_array($protocols) ) $protocols = array('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet'); if ( wp_kses_bad_protocol( $url, $protocols ) != $url ) return ''; return $url; } // Borrowed from the PHP Manual user notes. Convert entities, while // preserving already-encoded entities: function htmlentities2($myHTML) { $translation_table=get_html_translation_table (HTML_ENTITIES,ENT_QUOTES); $translation_table[chr(38)] = '&'; return preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&" , strtr($myHTML, $translation_table)); } // Escape single quotes, specialchar double quotes, and fix line endings. function js_escape($text) { $safe_text = wp_specialchars($text, 'double'); $safe_text = preg_replace('/&#(x)?0*(?(1)27|39);?/i', "'", stripslashes($safe_text)); $safe_text = preg_replace("/\r?\n/", "\\n", addslashes($safe_text)); return apply_filters('js_escape', $safe_text, $text); } // Escaping for HTML attributes function attribute_escape($text) { $safe_text = wp_specialchars($text, true); return apply_filters('attribute_escape', $safe_text, $text); } function wp_make_link_relative( $link ) { return preg_replace('|https?://[^/]+(/.*)|i', '$1', $link ); } function sanitize_option($option, $value) { // Remember to call stripslashes! switch ($option) { case 'admin_email': $value = sanitize_email($value); break; case 'default_post_edit_rows': case 'mailserver_port': case 'comment_max_links': case 'page_on_front': case 'rss_excerpt_length': case 'default_category': case 'default_email_category': case 'default_link_category': $value = abs((int) $value); break; case 'posts_per_page': case 'posts_per_rss': $value = (int) $value; if ( empty($value) ) $value = 1; if ( $value < -1 ) $value = abs($value); break; case 'default_ping_status': case 'default_comment_status': // Options that if not there have 0 value but need to be something like "closed" if ( $value == '0' || $value == '') $value = 'closed'; break; case 'blogdescription': case 'blogname': $value = addslashes($value); $value = wp_filter_post_kses( $value ); // calls stripslashes then addslashes $value = stripslashes($value); $value = wp_specialchars( $value ); break; case 'blog_charset': $value = preg_replace('/[^a-zA-Z0-9_-]/', '', $value); // strips slashes break; case 'date_format': case 'time_format': case 'mailserver_url': case 'mailserver_login': case 'mailserver_pass': case 'ping_sites': case 'upload_path': $value = strip_tags($value); $value = addslashes($value); $value = wp_filter_kses($value); // calls stripslashes then addslashes $value = stripslashes($value); break; case 'gmt_offset': $value = preg_replace('/[^0-9:.-]/', '', $value); // strips slashes break; case 'siteurl': case 'home': $value = stripslashes($value); $value = clean_url($value); break; default : break; } return $value; } function wp_parse_str( $string, &$array ) { parse_str( $string, $array ); if ( get_magic_quotes_gpc() ) $array = stripslashes_deep( $array ); // parse_str() adds slashes if magicquotes is on. See: http://php.net/parse_str $array = apply_filters( 'wp_parse_str', $array ); } ?> ���;wordpress/wp-includes/.svn/text-base/functions.php.svn-base��5<?php require_once(dirname(__FILE__).'/compat.php'); function mysql2date($dateformatstring, $mysqlstring, $translate = true) { global $wp_locale; $m = $mysqlstring; if ( empty($m) ) { return false; } $i = mktime( (int) substr( $m, 11, 2 ), (int) substr( $m, 14, 2 ), (int) substr( $m, 17, 2 ), (int) substr( $m, 5, 2 ), (int) substr( $m, 8, 2 ), (int) substr( $m, 0, 4 ) ); if( 'U' == $dateformatstring ) return $i; if ( -1 == $i || false == $i ) $i = 0; if ( !empty($wp_locale->month) && !empty($wp_locale->weekday) && $translate ) { $datemonth = $wp_locale->get_month(date('m', $i)); $datemonth_abbrev = $wp_locale->get_month_abbrev($datemonth); $dateweekday = $wp_locale->get_weekday(date('w', $i)); $dateweekday_abbrev = $wp_locale->get_weekday_abbrev($dateweekday); $datemeridiem = $wp_locale->get_meridiem(date('a', $i)); $datemeridiem_capital = $wp_locale->get_meridiem(date('A', $i)); $dateformatstring = ' '.$dateformatstring; $dateformatstring = preg_replace("/([^\\\])D/", "\\1".backslashit($dateweekday_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])F/", "\\1".backslashit($datemonth), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])l/", "\\1".backslashit($dateweekday), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])M/", "\\1".backslashit($datemonth_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])a/", "\\1".backslashit($datemeridiem), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])A/", "\\1".backslashit($datemeridiem_capital), $dateformatstring); $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1); } $j = @date($dateformatstring, $i); if ( !$j ) { // for debug purposes // echo $i." ".$mysqlstring; } return $j; } function current_time($type, $gmt = 0) { switch ($type) { case 'mysql': if ( $gmt ) $d = gmdate('Y-m-d H:i:s'); else $d = gmdate('Y-m-d H:i:s', (time() + (get_option('gmt_offset') * 3600))); return $d; break; case 'timestamp': if ( $gmt ) $d = time(); else $d = time() + (get_option('gmt_offset') * 3600); return $d; break; } } function date_i18n($dateformatstring, $unixtimestamp) { global $wp_locale; $i = $unixtimestamp; if ( (!empty($wp_locale->month)) && (!empty($wp_locale->weekday)) ) { $datemonth = $wp_locale->get_month(date('m', $i)); $datemonth_abbrev = $wp_locale->get_month_abbrev($datemonth); $dateweekday = $wp_locale->get_weekday(date('w', $i)); $dateweekday_abbrev = $wp_locale->get_weekday_abbrev($dateweekday); $datemeridiem = $wp_locale->get_meridiem(date('a', $i)); $datemeridiem_capital = $wp_locale->get_meridiem(date('A', $i)); $dateformatstring = ' '.$dateformatstring; $dateformatstring = preg_replace("/([^\\\])D/", "\\1".backslashit($dateweekday_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])F/", "\\1".backslashit($datemonth), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])l/", "\\1".backslashit($dateweekday), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])M/", "\\1".backslashit($datemonth_abbrev), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])a/", "\\1".backslashit($datemeridiem), $dateformatstring); $dateformatstring = preg_replace("/([^\\\])A/", "\\1".backslashit($datemeridiem_capital), $dateformatstring); $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring)-1); } $j = @date($dateformatstring, $i); return $j; } function get_weekstartend($mysqlstring, $start_of_week) { $my = substr($mysqlstring,0,4); $mm = substr($mysqlstring,8,2); $md = substr($mysqlstring,5,2); $day = mktime(0,0,0, $md, $mm, $my); $weekday = date('w',$day); $i = 86400; if ( $weekday < get_option('start_of_week') ) $weekday = 7 - (get_option('start_of_week') - $weekday); while ($weekday > get_option('start_of_week')) { $weekday = date('w',$day); if ( $weekday < get_option('start_of_week') ) $weekday = 7 - (get_option('start_of_week') - $weekday); $day = $day - 86400; $i = 0; } $week['start'] = $day + 86400 - $i; // $week['end'] = $day - $i + 691199; $week['end'] = $week['start'] + 604799; return $week; } function get_lastpostdate($timezone = 'server') { global $cache_lastpostdate, $pagenow, $wpdb, $blog_id; $add_seconds_blog = get_option('gmt_offset') * 3600; $add_seconds_server = date('Z'); if ( !isset($cache_lastpostdate[$blog_id][$timezone]) ) { switch(strtolower($timezone)) { case 'gmt': $lastpostdate = $wpdb->get_var("SELECT post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC"); // LIMIT 1 break; case 'blog': $lastpostdate = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC"); // LIMIT 1 break; case 'server': $lastpostdate = $wpdb->get_var("SELECT dateadd('second', " . $add_seconds_server ." , stringdate(post_date_gmt) ) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date_gmt DESC"); // LIMIT 1 break; } $cache_lastpostdate[$blog_id][$timezone] = $lastpostdate; } else { $lastpostdate = $cache_lastpostdate[$blog_id][$timezone]; } return $lastpostdate; } function get_lastpostmodified($timezone = 'server') { global $cache_lastpostmodified, $pagenow, $wpdb, $blog_id; $add_seconds_blog = get_option('gmt_offset') * 3600; $add_seconds_server = date('Z'); if ( !isset($cache_lastpostmodified[$blog_id][$timezone]) ) { switch(strtolower($timezone)) { case 'gmt': $lastpostmodified = $wpdb->get_var("SELECT post_modified_gmt FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC"); // LIMIT 1 break; case 'blog': $lastpostmodified = $wpdb->get_var("SELECT post_modified FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC"); // LIMIT 1 break; case 'server': $lastpostmodified = $wpdb->get_var("SELECT dateadd('second', " . $add_seconds_server . " , stringdate(post_modified_gmt) ) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_modified_gmt DESC"); // LIMIT 1 break; } $lastpostdate = get_lastpostdate($timezone); if ( $lastpostdate > $lastpostmodified ) { $lastpostmodified = $lastpostdate; } $cache_lastpostmodified[$blog_id][$timezone] = $lastpostmodified; } else { $lastpostmodified = $cache_lastpostmodified[$blog_id][$timezone]; } return $lastpostmodified; } function maybe_unserialize($original) { if ( is_serialized($original) ) // don't attempt to unserialize data that wasn't serialized going in if ( false != $gm = @ unserialize($original) ) return $gm; return $original; } function is_serialized($data) { // if it isn't a string, it isn't serialized if ( !is_string($data) ) return false; $data = trim($data); if ( 'N;' == $data ) return true; if ( !preg_match('/^([adObis]):/', $data, $badions) ) return false; switch ( $badions[1] ) : case 'a' : case 'O' : case 's' : if ( preg_match("/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data) ) return true; break; case 'b' : case 'i' : case 'd' : if ( preg_match("/^{$badions[1]}:[0-9.E-]+;\$/", $data) ) return true; break; endswitch; return false; } function is_serialized_string($data) { // if it isn't a string, it isn't a serialized string if ( !is_string($data) ) return false; $data = trim($data); if ( preg_match('/^s:[0-9]+:.*;$/s',$data) ) // this should fetch all serialized strings return true; return false; } /* Options functions */ // expects $setting to already be SQL-escaped function get_option($setting) { global $wpdb; // Allow plugins to short-circuit options. $pre = apply_filters( 'pre_option_' . $setting, false ); if ( $pre ) return $pre; // prevent non-existent options from triggering multiple queries $notoptions = wp_cache_get('notoptions', 'options'); if ( isset($notoptions[$setting]) ) return false; $alloptions = wp_load_alloptions(); if ( isset($alloptions[$setting]) ) { $value = $alloptions[$setting]; } else { $value = wp_cache_get($setting, 'options'); if ( false == $value ) { if ( defined('WP_INSTALLING') ) $wpdb->hide_errors(); $row = $wpdb->get_row("SELECT option_value FROM $wpdb->options WHERE option_name = '$setting'");// LIMIT 1 if ( defined('WP_INSTALLING') ) $wpdb->show_errors(); if( is_object( $row) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values $value = $row->option_value; wp_cache_add($setting, $value, 'options'); } else { // option does not exist, so we must cache its non-existence $notoptions[$setting] = true; wp_cache_set('notoptions', $notoptions, 'options'); return false; } } } // If home is not set use siteurl. if ( 'home' == $setting && '' == $value ) return get_option('siteurl'); if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) $value = preg_replace('|/+$|', '', $value); return apply_filters( 'option_' . $setting, maybe_unserialize($value) ); } function wp_protect_special_option($option) { $protected = array('alloptions', 'notoptions'); if ( in_array($option, $protected) ) die(sprintf(__('%s is a protected WP option and may not be modified'), wp_specialchars($option))); } function form_option($option) { echo attribute_escape(get_option($option)); } function get_alloptions() { global $wpdb, $wp_queries; $wpdb->hide_errors(); if ( !$options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'") ) { $options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options"); } $wpdb->show_errors(); foreach ($options as $option) { // "When trying to design a foolproof system, // never underestimate the ingenuity of the fools :)" -- Dougal if ( 'siteurl' == $option->option_name ) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ( 'home' == $option->option_name ) $option->option_value = preg_replace('|/+$|', '', $option->option_value); if ( 'category_base' == $option->option_name ) $option->option_value = preg_replace('|/+$|', '', $option->option_value); $value = maybe_unserialize($option->option_value); $all_options->{$option->option_name} = apply_filters('pre_option_' . $option->option_name, $value); } return apply_filters('all_options', $all_options); } function wp_load_alloptions() { global $wpdb; $alloptions = wp_cache_get('alloptions', 'options'); if ( !$alloptions ) { $wpdb->hide_errors(); if ( !$alloptions_db = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'") ) $alloptions_db = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options"); $wpdb->show_errors(); $alloptions = array(); foreach ( (array) $alloptions_db as $o ) $alloptions[$o->option_name] = $o->option_value; wp_cache_add('alloptions', $alloptions, 'options'); } return $alloptions; } // expects $option_name to NOT be SQL-escaped function update_option($option_name, $newvalue) { global $wpdb; wp_protect_special_option($option_name); $safe_option_name = $wpdb->escape($option_name); if ( is_string($newvalue) ) $newvalue = trim($newvalue); // If the new and old values are the same, no need to update. $oldvalue = get_option($safe_option_name); if ( $newvalue == $oldvalue ) { return false; } if ( false == $oldvalue ) { add_option($option_name, $newvalue); return true; } $notoptions = wp_cache_get('notoptions', 'options'); if ( is_array($notoptions) && isset($notoptions[$option_name]) ) { unset($notoptions[$option_name]); wp_cache_set('notoptions', $notoptions, 'options'); } $_newvalue = $newvalue; $newvalue = maybe_serialize($newvalue); $alloptions = wp_load_alloptions(); if ( isset($alloptions[$option_name]) ) { $alloptions[$option_name] = $newvalue; wp_cache_set('alloptions', $alloptions, 'options'); } else { wp_cache_set($option_name, $newvalue, 'options'); } $newvalue = $wpdb->escape($newvalue); $option_name = $wpdb->escape($option_name); $wpdb->query("UPDATE $wpdb->options SET option_value = '$newvalue' WHERE option_name = '$option_name'"); if ( $wpdb->rows_affected == 1 ) { do_action("update_option_{$option_name}", $oldvalue, $_newvalue); return true; } return false; } // thx Alex Stapleton, http://alex.vort-x.net/blog/ // expects $name to NOT be SQL-escaped function add_option($name, $value = '', $description = '', $autoload = 'yes') { global $wpdb; wp_protect_special_option($name); $safe_name = $wpdb->escape($name); // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query $notoptions = wp_cache_get('notoptions', 'options'); if ( !is_array($notoptions) || !isset($notoptions[$name]) ) if ( false != get_option($safe_name) ) return; $value = maybe_serialize($value); $autoload = ( 'no' == $autoload ) ? 'no' : 'yes'; if ( 'yes' == $autoload ) { $alloptions = wp_load_alloptions(); $alloptions[$name] = $value; wp_cache_set('alloptions', $alloptions, 'options'); } else { wp_cache_set($name, $value, 'options'); } // This option exists now $notoptions = wp_cache_get('notoptions', 'options'); // yes, again... we need it to be fresh if ( is_array($notoptions) && isset($notoptions[$name]) ) { unset($notoptions[$name]); wp_cache_set('notoptions', $notoptions, 'options'); } $name = $wpdb->escape($name); $value = $wpdb->escape($value); $description = $wpdb->escape($description); $wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, option_description, autoload) VALUES ('$name', '$value', '$description', '$autoload')"); return; } function delete_option($name) { global $wpdb; wp_protect_special_option($name); // Get the ID, if no ID then return $option = $wpdb->get_row("SELECT option_id, autoload FROM $wpdb->options WHERE option_name = '$name'"); if ( !$option->option_id ) return false; $wpdb->query("DELETE FROM $wpdb->options WHERE option_name = '$name'"); if ( 'yes' == $option->autoload ) { $alloptions = wp_load_alloptions(); if ( isset($alloptions[$name]) ) { unset($alloptions[$name]); wp_cache_set('alloptions', $alloptions, 'options'); } } else { wp_cache_delete($name, 'options'); } return true; } function maybe_serialize($data) { if ( is_string($data) ) $data = trim($data); elseif ( is_array($data) || is_object($data) ) return serialize($data); if ( is_serialized($data) ) return serialize($data); return $data; } function gzip_compression() { if ( !get_option('gzipcompression') ) return false; if ( extension_loaded('zlib') ) { ob_start('ob_gzhandler'); } } function make_url_footnote($content) { preg_match_all('/<a(.+?)href=\"(.+?)\"(.*?)>(.+?)<\/a>/', $content, $matches); $j = 0; for ($i=0; $i<count($matches[0]); $i++) { $links_summary = (!$j) ? "\n" : $links_summary; $j++; $link_match = $matches[0][$i]; $link_number = '['.($i+1).']'; $link_url = $matches[2][$i]; $link_text = $matches[4][$i]; $content = str_replace($link_match, $link_text.' '.$link_number, $content); $link_url = ((strtolower(substr($link_url,0,7)) != 'http://') && (strtolower(substr($link_url,0,8)) != 'https://')) ? get_option('home') . $link_url : $link_url; $links_summary .= "\n".$link_number.' '.$link_url; } $content = strip_tags($content); $content .= $links_summary; return $content; } function xmlrpc_getposttitle($content) { global $post_default_title; if ( preg_match('/<title>(.+?)<\/title>/is', $content, $matchtitle) ) { $post_title = $matchtitle[0]; $post_title = preg_replace('/<title>/si', '', $post_title); $post_title = preg_replace('/<\/title>/si', '', $post_title); } else { $post_title = $post_default_title; } return $post_title; } function xmlrpc_getpostcategory($content) { global $post_default_category; if ( preg_match('/<category>(.+?)<\/category>/is', $content, $matchcat) ) { $post_category = trim($matchcat[1], ','); $post_category = explode(',', $post_category); } else { $post_category = $post_default_category; } return $post_category; } function xmlrpc_removepostdata($content) { $content = preg_replace('/<title>(.+?)<\/title>/si', '', $content); $content = preg_replace('/<category>(.+?)<\/category>/si', '', $content); $content = trim($content); return $content; } function debug_fopen($filename, $mode) { global $debug; if ( $debug == 1 ) { $fp = fopen($filename, $mode); return $fp; } else { return false; } } function debug_fwrite($fp, $string) { global $debug; if ( $debug == 1 ) { fwrite($fp, $string); } } function debug_fclose($fp) { global $debug; if ( $debug == 1 ) { fclose($fp); } } function do_enclose( $content, $post_ID ) { global $wp_version, $wpdb; include_once (ABSPATH . WPINC . '/class-IXR.php'); $log = debug_fopen(ABSPATH . '/enclosures.log', 'a'); $post_links = array(); debug_fwrite($log, 'BEGIN '.date('YmdHis', time())."\n"); $pung = get_enclosed( $post_ID ); $ltrs = '\w'; $gunk = '/#~:.?+=&%@!\-'; $punc = '.:?\-'; $any = $ltrs . $gunk . $punc; preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp); debug_fwrite($log, 'Post contents:'); debug_fwrite($log, $content."\n"); foreach($post_links_temp[0] as $link_test) { if ( !in_array($link_test, $pung) ) : // If we haven't pung it already $test = parse_url($link_test); if ( isset($test['query']) ) $post_links[] = $link_test; elseif (($test['path'] != '/') && ($test['path'] != '')) $post_links[] = $link_test; endif; } foreach ($post_links as $url) { if ( $url != '' && !$wpdb->get_var("SELECT post_id FROM $wpdb->postmeta WHERE post_id = " . $post_ID . " AND meta_key = 'enclosure' AND meta_value LIKE ('$url%')") ) { if ( $headers = wp_get_http_headers( $url) ) { $len = (int) $headers['content-length']; $type = $wpdb->escape( $headers['content-type'] ); $allowed_types = array( 'video', 'audio' ); if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) { $meta_value = "$url\n$len\n$type\n"; $wpdb->query( "INSERT INTO $wpdb->postmeta ( post_id , meta_key , meta_value ) VALUES ( $post_ID, 'enclosure' , '$meta_value')" ); } } } } } function wp_get_http_headers( $url, $red = 1 ) { global $wp_version; @set_time_limit( 60 ); if ( $red > 5 ) return false; $parts = parse_url( $url ); $file = $parts['path'] . ($parts['query'] ? '?'.$parts['query'] : ''); $host = $parts['host']; if ( !isset( $parts['port'] ) ) $parts['port'] = 80; $head = "HEAD $file HTTP/1.1\r\nHOST: $host\r\nUser-Agent: WordPress/" . $wp_version . "\r\n\r\n"; $fp = @fsockopen($host, $parts['port'], $err_num, $err_msg, 3); if ( !$fp ) return false; $response = ''; fputs( $fp, $head ); while ( !feof( $fp ) && strpos( $response, "\r\n\r\n" ) == false ) $response .= fgets( $fp, 2048 ); fclose( $fp ); preg_match_all('/(.*?): (.*)\r/', $response, $matches); $count = count($matches[1]); for ( $i = 0; $i < $count; $i++) { $key = strtolower($matches[1][$i]); $headers["$key"] = $matches[2][$i]; } preg_match('/.*([0-9]{3}).*/', $response, $return); $headers['response'] = $return[1]; // HTTP response code eg 204, 200, 404 $code = $headers['response']; if ( ('302' == $code || '301' == $code) && isset($headers['location']) ) return wp_get_http_headers( $headers['location'], ++$red ); return $headers; } function is_new_day() { global $day, $previousday; if ( $day != $previousday ) { return(1); } else { return(0); } } function update_post_cache(&$posts) { global $post_cache, $blog_id; if ( !$posts ) return; for ($i = 0; $i < count($posts); $i++) { $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i]; } } function clean_post_cache($id) { global $post_cache, $post_meta_cache, $category_cache, $blog_id; if ( isset( $post_cache[$blog_id][$id] ) ) unset( $post_cache[$blog_id][$id] ); if ( isset ($post_meta_cache[$blog_id][$id] ) ) unset( $post_meta_cache[$blog_id][$id] ); if ( isset( $category_cache[$blog_id][$id]) ) unset ( $category_cache[$blog_id][$id] ); } function update_page_cache(&$pages) { global $page_cache, $blog_id; if ( !$pages ) return; for ($i = 0; $i < count($pages); $i++) { $page_cache[$blog_id][$pages[$i]->ID] = &$pages[$i]; wp_cache_add($pages[$i]->ID, $pages[$i], 'pages'); } } function clean_page_cache($id) { global $page_cache, $blog_id; if ( isset( $page_cache[$blog_id][$id] ) ) unset( $page_cache[$blog_id][$id] ); wp_cache_delete($id, 'pages'); wp_cache_delete( 'all_page_ids', 'pages' ); wp_cache_delete( 'get_pages', 'page' ); } function update_post_category_cache($post_ids) { global $wpdb, $category_cache, $blog_id; if ( empty($post_ids) ) return; if ( is_array($post_ids) ) $post_id_list = implode(',', $post_ids); $post_id_array = (array) explode(',', $post_ids); $count = count( $post_id_array); for ( $i = 0; $i < $count; $i++ ) { $post_id = (int) $post_id_array[ $i ]; if ( isset( $category_cache[$blog_id][$post_id] ) ) { unset( $post_id_array[ $i ] ); continue; } } if ( count( $post_id_array ) == 0 ) return; $post_id_list = join( ',', $post_id_array ); // with already cached stuff removed $dogs = $wpdb->get_results("SELECT post_id, category_id FROM $wpdb->post2cat WHERE post_id IN ($post_id_list)"); if ( empty($dogs) ) return; foreach ($dogs as $catt) $category_cache[$blog_id][$catt->post_id][$catt->category_id] = &get_category($catt->category_id); } function update_post_caches(&$posts) { global $post_cache, $category_cache, $post_meta_cache; global $wpdb, $blog_id; // No point in doing all this work if we didn't match any posts. if ( !$posts ) return; // Get the categories for all the posts for ($i = 0; $i < count($posts); $i++) { $post_id_array[] = $posts[$i]->ID; $post_cache[$blog_id][$posts[$i]->ID] = &$posts[$i]; } $post_id_list = implode(',', $post_id_array); update_post_category_cache($post_id_list); update_postmeta_cache($post_id_list); } function update_postmeta_cache($post_id_list = '') { global $wpdb, $post_meta_cache, $blog_id; // We should validate this comma-separated list for the upcoming SQL query $post_id_list = preg_replace('|[^0-9,]|', '', $post_id_list); if ( empty( $post_id_list ) ) return false; // we're marking each post as having its meta cached (with no keys... empty array), to prevent posts with no meta keys from being queried again // any posts that DO have keys will have this empty array overwritten with a proper array, down below $post_id_array = (array) explode(',', $post_id_list); $count = count( $post_id_array); for ( $i = 0; $i < $count; $i++ ) { $post_id = (int) $post_id_array[ $i ]; if ( isset( $post_meta_cache[$blog_id][$post_id] ) ) { // If the meta is already cached unset( $post_id_array[ $i ] ); continue; } $post_meta_cache[$blog_id][$post_id] = array(); } if ( count( $post_id_array ) == 0 ) return; $post_id_list = join( ',', $post_id_array ); // with already cached stuff removeds // Get post-meta info if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN($post_id_list) ORDER BY post_id, meta_key", ARRAY_A) ) { // Change from flat structure to hierarchical: if ( !isset($post_meta_cache) ) $post_meta_cache[$blog_id] = array(); foreach ($meta_list as $metarow) { $mpid = (int) $metarow['post_id']; $mkey = $metarow['meta_key']; $mval = $metarow['meta_value']; // Force subkeys to be array type: if ( !isset($post_meta_cache[$blog_id][$mpid]) || !is_array($post_meta_cache[$blog_id][$mpid]) ) $post_meta_cache[$blog_id][$mpid] = array(); if ( !isset($post_meta_cache[$blog_id][$mpid]["$mkey"]) || !is_array($post_meta_cache[$blog_id][$mpid]["$mkey"]) ) $post_meta_cache[$blog_id][$mpid]["$mkey"] = array(); // Add a value to the current pid/key: $post_meta_cache[$blog_id][$mpid][$mkey][] = $mval; } } } function update_category_cache() { return true; } function clean_category_cache($id) { wp_cache_delete($id, 'category'); wp_cache_delete('all_category_ids', 'category'); wp_cache_delete('get_categories', 'category'); delete_option('category_children'); } /* add_query_arg: Returns a modified querystring by adding a single key & value or an associative array. Setting a key value to emptystring removes the key. Omitting oldquery_or_uri uses the $_SERVER value. Parameters: add_query_arg(newkey, newvalue, oldquery_or_uri) or add_query_arg(associative_array, oldquery_or_uri) */ function add_query_arg() { $ret = ''; if ( is_array(func_get_arg(0)) ) { if ( @func_num_args() < 2 || false == @func_get_arg(1) ) $uri = $_SERVER['REQUEST_URI']; else $uri = @func_get_arg(1); } else { if ( @func_num_args() < 3 || false == @func_get_arg(2) ) $uri = $_SERVER['REQUEST_URI']; else $uri = @func_get_arg(2); } //printf ("1{" . $uri . "}" ); if ( $frag = strstr($uri, '#') ) $uri = substr($uri, 0, -strlen($frag)); else $frag = ''; if ( preg_match('|^https?://|i', $uri, $matches) ) { $protocol = $matches[0]; $uri = substr($uri, strlen($protocol)); } else { $protocol = ''; } if (strpos($uri, '?') != false) { $parts = explode('?', $uri, 2); if ( 1 == count($parts) ) { $base = '?'; $query = $parts[0]; } else { $base = $parts[0] . '?'; $query = $parts[1]; } } elseif (!empty($protocol) || strpos($uri, '/') != false) { $base = $uri . "?"; $query = ''; } else { $base = '?'; $query = $uri; } wp_parse_str($query, $qs); $qs = urlencode_deep($qs); if ( is_array(func_get_arg(0)) ) { $kayvees = func_get_arg(0); $qs = array_merge($qs, $kayvees); } else { $qs[func_get_arg(0)] = func_get_arg(1); } foreach($qs as $k => $v) { if ( $v != FALSE ) { if ( $ret != '' ) $ret .= '&'; if ( empty($v) && !preg_match('|[?&]' . preg_quote($k, '|') . '=|', $query) ) $ret .= $k; else $ret .= "$k=$v"; } } //printf ("2{" . $ret . "}" ); $ret = trim($ret, '?'); //printf ("3{" . $ret . "}" ); $ret = $protocol . $base . $ret . $frag; $ret = rtrim($ret, '?'); //printf ("4{" . $ret . "}" ); return $ret; } /* remove_query_arg: Returns a modified querystring by removing a single key or an array of keys. Omitting oldquery_or_uri uses the $_SERVER value. Parameters: remove_query_arg(removekey, [oldquery_or_uri]) or remove_query_arg(removekeyarray, [oldquery_or_uri]) */ function remove_query_arg($key, $query=FALSE) { if ( is_array($key) ) { // removing multiple keys foreach ( (array) $key as $k ) $query = add_query_arg($k, FALSE, $query); return $query; } return add_query_arg($key, FALSE, $query); } function add_magic_quotes($array) { global $wpdb; foreach ($array as $k => $v) { if ( is_array($v) ) { $array[$k] = add_magic_quotes($v); } else { $array[$k] = $wpdb->escape($v); } } return $array; } function wp_remote_fopen( $uri ) { $timeout = 10; $parsed_url = @parse_url($uri); if ( !$parsed_url || !is_array($parsed_url) ) return false; if ( !isset($parsed_url['scheme']) || !in_array($parsed_url['scheme'], array('http','https')) ) $uri = 'http://' . $uri; if ( ini_get('allow_url_fopen') ) { $fp = @fopen( $uri, 'r' ); if ( !$fp ) return false; //stream_set_timeout($fp, $timeout); // Requires php 4.3 $linea = ''; while( $remote_read = fread($fp, 4096) ) $linea .= $remote_read; fclose($fp); return $linea; } else if ( function_exists('curl_init') ) { $handle = curl_init(); curl_setopt ($handle, CURLOPT_URL, $uri); curl_setopt ($handle, CURLOPT_CONNECTTIMEOUT, 1); curl_setopt ($handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($handle, CURLOPT_TIMEOUT, $timeout); $buffer = curl_exec($handle); curl_close($handle); return $buffer; } else { return false; } } function wp($query_vars = '') { global $wp; $wp->main($query_vars); } function status_header( $header ) { if ( 200 == $header ) $text = 'OK'; elseif ( 301 == $header ) $text = 'Moved Permanently'; elseif ( 302 == $header ) $text = 'Moved Temporarily'; elseif ( 304 == $header ) $text = 'Not Modified'; elseif ( 404 == $header ) $text = 'Not Found'; elseif ( 410 == $header ) $text = 'Gone'; $protocol = $_SERVER["SERVER_PROTOCOL"]; if ( ('HTTP/1.1' != $protocol) && ('HTTP/1.0' != $protocol) ) $protocol = 'HTTP/1.0'; $status_header = "$protocol $header $text"; $status_header = apply_filters('status_header', $status_header, $header, $text, $protocol); if ( version_compare( phpversion(), '4.3.0', '>=' ) ) { return @header( $status_header, true, $header ); } else { return @header( $status_header ); } } function nocache_headers() { @ header('Expires: Wed, 11 Jan 1984 05:00:00 GMT'); @ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); @ header('Cache-Control: no-cache, must-revalidate, max-age=0'); @ header('Pragma: no-cache'); } function cache_javascript_headers() { $expiresOffset = 864000; // 10 days header("Content-type: text/javascript; charset=" . get_bloginfo('charset')); header("Vary: Accept-Encoding"); // Handle proxies header("Expires: " . gmdate("D, d M Y H:i:s", time() + $expiresOffset) . " GMT"); } function get_num_queries() { global $wpdb; return $wpdb->num_queries; } function bool_from_yn($yn) { if ($yn == 'Y') return 1; return 0; } function do_feed() { global $wp_query; $feed = get_query_var('feed'); // Remove the pad, if present. $feed = preg_replace('/^_+/', '', $feed); if ( $feed == '' || $feed == 'feed' ) $feed = 'rss2'; $hook = 'do_feed_' . $feed; do_action($hook, $wp_query->is_comment_feed); } function do_feed_rdf() { load_template(ABSPATH . WPINC . '/feed-rdf.php'); } function do_feed_rss() { load_template(ABSPATH . WPINC . '/feed-rss.php'); } function do_feed_rss2($for_comments) { if ( $for_comments ) { load_template(ABSPATH . WPINC . '/feed-rss2-comments.php'); } else { load_template(ABSPATH . WPINC . '/feed-rss2.php'); } } function do_feed_atom($for_comments) { if ($for_comments) { load_template(ABSPATH . WPINC . '/feed-atom-comments.php'); } else { load_template(ABSPATH . WPINC . '/feed-atom.php'); } } function do_robots() { header('Content-type: text/plain; charset=utf-8'); do_action('do_robotstxt'); if ( '0' == get_option('blog_public') ) { echo "User-agent: *\n"; echo "Disallow: /\n"; } else { echo "User-agent: *\n"; echo "Disallow:\n"; } } function is_blog_installed() { global $wpdb; $wpdb->hide_errors(); $installed = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'"); $wpdb->show_errors(); $install_status = !empty( $installed ) ? TRUE : FALSE; return $install_status; } function wp_nonce_url($actionurl, $action = -1) { return wp_specialchars(add_query_arg('_wpnonce', wp_create_nonce($action), $actionurl)); } function wp_nonce_field($action = -1, $name = "_wpnonce", $referer = true) { $name = attribute_escape($name); echo '<input type="hidden" name="' . $name . '" value="' . wp_create_nonce($action) . '" />'; if ( $referer ) wp_referer_field(); } function wp_referer_field() { $ref = attribute_escape($_SERVER['REQUEST_URI']); echo '<input type="hidden" name="_wp_http_referer" value="'. $ref . '" />'; if ( wp_get_original_referer() ) { $original_ref = attribute_escape(stripslashes(wp_get_original_referer())); echo '<input type="hidden" name="_wp_original_http_referer" value="'. $original_ref . '" />'; } } function wp_original_referer_field() { echo '<input type="hidden" name="_wp_original_http_referer" value="' . attribute_escape(stripslashes($_SERVER['REQUEST_URI'])) . '" />'; } function wp_get_referer() { foreach ( array($_REQUEST['_wp_http_referer'], $_SERVER['HTTP_REFERER']) as $ref ) if ( !empty($ref) ) return $ref; return false; } function wp_get_original_referer() { if ( !empty($_REQUEST['_wp_original_http_referer']) ) return $_REQUEST['_wp_original_http_referer']; return false; } function wp_mkdir_p($target) { // from php.net/mkdir user contributed notes if (file_exists($target)) { if (! @ is_dir($target)) return false; else return true; } // Attempting to create the directory may clutter up our display. if (@ mkdir($target)) { $stat = @ stat(dirname($target)); $dir_perms = $stat['mode'] & 0007777; // Get the permission bits. @ chmod($target, $dir_perms); return true; } else { if ( is_dir(dirname($target)) ) return false; } // If the above failed, attempt to create the parent node, then try again. if (wp_mkdir_p(dirname($target))) return wp_mkdir_p($target); return false; } // Returns an array containing the current upload directory's path and url, or an error message. function wp_upload_dir() { $siteurl = get_option('siteurl'); //prepend ABSPATH to $dir and $siteurl to $url if they're not already there $path = str_replace(ABSPATH, '', trim(get_option('upload_path'))); $dir = ABSPATH . $path; $url = trailingslashit($siteurl) . $path; if ( $dir == ABSPATH ) { //the option was empty $dir = ABSPATH . 'wp-content/uploads'; } if ( defined('UPLOADS') ) { $dir = ABSPATH . UPLOADS; $url = trailingslashit($siteurl) . UPLOADS; } if ( get_option('uploads_use_yearmonth_folders')) { // Generate the yearly and monthly dirs $time = current_time( 'mysql' ); $y = substr( $time, 0, 4 ); $m = substr( $time, 5, 2 ); $dir = $dir . "/$y/$m"; $url = $url . "/$y/$m"; } // Make sure we have an uploads dir if ( ! wp_mkdir_p( $dir ) ) { $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), $dir); return array('error' => $message); } $uploads = array('path' => $dir, 'url' => $url, 'error' => false); return apply_filters('upload_dir', $uploads); } function wp_upload_bits($name, $type, $bits) { if ( empty($name) ) return array('error' => __("Empty filename")); $wp_filetype = wp_check_filetype($name); if ( !$wp_filetype['ext'] ) return array('error' => __("Invalid file type")); $upload = wp_upload_dir(); if ( $upload['error'] != false ) return $upload; $number = ''; $filename = $name; $path_parts = pathinfo($filename); $ext = $path_parts['extension']; if ( empty($ext) ) $ext = ''; else $ext = ".$ext"; while ( file_exists($upload['path'] . "/$filename") ) { if ( '' == "$number$ext" ) $filename = $filename . ++$number . $ext; else $filename = str_replace("$number$ext", ++$number . $ext, $filename); } $new_file = $upload['path'] . "/$filename"; if ( ! wp_mkdir_p( dirname($new_file) ) ) { $message = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?'), dirname($new_file)); return array('error' => $message); } $ifp = @ fopen($new_file, 'wb'); if ( ! $ifp ) return array('error' => sprintf(__('Could not write file %s'), $new_file)); $success = @ fwrite($ifp, $bits); fclose($ifp); // Set correct file permissions $stat = @ stat(dirname($new_file)); $perms = $stat['mode'] & 0007777; $perms = $perms & 0000666; @ chmod($new_file, $perms); // Compute the URL $url = $upload['url'] . "/$filename"; return array('file' => $new_file, 'url' => $url, 'error' => false); } function wp_check_filetype($filename, $mimes = null) { // Accepted MIME types are set here as PCRE unless provided. $mimes = is_array($mimes) ? $mimes : apply_filters('upload_mimes', array ( 'jpg|jpeg|jpe' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', 'bmp' => 'image/bmp', 'tif|tiff' => 'image/tiff', 'ico' => 'image/x-icon', 'asf|asx|wax|wmv|wmx' => 'video/asf', 'avi' => 'video/avi', 'mov|qt' => 'video/quicktime', 'mpeg|mpg|mpe' => 'video/mpeg', 'txt|c|cc|h' => 'text/plain', 'rtx' => 'text/richtext', 'css' => 'text/css', 'htm|html' => 'text/html', 'mp3|mp4' => 'audio/mpeg', 'ra|ram' => 'audio/x-realaudio', 'wav' => 'audio/wav', 'ogg' => 'audio/ogg', 'mid|midi' => 'audio/midi', 'wma' => 'audio/wma', 'rtf' => 'application/rtf', 'js' => 'application/javascript', 'pdf' => 'application/pdf', 'doc' => 'application/msword', 'pot|pps|ppt' => 'application/vnd.ms-powerpoint', 'wri' => 'application/vnd.ms-write', 'xla|xls|xlt|xlw' => 'application/vnd.ms-excel', 'mdb' => 'application/vnd.ms-access', 'mpp' => 'application/vnd.ms-project', 'swf' => 'application/x-shockwave-flash', 'class' => 'application/java', 'tar' => 'application/x-tar', 'zip' => 'application/zip', 'gz|gzip' => 'application/x-gzip', 'exe' => 'application/x-msdownload' )); $type = false; $ext = false; foreach ($mimes as $ext_preg => $mime_match) { $ext_preg = '!\.(' . $ext_preg . ')$!i'; if ( preg_match($ext_preg, $filename, $ext_matches) ) { $type = $mime_match; $ext = $ext_matches[1]; break; } } return compact('ext', 'type'); } function wp_explain_nonce($action) { if ( $action != -1 && preg_match('/([a-z]+)-([a-z]+)(_(.+))?/', $action, $matches) ) { $verb = $matches[1]; $noun = $matches[2]; $trans = array(); $trans['update']['attachment'] = array(__('Are you sure you want to edit this attachment: "%s"?'), 'get_the_title'); $trans['add']['category'] = array(__('Are you sure you want to add this category?'), false); $trans['delete']['category'] = array(__('Are you sure you want to delete this category: "%s"?'), 'get_catname'); $trans['update']['category'] = array(__('Are you sure you want to edit this category: "%s"?'), 'get_catname'); $trans['delete']['comment'] = array(__('Are you sure you want to delete this comment: "%s"?'), 'use_id'); $trans['unapprove']['comment'] = array(__('Are you sure you want to unapprove this comment: "%s"?'), 'use_id'); $trans['approve']['comment'] = array(__('Are you sure you want to approve this comment: "%s"?'), 'use_id'); $trans['update']['comment'] = array(__('Are you sure you want to edit this comment: "%s"?'), 'use_id'); $trans['bulk']['comments'] = array(__('Are you sure you want to bulk modify comments?'), false); $trans['moderate']['comments'] = array(__('Are you sure you want to moderate comments?'), false); $trans['add']['bookmark'] = array(__('Are you sure you want to add this link?'), false); $trans['delete']['bookmark'] = array(__('Are you sure you want to delete this link: "%s"?'), 'use_id'); $trans['update']['bookmark'] = array(__('Are you sure you want to edit this link: "%s"?'), 'use_id'); $trans['bulk']['bookmarks'] = array(__('Are you sure you want to bulk modify links?'), false); $trans['add']['page'] = array(__('Are you sure you want to add this page?'), false); $trans['delete']['page'] = array(__('Are you sure you want to delete this page: "%s"?'), 'get_the_title'); $trans['update']['page'] = array(__('Are you sure you want to edit this page: "%s"?'), 'get_the_title'); $trans['edit']['plugin'] = array(__('Are you sure you want to edit this plugin file: "%s"?'), 'use_id'); $trans['activate']['plugin'] = array(__('Are you sure you want to activate this plugin: "%s"?'), 'use_id'); $trans['deactivate']['plugin'] = array(__('Are you sure you want to deactivate this plugin: "%s"?'), 'use_id'); $trans['add']['post'] = array(__('Are you sure you want to add this post?'), false); $trans['delete']['post'] = array(__('Are you sure you want to delete this post: "%s"?'), 'get_the_title'); $trans['update']['post'] = array(__('Are you sure you want to edit this post: "%s"?'), 'get_the_title'); $trans['add']['user'] = array(__('Are you sure you want to add this user?'), false); $trans['delete']['users'] = array(__('Are you sure you want to delete users?'), false); $trans['bulk']['users'] = array(__('Are you sure you want to bulk modify users?'), false); $trans['update']['user'] = array(__('Are you sure you want to edit this user: "%s"?'), 'get_author_name'); $trans['update']['profile'] = array(__('Are you sure you want to modify the profile for: "%s"?'), 'get_author_name'); $trans['update']['options'] = array(__('Are you sure you want to edit your settings?'), false); $trans['update']['permalink'] = array(__('Are you sure you want to change your permalink structure to: %s?'), 'use_id'); $trans['edit']['file'] = array(__('Are you sure you want to edit this file: "%s"?'), 'use_id'); $trans['edit']['theme'] = array(__('Are you sure you want to edit this theme file: "%s"?'), 'use_id'); $trans['switch']['theme'] = array(__('Are you sure you want to switch to this theme: "%s"?'), 'use_id'); if ( isset($trans[$verb][$noun]) ) { if ( !empty($trans[$verb][$noun][1]) ) { $lookup = $trans[$verb][$noun][1]; $object = $matches[4]; if ( 'use_id' != $lookup ) $object = call_user_func($lookup, $object); return sprintf($trans[$verb][$noun][0], $object); } else { return $trans[$verb][$noun][0]; } } } return apply_filters( 'explain_nonce_' . $verb . '-' . $noun, __('Are you sure you want to do this?'), $matches[4] ); } function wp_nonce_ays($action) { global $pagenow, $menu, $submenu, $parent_file, $submenu_file; $adminurl = get_option('siteurl') . '/wp-admin'; if ( wp_get_referer() ) $adminurl = clean_url(wp_get_referer()); $title = __('WordPress Confirmation'); // Remove extra layer of slashes. $_POST = stripslashes_deep($_POST ); if ( $_POST ) { $q = http_build_query($_POST); $q = explode( ini_get('arg_separator.output'), $q); $html .= "\t<form method='post' action='" . attribute_escape($pagenow) . "'>\n"; foreach ( (array) $q as $a ) { $v = substr(strstr($a, '='), 1); $k = substr($a, 0, -(strlen($v)+1)); $html .= "\t\t<input type='hidden' name='" . attribute_escape(urldecode($k)) . "' value='" . attribute_escape(urldecode($v)) . "' />\n"; } $html .= "\t\t<input type='hidden' name='_wpnonce' value='" . wp_create_nonce($action) . "' />\n"; $html .= "\t\t<div id='message' class='confirm fade'>\n\t\t<p>" . wp_specialchars(wp_explain_nonce($action)) . "</p>\n\t\t<p><a href='$adminurl'>" . __('No') . "</a> <input type='submit' value='" . __('Yes') . "' /></p>\n\t\t</div>\n\t</form>\n"; } else { $html .= "\t<div id='message' class='confirm fade'>\n\t<p>" . wp_specialchars(wp_explain_nonce($action)) . "</p>\n\t<p><a href='$adminurl'>" . __('No') . "</a> <a href='" . clean_url(add_query_arg( '_wpnonce', wp_create_nonce($action), $_SERVER['REQUEST_URI'] )) . "'>" . __('Yes') . "</a></p>\n\t</div>\n"; } $html .= "</body>\n</html>"; wp_die($html, $title); } function wp_die( $message, $title = '' ) { global $wp_locale; if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { if ( empty($title) ) { $error_data = $message->get_error_data(); if ( is_array($error_data) && isset($error_data['title']) ) $title = $error_data['title']; } $errors = $message->get_error_messages(); switch ( count($errors) ) : case 0 : $message = ''; break; case 1 : $message = "<p>{$errors[0]}</p>"; break; default : $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>"; break; endswitch; } elseif ( is_string($message) ) { $message = "<p>$message</p>"; } if (strpos($_SERVER['PHP_SELF'], 'wp-admin') != false) $admin_dir = ''; else $admin_dir = 'wp-admin/'; if ( !did_action('admin_head') ) : header('Content-Type: text/html; charset=utf-8'); if ( empty($title) ) $title = __('WordPress › Error'); ?> <!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" <?php if ( function_exists('language_attributes') ) language_attributes(); ?>> <head> <title><?php echo $title ?> text_direction) ) : ?>

    WordPress

    text_direction) { echo 'directionality : "rtl" ,'; echo 'theme_advanced_toolbar_align : "right" ,'; } } function _mce_load_rtl_plugin($input) { global $wp_locale; if ('rtl' == $wp_locale->text_direction) $input[] = 'directionality'; return $input; } function _mce_add_direction_buttons($input) { global $wp_locale; if ('rtl' == $wp_locale->text_direction) { $new_buttons = array('separator', 'ltr', 'rtl'); $input = array_merge($input, $new_buttons); } return $input; } function smilies_init() { global $wpsmiliestrans, $wp_smiliessearch, $wp_smiliesreplace; // don't bother setting up smilies if they are disabled if ( !get_option('use_smilies') ) return; if (!isset($wpsmiliestrans)) { $wpsmiliestrans = array( ':mrgreen:' => 'icon_mrgreen.gif', ':neutral:' => 'icon_neutral.gif', ':twisted:' => 'icon_twisted.gif', ':arrow:' => 'icon_arrow.gif', ':shock:' => 'icon_eek.gif', ':smile:' => 'icon_smile.gif', ':???:' => 'icon_confused.gif', ':cool:' => 'icon_cool.gif', ':evil:' => 'icon_evil.gif', ':grin:' => 'icon_biggrin.gif', ':idea:' => 'icon_idea.gif', ':oops:' => 'icon_redface.gif', ':razz:' => 'icon_razz.gif', ':roll:' => 'icon_rolleyes.gif', ':wink:' => 'icon_wink.gif', ':cry:' => 'icon_cry.gif', ':eek:' => 'icon_surprised.gif', ':lol:' => 'icon_lol.gif', ':mad:' => 'icon_mad.gif', ':sad:' => 'icon_sad.gif', '8-)' => 'icon_cool.gif', '8-O' => 'icon_eek.gif', ':-(' => 'icon_sad.gif', ':-)' => 'icon_smile.gif', ':-?' => 'icon_confused.gif', ':-D' => 'icon_biggrin.gif', ':-P' => 'icon_razz.gif', ':-o' => 'icon_surprised.gif', ':-x' => 'icon_mad.gif', ':-|' => 'icon_neutral.gif', ';-)' => 'icon_wink.gif', '8)' => 'icon_cool.gif', '8O' => 'icon_eek.gif', ':(' => 'icon_sad.gif', ':)' => 'icon_smile.gif', ':?' => 'icon_confused.gif', ':D' => 'icon_biggrin.gif', ':P' => 'icon_razz.gif', ':o' => 'icon_surprised.gif', ':x' => 'icon_mad.gif', ':|' => 'icon_neutral.gif', ';)' => 'icon_wink.gif', ':!:' => 'icon_exclaim.gif', ':?:' => 'icon_question.gif', ); } $siteurl = get_option('siteurl'); foreach ( (array) $wpsmiliestrans as $smiley => $img ) { $wp_smiliessearch[] = '/(\s|^)'.preg_quote($smiley, '/').'(\s|$)/'; $smiley_masked = htmlspecialchars(trim($smiley), ENT_QUOTES); $wp_smiliesreplace[] = " $smiley_masked "; } } function wp_parse_args( $args, $defaults = '' ) { if ( is_array( $args ) ) $r =& $args; else wp_parse_str( $args, $r ); if ( is_array( $defaults ) ) return array_merge( $defaults, $r ); else return $r; } function wp_maybe_load_widgets() { if ( !function_exists( 'dynamic_sidebar' ) ) { require_once ABSPATH . WPINC . '/widgets.php'; add_action( '_admin_menu', 'wp_widgets_add_menu' ); } } function wp_widgets_add_menu() { global $submenu; $submenu['themes.php'][7] = array( __( 'Widgets' ), 'switch_themes', 'widgets.php' ); ksort($submenu['themes.php'], SORT_NUMERIC); } // For PHP 5.2, make sure all output buffers are flushed // before our singletons our destroyed. function wp_ob_end_flush_all() { while ( @ob_end_flush() ); } ?> Bwordpress/wp-includes/.svn/text-base/general-template.php.svn-base' . __('Login') . ''; else $link = '' . __('Logout') . ''; echo apply_filters('loginout', $link); } function wp_register( $before = '
  • ', $after = '
  • ' ) { if ( ! is_user_logged_in() ) { if ( get_option('users_can_register') ) $link = $before . '' . __('Register') . '' . $after; else $link = ''; } else { $link = $before . '' . __('Site Admin') . '' . $after; } echo apply_filters('register', $link); } function wp_meta() { do_action('wp_meta'); } function bloginfo($show='') { $info = get_bloginfo($show); // Don't filter URL's. if (strpos($show, 'url') == false && strpos($show, 'directory') == false && strpos($show, 'home') == false) { $info = apply_filters('bloginfo', $info, $show); $info = convert_chars($info); } else { $info = apply_filters('bloginfo_url', $info, $show); } echo $info; } /** * Note: some of these values are DEPRECATED. Meaning they could be * taken out at any time and shouldn't be relied upon. Options * without "// DEPRECATED" are the preferred and recommended ways * to get the information. */ function get_bloginfo($show='') { switch($show) { case 'url' : case 'home' : // DEPRECATED case 'siteurl' : // DEPRECATED $output = get_option('home'); break; case 'wpurl' : $output = get_option('siteurl'); break; case 'description': $output = get_option('blogdescription'); break; case 'rdf_url': $output = get_feed_link('rdf'); break; case 'rss_url': $output = get_feed_link('rss'); break; case 'rss2_url': $output = get_feed_link('rss2'); break; case 'atom_url': $output = get_feed_link('atom'); break; case 'comments_atom_url': $output = get_feed_link('comments_atom'); break; case 'comments_rss2_url': $output = get_feed_link('comments_rss2'); break; case 'pingback_url': $output = get_option('siteurl') .'/xmlrpc.php'; break; case 'stylesheet_url': $output = get_stylesheet_uri(); break; case 'stylesheet_directory': $output = get_stylesheet_directory_uri(); break; case 'template_directory': case 'template_url': $output = get_template_directory_uri(); break; case 'admin_email': $output = get_option('admin_email'); break; case 'charset': $output = get_option('blog_charset'); if ('' == $output) $output = 'UTF-8'; break; case 'html_type' : $output = get_option('html_type'); break; case 'version': global $wp_version; $output = $wp_version; break; case 'language': $output = get_locale(); $output = str_replace('_', '-', $output); break; case 'text_direction': global $wp_locale; $output = $wp_locale->text_direction; break; case 'name': default: $output = get_option('blogname'); break; } return $output; } function wp_title($sep = '»', $display = true) { global $wpdb, $wp_locale, $wp_query; $cat = get_query_var('cat'); $p = get_query_var('p'); $name = get_query_var('name'); $category_name = get_query_var('category_name'); $author = get_query_var('author'); $author_name = get_query_var('author_name'); $m = get_query_var('m'); $year = get_query_var('year'); $monthnum = get_query_var('monthnum'); $day = get_query_var('day'); $title = ''; // If there's a category if ( !empty($cat) ) { // category exclusion if ( !stristr($cat,'-') ) $title = apply_filters('single_cat_title', get_the_category_by_ID($cat)); } elseif ( !empty($category_name) ) { if ( stristr($category_name,'/') ) { $category_name = explode('/',$category_name); if ( $category_name[count($category_name)-1] ) $category_name = $category_name[count($category_name)-1]; // no trailing slash else $category_name = $category_name[count($category_name)-2]; // there was a trailling slash } $title = $wpdb->get_var("SELECT cat_name FROM $wpdb->categories WHERE category_nicename = '$category_name'"); $title = apply_filters('single_cat_title', $title); } // If there's an author if ( !empty($author) ) { $title = get_userdata($author); $title = $title->display_name; } if ( !empty($author_name) ) { // We do a direct query here because we don't cache by nicename. $title = $wpdb->get_var("SELECT display_name FROM $wpdb->users WHERE user_nicename = '$author_name'"); } // If there's a month if ( !empty($m) ) { $my_year = substr($m, 0, 4); $my_month = $wp_locale->get_month(substr($m, 4, 2)); $my_day = intval(substr($m, 6, 2)); $title = "$my_year" . ($my_month ? "$sep $my_month" : "") . ($my_day ? "$sep $my_day" : ""); } if ( !empty($year) ) { $title = $year; if ( !empty($monthnum) ) $title .= " $sep " . $wp_locale->get_month($monthnum); if ( !empty($day) ) $title .= " $sep " . zeroise($day, 2); } // If there is a post if ( is_single() || is_page() ) { $post = $wp_query->get_queried_object(); $title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ); } $prefix = ''; if ( !empty($title) ) $prefix = " $sep "; $title = $prefix . $title; $title = apply_filters('wp_title', $title, $sep); // Send it out if ( $display ) echo $title; else return $title; } function single_post_title($prefix = '', $display = true) { global $wpdb; $p = get_query_var('p'); $name = get_query_var('name'); if ( intval($p) || '' != $name ) { if ( !$p ) $p = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$name'"); $post = & get_post($p); $title = $post->post_title; $title = apply_filters('single_post_title', $title); if ( $display ) echo $prefix.strip_tags($title); else return strip_tags($title); } } function single_cat_title($prefix = '', $display = true ) { $cat = intval( get_query_var('cat') ); if ( !empty($cat) && !(strtoupper($cat) == 'ALL') ) { $my_cat_name = apply_filters('single_cat_title', get_the_category_by_ID($cat)); if ( !empty($my_cat_name) ) { if ( $display ) echo $prefix.strip_tags($my_cat_name); else return strip_tags($my_cat_name); } } } function single_month_title($prefix = '', $display = true ) { global $wp_locale; $m = get_query_var('m'); $year = get_query_var('year'); $monthnum = get_query_var('monthnum'); if ( !empty($monthnum) && !empty($year) ) { $my_year = $year; $my_month = $wp_locale->get_month($monthnum); } elseif ( !empty($m) ) { $my_year = substr($m, 0, 4); $my_month = $wp_locale->get_month(substr($m, 4, 2)); } if ( empty($my_month) ) return false; $result = $prefix . $my_month . $prefix . $my_year; if ( !$display ) return $result; echo $result; } /* link navigation hack by Orien http://icecode.com/ */ function get_archives_link($url, $text, $format = 'html', $before = '', $after = '') { $text = wptexturize($text); $title_text = attribute_escape($text); $url = clean_url($url); if ('link' == $format) return "\t\n"; elseif ('option' == $format) return "\t\n"; elseif ('html' == $format) return "\t
  • $before$text$after
  • \n"; else // custom return "\t$before$text$after\n"; } function wp_get_archives($args = '') { global $wp_locale, $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('type' => 'monthly', 'limit' => '', 'format' => 'html', 'before' => '', 'after' => '', 'show_post_count' => false); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); if ( '' == $type ) $type = 'monthly'; // if ( '' != $limit ) { // $limit = (int) $limit; // $limit = ' LIMIT '.$limit; // } // this is what will separate dates on weekly archive links $archive_week_separator = '–'; // over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride $archive_date_format_over_ride = 0; // options for daily archive (only if you over-ride the general date format) $archive_day_date_format = 'Y/m/d'; // options for weekly archive (only if you over-ride the general date format) $archive_week_start_date_format = 'Y/m/d'; $archive_week_end_date_format = 'Y/m/d'; if ( !$archive_date_format_over_ride ) { $archive_day_date_format = get_option('date_format'); $archive_week_start_date_format = get_option('date_format'); $archive_week_end_date_format = get_option('date_format'); } $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); //filters $where = apply_filters('getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r ); $join = apply_filters('getarchives_join', "", $r); if ( 'monthly' == $type ) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, count(post_date) as posts FROM $wpdb->posts $join $where GROUP BY post_date ORDER BY post_date DESC"); // . $limit if ( $arcresults ) { $afterafter = $after; foreach ( $arcresults as $arcresult ) { $url = get_month_link($arcresult->year, $arcresult->month); $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year); if ( $show_post_count ) $after = ' ('.$arcresult->posts.')' . $afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } elseif ('yearly' == $type) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, count(post_date) as posts FROM $wpdb->posts $join $where GROUP BY post_date ORDER BY post_date DESC" ); // . $limit if ($arcresults) { $afterafter = $after; foreach ($arcresults as $arcresult) { $url = get_year_link($arcresult->year); $text = sprintf('%d', $arcresult->year); if ($show_post_count) $after = ' ('.$arcresult->posts.')' . $afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } elseif ( 'daily' == $type ) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, DAYOFMONTH(post_date) AS dayofmonth, count(post_date) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date DESC"); // . $limit if ( $arcresults ) { $afterafter = $after; foreach ( $arcresults as $arcresult ) { $url = get_day_link($arcresult->year, $arcresult->month, $arcresult->dayofmonth); $date = sprintf('%1$d-%2$02d-%3$02d 00:00:00', $arcresult->year, $arcresult->month, $arcresult->dayofmonth); $text = mysql2date($archive_day_date_format, $date); if ($show_post_count) $after = ' ('.$arcresult->posts.')'.$afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } elseif ( 'weekly' == $type ) { $start_of_week = get_option('start_of_week'); $arcresults = $wpdb->get_results("SELECT DISTINCT WEEK(post_date, $start_of_week) AS week, YEAR(post_date) AS yr, DATE_FORMAT(post_date, '%Y-%m-%d') AS yyyymmdd, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY WEEK(post_date, $start_of_week), YEAR(post_date) ORDER BY post_date DESC"); // .$limit $arc_w_last = ''; $afterafter = $after; if ( $arcresults ) { foreach ( $arcresults as $arcresult ) { if ( $arcresult->week != $arc_w_last ) { $arc_year = $arcresult->yr; $arc_w_last = $arcresult->week; $arc_week = get_weekstartend($arcresult->yyyymmdd, get_option('start_of_week')); $arc_week_start = date_i18n($archive_week_start_date_format, $arc_week['start']); $arc_week_end = date_i18n($archive_week_end_date_format, $arc_week['end']); $url = sprintf('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', get_option('home'), '', '?', '=', $arc_year, '&', '=', $arcresult->week); $text = $arc_week_start . $archive_week_separator . $arc_week_end; if ($show_post_count) $after = ' ('.$arcresult->posts.')'.$afterafter; echo get_archives_link($url, $text, $format, $before, $after); } } } } elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) { ('alpha' == $type) ? $orderby = "post_title ASC " : $orderby = "post_date DESC "; $arcresults = $wpdb->get_results("SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby"); // $limit if ( $arcresults ) { foreach ( $arcresults as $arcresult ) { if ( $arcresult->post_date != '1900-01-01 00:00:00' ) { $url = get_permalink($arcresult); $arc_title = $arcresult->post_title; if ( $arc_title ) $text = strip_tags(apply_filters('the_title', $arc_title)); else $text = $arcresult->ID; echo get_archives_link($url, $text, $format, $before, $after); } } } } } // Used in get_calendar function calendar_week_mod($num) { $base = 7; return ($num - $base*floor($num/$base)); } function get_calendar($initial = true) { global $wpdb, $m, $monthnum, $year, $timedifference, $wp_locale, $posts; $key = md5( $m . $monthnum . $year ); if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) { if ( isset( $cache[ $key ] ) ) { echo $cache[ $key ]; return; } } ob_start(); // Quick check. If we have no posts at all, abort! if ( !$posts ) { $gotsome = $wpdb->get_var("SELECT ID from $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC"); // LIMIT 1 if ( !$gotsome ) return; } if ( isset($_GET['w']) ) $w = ''.intval($_GET['w']); // week_begins = 0 stands for Sunday $week_begins = intval(get_option('start_of_week')); $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); // Let's figure out when we are if ( !empty($monthnum) && !empty($year) ) { $thismonth = ''.zeroise(intval($monthnum), 2); $thisyear = ''.intval($year); } elseif ( !empty($w) ) { // We need to get the month from MySQL $thisyear = ''.intval(substr($m, 0, 4)); $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's $thismonth = $wpdb->get_var("SELECT month(dateadd('day', " . $d . ", stringdate('" . $thisyear . ".01.01') ) )"); } elseif ( !empty($m) ) { $calendar = substr($m, 0, 6); $thisyear = ''.intval(substr($m, 0, 4)); if ( strlen($m) < 6 ) $thismonth = '01'; else $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2); } else { $thisyear = gmdate('Y', current_time('timestamp')); $thismonth = gmdate('m', current_time('timestamp')); } $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); // Get the next and previous month and year with at least one post $previous = $wpdb->get_row("SELECT DISTINCT MONTH(stringdate(post_date)) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date < stringdate('$thisyear-$thismonth-01') AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC"); //LIMIT 1 $next = $wpdb->get_row("SELECT DISTINCT MONTH(stringdate(post_date)) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date > stringdate('$thisyear-$thismonth-01') AND MONTH(stringdate( post_date) ) <> MONTH( stringdate( '$thisyear-$thismonth-01' ) ) AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date ASC"); //LIMIT 1 echo ''; $myweek = array(); for ( $wdcount=0; $wdcount<=6; $wdcount++ ) { $myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7); } foreach ( $myweek as $wd ) { $day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd); echo "\n\t\t"; } echo ' '; if ( $previous ) { echo "\n\t\t".''; } else { echo "\n\t\t".''; } echo "\n\t\t".''; if ( $next ) { echo "\n\t\t".''; } else { echo "\n\t\t".''; } echo ' '; // Get days with posts $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date) FROM $wpdb->posts WHERE MONTH(post_date) = $thismonth AND YEAR(post_date) = $thisyear AND post_type = 'post' AND post_status = 'publish' AND post_date < ('" . current_time('mysql') . "')", ARRAY_N); if ( $dayswithposts ) { foreach ( $dayswithposts as $daywith ) { $daywithpost[] = $daywith[0]; } } else { $daywithpost = array(); } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') != false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') != false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') != false) $ak_title_separator = "\n"; else $ak_title_separator = ', '; $ak_titles_for_day = array(); $ak_post_titles = $wpdb->get_results("SELECT post_title, DAYOFMONTH(post_date) as dom " ."FROM $wpdb->posts " ."WHERE YEAR(post_date) = $thisyear " ."AND MONTH(post_date) = $thismonth " ."AND post_date < ('".current_time('mysql')."') " ."AND post_type = 'post' AND post_status = 'publish'" ); if ( $ak_post_titles ) { foreach ( $ak_post_titles as $ak_post_title ) { $post_title = apply_filters( "the_title", $ak_post_title->post_title ); $post_title = str_replace('"', '"', wptexturize( $post_title )); if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) ) $ak_titles_for_day['day_'.$ak_post_title->dom] = ''; if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one $ak_titles_for_day["$ak_post_title->dom"] = $post_title; else $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title; } } // See how much we should pad in the beginning $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins); if ( 0 != $pad ) echo "\n\t\t".''; $daysinmonth = intval(date('t', $unixmonth)); for ( $day = 1; $day <= $daysinmonth; ++$day ) { if ( isset($newrow) && $newrow ) echo "\n\t\n\t\n\t\t"; $newrow = false; if ( $day == gmdate('j', (time() + (get_option('gmt_offset') * 3600))) && $thismonth == gmdate('m', time()+(get_option('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time()+(get_option('gmt_offset') * 3600)) ) echo ''; if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) ) $newrow = true; } $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins); if ( $pad != 0 && $pad != 7 ) echo "\n\t\t".''; echo "\n\t\n\t\n\t
    ' . $wp_locale->get_month($thismonth) . ' ' . date('Y', $unixmonth) . '
    $day_name
    « ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '  ' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' » 
     
    '; else echo ''; if ( in_array($day, $daywithpost) ) // any posts today? echo '$day"; else echo $day; echo ' 
    "; $output = ob_get_contents(); ob_end_clean(); echo $output; $cache[ $key ] = $output; wp_cache_add( 'get_calendar', $cache, 'calendar' ); } function delete_get_calendar_cache() { wp_cache_delete( 'get_calendar', 'calendar' ); } add_action( 'save_post', 'delete_get_calendar_cache' ); add_action( 'delete_post', 'delete_get_calendar_cache' ); add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); add_action( 'update_option_gmt_offset', 'delete_get_calendar_cache' ); add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); function allowed_tags() { global $allowedtags; $allowed = ''; foreach ( $allowedtags as $tag => $attributes ) { $allowed .= '<'.$tag; if ( 0 < count($attributes) ) { foreach ( $attributes as $attribute => $limits ) { $allowed .= ' '.$attribute.'=""'; } } $allowed .= '> '; } return htmlentities($allowed); } /***** Date/Time tags *****/ function the_date_xml() { global $post; echo mysql2date('Y-m-d', $post->post_date); //echo ""+$post->post_date; } function the_date($d='', $before='', $after='', $echo = true) { global $id, $post, $day, $previousday, $newday; $the_date = ''; if ( $day != $previousday ) { $the_date .= $before; if ( $d=='' ) $the_date .= mysql2date(get_option('date_format'), $post->post_date); else $the_date .= mysql2date($d, $post->post_date); $the_date .= $after; $previousday = $day; } $the_date = apply_filters('the_date', $the_date, $d, $before, $after); if ( $echo ) echo $the_date; else return $the_date; } function the_modified_date($d = '') { echo apply_filters('the_modified_date', get_the_modified_date($d), $d); } function get_the_modified_date($d = '') { if ( '' == $d ) $the_time = get_post_modified_time(get_option('date_format')); else $the_time = get_post_modified_time($d); return apply_filters('get_the_modified_date', $the_time, $d); } function the_time( $d = '' ) { echo apply_filters('the_time', get_the_time( $d ), $d); } function get_the_time( $d = '' ) { if ( '' == $d ) $the_time = get_post_time(get_option('time_format')); else $the_time = get_post_time($d); return apply_filters('get_the_time', $the_time, $d); } function get_post_time( $d = 'U', $gmt = false ) { // returns timestamp global $post; if ( $gmt ) $time = $post->post_date_gmt; else $time = $post->post_date; $time = mysql2date($d, $time); return apply_filters('get_the_time', $time, $d, $gmt); } function the_modified_time($d = '') { echo apply_filters('the_modified_time', get_the_modified_time($d), $d); } function get_the_modified_time($d = '') { if ( '' == $d ) $the_time = get_post_modified_time(get_option('time_format')); else $the_time = get_post_modified_time($d); return apply_filters('get_the_modified_time', $the_time, $d); } function get_post_modified_time( $d = 'U', $gmt = false ) { // returns timestamp global $post; if ( $gmt ) $time = $post->post_modified_gmt; else $time = $post->post_modified; $time = mysql2date($d, $time); return apply_filters('get_the_modified_time', $time, $d, $gmt); } function the_weekday() { global $wp_locale, $id, $post; $the_weekday = $wp_locale->get_weekday(mysql2date('w', $post->post_date)); $the_weekday = apply_filters('the_weekday', $the_weekday); echo $the_weekday; } function the_weekday_date($before='',$after='') { global $wp_locale, $id, $post, $day, $previousweekday; $the_weekday_date = ''; if ( $day != $previousweekday ) { $the_weekday_date .= $before; $the_weekday_date .= $wp_locale->get_weekday(mysql2date('w', $post->post_date)); $the_weekday_date .= $after; $previousweekday = $day; } $the_weekday_date = apply_filters('the_weekday_date', $the_weekday_date, $before, $after); echo $the_weekday_date; } function wp_head() { do_action('wp_head'); } function wp_footer() { do_action('wp_footer'); } function rsd_link() { echo ' \n"; } function noindex() { // If the blog is not public, tell robots to go away. if ( '0' == get_option('blog_public') ) echo "\n"; } function rich_edit_exists() { global $wp_rich_edit_exists; if ( !isset($wp_rich_edit_exists) ) $wp_rich_edit_exists = file_exists(ABSPATH . WPINC . '/js/tinymce/tiny_mce.js'); return $wp_rich_edit_exists; } function user_can_richedit() { global $wp_rich_edit, $pagenow; if ( !isset( $wp_rich_edit) ) { if ( get_user_option( 'rich_editing' ) == 'true' && ( ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval($match[1]) >= 420 ) || !preg_match( '!opera[ /][2-8]|konqueror|safari!i', $_SERVER['HTTP_USER_AGENT'] ) ) && 'comment.php' != $pagenow ) { $wp_rich_edit = true; } else { $wp_rich_edit = false; } } return apply_filters('user_can_richedit', $wp_rich_edit); } function the_editor($content, $id = 'content', $prev_id = 'title') { $rows = get_option('default_post_edit_rows'); if (($rows < 3) || ($rows > 100)) $rows = 12; $rows = "rows='$rows'"; if ( user_can_richedit() ) : add_filter('the_editor_content', 'wp_richedit_pre'); // The following line moves the border so that the active button "attaches" to the toolbar. Only IE needs it. ?>
    \n"); $the_editor_content = apply_filters('the_editor_content', $content); printf($the_editor, $the_editor_content); ?> '%_%', // http://example.com/all_posts.php%_% : %_% is replaced by format (below) 'format' => '?page=%#%', // ?page=%#% : %#% is replaced by the page number 'total' => 1, 'current' => 0, 'show_all' => false, 'prev_next' => true, 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'end_size' => 1, // How many numbers on either end including the end 'mid_size' => 2, // How many numbers to either side of current not including current 'type' => 'plain', 'add_args' => false // array of query args to aadd ); $args = wp_parse_args( $args, $defaults ); extract($args, EXTR_SKIP); // Who knows what else people pass in $args $total = (int) $total; if ( $total < 2 ) return; $current = (int) $current; $end_size = 0 < (int) $end_size ? (int) $end_size : 1; // Out of bounds? Make it the default. $mid_size = 0 <= (int) $mid_size ? (int) $mid_size : 2; $add_args = is_array($add_args) ? $add_args : false; $r = ''; $page_links = array(); $n = 0; $dots = false; if ( $prev_next && $current && 1 < $current ) : $link = str_replace('%_%', 2 == $current ? '' : $format, $base); $link = str_replace('%#%', $current - 1, $link); if ( $add_args ) $link = add_query_arg( $add_args, $link ); $page_links[] = ""; endif; for ( $n = 1; $n <= $total; $n++ ) : if ( $n == $current ) : $page_links[] = "$n"; $dots = true; else : if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : $link = str_replace('%_%', 1 == $n ? '' : $format, $base); $link = str_replace('%#%', $n, $link); if ( $add_args ) $link = add_query_arg( $add_args, $link ); $page_links[] = "$n"; $dots = true; elseif ( $dots && !$show_all ) : $page_links[] = "..."; $dots = false; endif; endif; endfor; if ( $prev_next && $current && ( $current < $total || -1 == $total ) ) : $link = str_replace('%_%', $format, $base); $link = str_replace('%#%', $current + 1, $link); if ( $add_args ) $link = add_query_arg( $add_args, $link ); $page_links[] = ""; endif; switch ( $type ) : case 'array' : return $page_links; break; case 'list' : $r .= "
      \n\t
    • "; $r .= join("
    • \n\t
    • ", $page_links); $r .= "
    • \n
    \n"; break; default : $r = join("\n", $page_links); break; endswitch; return $r; } ?> 9wordpress/wp-includes/.svn/text-base/gettext.php.svn-base,. Copyright (c) 2005 Nico Kaiser This file is part of PHP-gettext. PHP-gettext 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. PHP-gettext 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 PHP-gettext; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * Provides a simple gettext replacement that works independently from * the system's gettext abilities. * It can read MO files and use them for translating strings. * The files are passed to gettext_reader as a Stream (see streams.php) * * This version has the ability to cache all strings and translations to * speed up the string lookup. * While the cache is enabled by default, it can be switched off with the * second parameter in the constructor (e.g. whenusing very large MO files * that you don't want to keep in memory) */ class gettext_reader { //public: var $error = 0; // public variable that holds error code (0 if no error) //private: var $BYTEORDER = 0; // 0: low endian, 1: big endian var $STREAM = NULL; var $short_circuit = false; var $enable_cache = false; var $originals = NULL; // offset of original table var $translations = NULL; // offset of translation table var $pluralheader = NULL; // cache header field for plural forms var $select_string_function = NULL; // cache function, which chooses plural forms var $total = 0; // total string count var $table_originals = NULL; // table for original strings (offsets) var $table_translations = NULL; // table for translated strings (offsets) var $cache_translations = NULL; // original -> translation mapping /* Methods */ /** * Reads a 32bit Integer from the Stream * * @access private * @return Integer from the Stream */ function readint() { if ($this->BYTEORDER == 0) { // low endian $low_end = unpack('V', $this->STREAM->read(4)); return array_shift($low_end); } else { // big endian $big_end = unpack('N', $this->STREAM->read(4)); return array_shift($big_end); } } /** * Reads an array of Integers from the Stream * * @param int count How many elements should be read * @return Array of Integers */ function readintarray($count) { if ($this->BYTEORDER == 0) { // low endian return unpack('V'.$count, $this->STREAM->read(4 * $count)); } else { // big endian return unpack('N'.$count, $this->STREAM->read(4 * $count)); } } /** * Constructor * * @param object Reader the StreamReader object * @param boolean enable_cache Enable or disable caching of strings (default on) */ function gettext_reader($Reader, $enable_cache = true) { // If there isn't a StreamReader, turn on short circuit mode. if (! $Reader || isset($Reader->error) ) { $this->short_circuit = true; return; } // Caching can be turned off $this->enable_cache = $enable_cache; // $MAGIC1 = (int)0x950412de; //bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565 $MAGIC1 = (int) - 1794895138; // $MAGIC2 = (int)0xde120495; //bug $MAGIC2 = (int) - 569244523; // 64-bit fix $MAGIC3 = (int) 2500072158; $this->STREAM = $Reader; $magic = $this->readint(); if ($magic == ($MAGIC1 & 0xFFFFFFFF) || $magic == ($MAGIC3 & 0xFFFFFFFF)) { // to make sure it works for 64-bit platforms $this->BYTEORDER = 0; } elseif ($magic == ($MAGIC2 & 0xFFFFFFFF)) { $this->BYTEORDER = 1; } else { $this->error = 1; // not MO file return false; } // FIXME: Do we care about revision? We should. $revision = $this->readint(); $this->total = $this->readint(); $this->originals = $this->readint(); $this->translations = $this->readint(); } /** * Loads the translation tables from the MO file into the cache * If caching is enabled, also loads all strings into a cache * to speed up translation lookups * * @access private */ function load_tables() { if (is_array($this->cache_translations) && is_array($this->table_originals) && is_array($this->table_translations)) return; /* get original and translations tables */ $this->STREAM->seekto($this->originals); $this->table_originals = $this->readintarray($this->total * 2); $this->STREAM->seekto($this->translations); $this->table_translations = $this->readintarray($this->total * 2); if ($this->enable_cache) { $this->cache_translations = array (); /* read all strings in the cache */ for ($i = 0; $i < $this->total; $i++) { $this->STREAM->seekto($this->table_originals[$i * 2 + 2]); $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]); $this->STREAM->seekto($this->table_translations[$i * 2 + 2]); $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]); $this->cache_translations[$original] = $translation; } } } /** * Returns a string from the "originals" table * * @access private * @param int num Offset number of original string * @return string Requested string if found, otherwise '' */ function get_original_string($num) { $length = $this->table_originals[$num * 2 + 1]; $offset = $this->table_originals[$num * 2 + 2]; if (! $length) return ''; $this->STREAM->seekto($offset); $data = $this->STREAM->read($length); return (string)$data; } /** * Returns a string from the "translations" table * * @access private * @param int num Offset number of original string * @return string Requested string if found, otherwise '' */ function get_translation_string($num) { $length = $this->table_translations[$num * 2 + 1]; $offset = $this->table_translations[$num * 2 + 2]; if (! $length) return ''; $this->STREAM->seekto($offset); $data = $this->STREAM->read($length); return (string)$data; } /** * Binary search for string * * @access private * @param string string * @param int start (internally used in recursive function) * @param int end (internally used in recursive function) * @return int string number (offset in originals table) */ function find_string($string, $start = -1, $end = -1) { if (($start == -1) or ($end == -1)) { // find_string is called with only one parameter, set start end end $start = 0; $end = $this->total; } if (abs($start - $end) <= 1) { // We're done, now we either found the string, or it doesn't exist $txt = $this->get_original_string($start); if ($string == $txt) return $start; else return -1; } else if ($start > $end) { // start > end -> turn around and start over return $this->find_string($string, $end, $start); } else { // Divide table in two parts $half = (int)(($start + $end) / 2); $cmp = strcmp($string, $this->get_original_string($half)); if ($cmp == 0) // string is exactly in the middle => return it return $half; else if ($cmp < 0) // The string is in the upper half return $this->find_string($string, $start, $half); else // The string is in the lower half return $this->find_string($string, $half, $end); } } /** * Translates a string * * @access public * @param string string to be translated * @return string translated string (or original, if not found) */ function translate($string) { if ($this->short_circuit) return $string; $this->load_tables(); if ($this->enable_cache) { // Caching enabled, get translated string from cache if (array_key_exists($string, $this->cache_translations)) return $this->cache_translations[$string]; else return $string; } else { // Caching not enabled, try to find string $num = $this->find_string($string); if ($num == -1) return $string; else return $this->get_translation_string($num); } } /** * Get possible plural forms from MO header * * @access private * @return string plural form header */ function get_plural_forms() { // lets assume message number 0 is header // this is true, right? $this->load_tables(); // cache header field for plural forms if (! is_string($this->pluralheader)) { if ($this->enable_cache) { $header = $this->cache_translations[""]; } else { $header = $this->get_translation_string(0); } $header .= "\n"; //make sure our regex matches if (eregi("plural-forms: ([^\n]*)\n", $header, $regs)) $expr = $regs[1]; else $expr = "nplurals=2; plural=n == 1 ? 0 : 1;"; // add parentheses // important since PHP's ternary evaluates from left to right $expr.= ';'; $res= ''; $p= 0; for ($i= 0; $i < strlen($expr); $i++) { $ch= $expr[$i]; switch ($ch) { case '?': $res.= ' ? ('; $p++; break; case ':': $res.= ') : ('; break; case ';': $res.= str_repeat( ')', $p) . ';'; $p= 0; break; default: $res.= $ch; } } $this->pluralheader = $res; } return $this->pluralheader; } /** * Detects which plural form to take * * @access private * @param n count * @return int array index of the right plural form */ function select_string($n) { if (is_null($this->select_string_function)) { $string = $this->get_plural_forms(); if (preg_match("/nplurals\s*=\s*(\d+)\s*\;\s*plural\s*=\s*(.*?)\;+/", $string, $matches)) { $nplurals = $matches[1]; $expression = $matches[2]; $expression = str_replace("n", '$n', $expression); } else { $nplurals = 2; $expression = ' $n == 1 ? 0 : 1 '; } $func_body = " \$plural = ($expression); return (\$plural <= $nplurals)? \$plural : \$plural - 1;"; $this->select_string_function = create_function('$n', $func_body); } return call_user_func($this->select_string_function, $n); } /** * Plural version of gettext * * @access public * @param string single * @param string plural * @param string number * @return translated plural form */ function ngettext($single, $plural, $number) { if ($this->short_circuit) { if ($number != 1) return $plural; else return $single; } // find out the appropriate form $select = $this->select_string($number); // this should contains all strings separated by NULLs $key = $single.chr(0).$plural; if ($this->enable_cache) { if (! array_key_exists($key, $this->cache_translations)) { return ($number != 1) ? $plural : $single; } else { $result = $this->cache_translations[$key]; $list = explode(chr(0), $result); return $list[$select]; } } else { $num = $this->find_string($key); if ($num == -1) { return ($number != 1) ? $plural : $single; } else { $result = $this->get_translation_string($num); $list = explode(chr(0), $result); return $list[$select]; } } } } ?> 6wordpress/wp-includes/.svn/text-base/kses.php.svn-base[ array (), 'a' => array ('href' => array (), 'title' => array (), 'rel' => array (), 'rev' => array (), 'name' => array ()), 'abbr' => array ('title' => array ()), 'acronym' => array ('title' => array ()), 'b' => array (), 'big' => array (), 'blockquote' => array ('cite' => array ()), 'br' => array (), 'button' => array ('disabled' => array (), 'name' => array (), 'type' => array (), 'value' => array ()), 'caption' => array ('align' => array ()), 'code' => array (), 'col' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'span' => array (), 'valign' => array (), 'width' => array ()), 'del' => array ('datetime' => array ()), 'dd' => array (), 'div' => array ('align' => array ()), 'dl' => array (), 'dt' => array (), 'em' => array (), 'fieldset' => array (), 'font' => array ('color' => array (), 'face' => array (), 'size' => array ()), 'form' => array ('action' => array (), 'accept' => array (), 'accept-charset' => array (), 'enctype' => array (), 'method' => array (), 'name' => array (), 'target' => array ()), 'h1' => array ('align' => array ()), 'h2' => array ('align' => array ()), 'h3' => array ('align' => array ()), 'h4' => array ('align' => array ()), 'h5' => array ('align' => array ()), 'h6' => array ('align' => array ()), 'hr' => array ('align' => array (), 'noshade' => array (), 'size' => array (), 'width' => array ()), 'i' => array (), 'img' => array ('alt' => array (), 'align' => array (), 'border' => array (), 'height' => array (), 'hspace' => array (), 'longdesc' => array (), 'vspace' => array (), 'src' => array (), 'width' => array ()), 'ins' => array ('datetime' => array (), 'cite' => array ()), 'kbd' => array (), 'label' => array ('for' => array ()), 'legend' => array ('align' => array ()), 'li' => array (), 'p' => array ('align' => array ()), 'pre' => array ('width' => array ()), 'q' => array ('cite' => array ()), 's' => array (), 'strike' => array (), 'strong' => array (), 'sub' => array (), 'sup' => array (), 'table' => array ('align' => array (), 'bgcolor' => array (), 'border' => array (), 'cellpadding' => array (), 'cellspacing' => array (), 'rules' => array (), 'summary' => array (), 'width' => array ()), 'tbody' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'td' => array ('abbr' => array (), 'align' => array (), 'axis' => array (), 'bgcolor' => array (), 'char' => array (), 'charoff' => array (), 'colspan' => array (), 'headers' => array (), 'height' => array (), 'nowrap' => array (), 'rowspan' => array (), 'scope' => array (), 'valign' => array (), 'width' => array ()), 'textarea' => array ('cols' => array (), 'rows' => array (), 'disabled' => array (), 'name' => array (), 'readonly' => array ()), 'tfoot' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'th' => array ('abbr' => array (), 'align' => array (), 'axis' => array (), 'bgcolor' => array (), 'char' => array (), 'charoff' => array (), 'colspan' => array (), 'headers' => array (), 'height' => array (), 'nowrap' => array (), 'rowspan' => array (), 'scope' => array (), 'valign' => array (), 'width' => array ()), 'thead' => array ('align' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'title' => array (), 'tr' => array ('align' => array (), 'bgcolor' => array (), 'char' => array (), 'charoff' => array (), 'valign' => array ()), 'tt' => array (), 'u' => array (), 'ul' => array (), 'ol' => array (), 'var' => array () ); $allowedtags = array ('a' => array ('href' => array (), 'title' => array ()), 'abbr' => array ('title' => array ()), 'acronym' => array ('title' => array ()), 'b' => array (), 'blockquote' => array ('cite' => array ()), // 'br' => array(), 'code' => array (), // 'del' => array('datetime' => array()), // 'dd' => array(), // 'dl' => array(), // 'dt' => array(), 'em' => array (), 'i' => array (), // 'ins' => array('datetime' => array(), 'cite' => array()), // 'li' => array(), // 'ol' => array(), // 'p' => array(), // 'q' => array(), 'strike' => array (), 'strong' => array (), // 'sub' => array(), // 'sup' => array(), // 'u' => array(), // 'ul' => array(), ); } function wp_kses($string, $allowed_html, $allowed_protocols = array ('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet')) ############################################################################### # This function makes sure that only the allowed HTML element names, attribute # names and attribute values plus only sane HTML entities will occur in # $string. You have to remove any slashes from PHP's magic quotes before you # call this function. ############################################################################### { $string = wp_kses_no_null($string); $string = wp_kses_js_entities($string); $string = wp_kses_normalize_entities($string); $string = wp_kses_hook($string); $allowed_html_fixed = wp_kses_array_lc($allowed_html); return wp_kses_split($string, $allowed_html_fixed, $allowed_protocols); } # function wp_kses function wp_kses_hook($string) ############################################################################### # You add any kses hooks here. ############################################################################### { return $string; } # function wp_kses_hook function wp_kses_version() ############################################################################### # This function returns kses' version number. ############################################################################### { return '0.2.2'; } # function wp_kses_version function wp_kses_split($string, $allowed_html, $allowed_protocols) ############################################################################### # This function searches for HTML tags, no matter how malformed. It also # matches stray ">" characters. ############################################################################### { return preg_replace('%((|$))|(<[^>]*(>|$)|>))%e', "wp_kses_split2('\\1', \$allowed_html, ".'$allowed_protocols)', $string); } # function wp_kses_split function wp_kses_split2($string, $allowed_html, $allowed_protocols) ############################################################################### # This function does a lot of work. It rejects some very malformed things # like <:::>. It returns an empty string, if the element isn't allowed (look # ma, no strip_tags()!). Otherwise it splits the tag into an element and an # attribute list. ############################################################################### { $string = wp_kses_stripslashes($string); if (substr($string, 0, 1) != '<') return '>'; # It matched a ">" character if (preg_match('%^)?$%', $string, $matches)) { $string = str_replace(array(''), '', $matches[1]); while ( $string != $newstring = wp_kses($string, $allowed_html, $allowed_protocols) ) $string = $newstring; if ( $string == '' ) return ''; return ""; } # Allow HTML comments if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9]+)([^>]*)>?$%', $string, $matches)) return ''; # It's seriously malformed $slash = trim($matches[1]); $elem = $matches[2]; $attrlist = $matches[3]; if (!@isset($allowed_html[strtolower($elem)])) return ''; # They are using a not allowed HTML element if ($slash != '') return "<$slash$elem>"; # No attributes are allowed for closing elements return wp_kses_attr("$slash$elem", $attrlist, $allowed_html, $allowed_protocols); } # function wp_kses_split2 function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) ############################################################################### # This function removes all attributes, if none are allowed for this element. # If some are allowed it calls wp_kses_hair() to split them further, and then it # builds up new HTML code from the data that kses_hair() returns. It also # removes "<" and ">" characters, if there are any left. One more thing it # does is to check if the tag has a closing XHTML slash, and if it does, # it puts one in the returned code as well. ############################################################################### { # Is there a closing XHTML slash at the end of the attributes? $xhtml_slash = ''; if (preg_match('%\s/\s*$%', $attr)) $xhtml_slash = ' /'; # Are any attributes allowed at all for this element? if (@ count($allowed_html[strtolower($element)]) == 0) return "<$element$xhtml_slash>"; # Split it $attrarr = wp_kses_hair($attr, $allowed_protocols); # Go through $attrarr, and save the allowed attributes for this element # in $attr2 $attr2 = ''; foreach ($attrarr as $arreach) { if (!@ isset ($allowed_html[strtolower($element)][strtolower($arreach['name'])])) continue; # the attribute is not allowed $current = $allowed_html[strtolower($element)][strtolower($arreach['name'])]; if ($current == '') continue; # the attribute is not allowed if (!is_array($current)) $attr2 .= ' '.$arreach['whole']; # there are no checks else { # there are some checks $ok = true; foreach ($current as $currkey => $currval) if (!wp_kses_check_attr_val($arreach['value'], $arreach['vless'], $currkey, $currval)) { $ok = false; break; } if ($ok) $attr2 .= ' '.$arreach['whole']; # it passed them } # if !is_array($current) } # foreach # Remove any "<" or ">" characters $attr2 = preg_replace('/[<>]/', '', $attr2); return "<$element$attr2$xhtml_slash>"; } # function wp_kses_attr function wp_kses_hair($attr, $allowed_protocols) ############################################################################### # This function does a lot of work. It parses an attribute list into an array # with attribute data, and tries to do the right thing even if it gets weird # input. It will add quotes around attribute values that don't have any quotes # or apostrophes around them, to make it easier to produce HTML code that will # conform to W3C's HTML specification. It will also remove bad URL protocols # from attribute values. ############################################################################### { $attrarr = array (); $mode = 0; $attrname = ''; # Loop through the whole attribute list while (strlen($attr) != 0) { $working = 0; # Was the last operation successful? switch ($mode) { case 0 : # attribute name, href for instance if (preg_match('/^([-a-zA-Z]+)/', $attr, $match)) { $attrname = $match[1]; $working = $mode = 1; $attr = preg_replace('/^[-a-zA-Z]+/', '', $attr); } break; case 1 : # equals sign or valueless ("selected") if (preg_match('/^\s*=\s*/', $attr)) # equals sign { $working = 1; $mode = 2; $attr = preg_replace('/^\s*=\s*/', '', $attr); break; } if (preg_match('/^\s+/', $attr)) # valueless { $working = 1; $mode = 0; $attrarr[] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); $attr = preg_replace('/^\s+/', '', $attr); } break; case 2 : # attribute value, a URL after href= for instance if (preg_match('/^"([^"]*)"(\s+|$)/', $attr, $match)) # "value" { $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); $working = 1; $mode = 0; $attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); break; } if (preg_match("/^'([^']*)'(\s+|$)/", $attr, $match)) # 'value' { $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname='$thisval'", 'vless' => 'n'); $working = 1; $mode = 0; $attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); break; } if (preg_match("%^([^\s\"']+)(\s+|$)%", $attr, $match)) # value { $thisval = wp_kses_bad_protocol($match[1], $allowed_protocols); $attrarr[] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); # We add quotes to conform to W3C's HTML spec. $working = 1; $mode = 0; $attr = preg_replace("%^[^\s\"']+(\s+|$)%", '', $attr); } break; } # switch if ($working == 0) # not well formed, remove and try again { $attr = wp_kses_html_error($attr); $mode = 0; } } # while if ($mode == 1) # special case, for when the attribute list ends with a valueless # attribute like "selected" $attrarr[] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); return $attrarr; } # function wp_kses_hair function wp_kses_check_attr_val($value, $vless, $checkname, $checkvalue) ############################################################################### # This function performs different checks for attribute values. The currently # implemented checks are "maxlen", "minlen", "maxval", "minval" and "valueless" # with even more checks to come soon. ############################################################################### { $ok = true; switch (strtolower($checkname)) { case 'maxlen' : # The maxlen check makes sure that the attribute value has a length not # greater than the given value. This can be used to avoid Buffer Overflows # in WWW clients and various Internet servers. if (strlen($value) > $checkvalue) $ok = false; break; case 'minlen' : # The minlen check makes sure that the attribute value has a length not # smaller than the given value. if (strlen($value) < $checkvalue) $ok = false; break; case 'maxval' : # The maxval check does two things: it checks that the attribute value is # an integer from 0 and up, without an excessive amount of zeroes or # whitespace (to avoid Buffer Overflows). It also checks that the attribute # value is not greater than the given value. # This check can be used to avoid Denial of Service attacks. if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value)) $ok = false; if ($value > $checkvalue) $ok = false; break; case 'minval' : # The minval check checks that the attribute value is a positive integer, # and that it is not smaller than the given value. if (!preg_match('/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value)) $ok = false; if ($value < $checkvalue) $ok = false; break; case 'valueless' : # The valueless check checks if the attribute has a value # (like ) or not ('; break; case 'id': default: echo ''; break; } } function get_permalink($id = 0) { $rewritecode = array( '%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%', '%postname%', '%post_id%', '%category%', '%author%', '%pagename%' ); $post = &get_post($id); if ( $post->post_type == 'page' ) return get_page_link($post->ID); elseif ($post->post_type == 'attachment') return get_attachment_link($post->ID); $permalink = get_option('permalink_structure'); if ( '' != $permalink && 'draft' != $post->post_status ) { $unixtime = strtotime($post->post_date); $category = ''; if (strpos($permalink, '%category%') != false) { $cats = get_the_category($post->ID); if ( $cats ) usort($cats, '_get_the_category_usort_by_ID'); // order by ID $category = $cats[0]->category_nicename; if ( $parent=$cats[0]->category_parent ) $category = get_category_parents($parent, FALSE, '/', TRUE) . $category; } $authordata = get_userdata($post->post_author); $author = $authordata->user_nicename; $date = explode(" ",date('Y m d H i s', $unixtime)); $rewritereplace = array( $date[0], $date[1], $date[2], $date[3], $date[4], $date[5], $post->post_name, $post->ID, $category, $author, $post->post_name, ); $permalink = get_option('home') . str_replace($rewritecode, $rewritereplace, $permalink); $permalink = user_trailingslashit($permalink, 'single'); return apply_filters('post_link', $permalink, $post); } else { // if they're not using the fancy permalink option $permalink = get_option('home') . '/?p=' . $post->ID; return apply_filters('post_link', $permalink, $post); } } // get permalink from post ID function post_permalink($post_id = 0, $mode = '') { // $mode legacy return get_permalink($post_id); } // Respects page_on_front. Use this one. function get_page_link($id = false) { global $post; $id = (int) $id; if ( !$id ) $id = (int) $post->ID; if ( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') ) $link = get_option('home'); else $link = _get_page_link( $id ); return apply_filters('page_link', $link, $id); } // Ignores page_on_front. Internal use only. function _get_page_link( $id = false ) { global $post, $wp_rewrite; if ( !$id ) $id = (int) $post->ID; $pagestruct = $wp_rewrite->get_page_permastruct(); if ( '' != $pagestruct && 'draft' != $post->post_status ) { $link = get_page_uri($id); $link = str_replace('%pagename%', $link, $pagestruct); $link = get_option('home') . "/$link"; $link = user_trailingslashit($link, 'page'); } else { $link = get_option('home') . "/?page_id=$id"; } return apply_filters( '_get_page_link', $link, $id ); } function get_attachment_link($id = false) { global $post, $wp_rewrite; $link = false; if (! $id) { $id = (int) $post->ID; } $object = get_post($id); if ( $wp_rewrite->using_permalinks() && ($object->post_parent > 0) && ($object->post_parent != $id) ) { $parent = get_post($object->post_parent); if ( 'page' == $parent->post_type ) $parentlink = _get_page_link( $object->post_parent ); // Ignores page_on_front else $parentlink = get_permalink( $object->post_parent ); if (strpos($parentlink, '?') == false) $link = trim($parentlink, '/') . '/' . $object->post_name . '/'; } if (! $link ) { $link = get_bloginfo('url') . "/?attachment_id=$id"; } return apply_filters('attachment_link', $link, $id); } function get_year_link($year) { global $wp_rewrite; if ( !$year ) $year = gmdate('Y', time()+(get_option('gmt_offset') * 3600)); $yearlink = $wp_rewrite->get_year_permastruct(); if ( !empty($yearlink) ) { $yearlink = str_replace('%year%', $year, $yearlink); return apply_filters('year_link', get_option('home') . user_trailingslashit($yearlink, 'year'), $year); } else { return apply_filters('year_link', get_option('home') . '/?m=' . $year, $year); } } function get_month_link($year, $month) { global $wp_rewrite; if ( !$year ) $year = gmdate('Y', time()+(get_option('gmt_offset') * 3600)); if ( !$month ) $month = gmdate('m', time()+(get_option('gmt_offset') * 3600)); $monthlink = $wp_rewrite->get_month_permastruct(); if ( !empty($monthlink) ) { $monthlink = str_replace('%year%', $year, $monthlink); $monthlink = str_replace('%monthnum%', zeroise(intval($month), 2), $monthlink); return apply_filters('month_link', get_option('home') . user_trailingslashit($monthlink, 'month'), $year, $month); } else { return apply_filters('month_link', get_option('home') . '/?m=' . $year . zeroise($month, 2), $year, $month); } } function get_day_link($year, $month, $day) { global $wp_rewrite; if ( !$year ) $year = gmdate('Y', time()+(get_option('gmt_offset') * 3600)); if ( !$month ) $month = gmdate('m', time()+(get_option('gmt_offset') * 3600)); if ( !$day ) $day = gmdate('j', time()+(get_option('gmt_offset') * 3600)); $daylink = $wp_rewrite->get_day_permastruct(); if ( !empty($daylink) ) { $daylink = str_replace('%year%', $year, $daylink); $daylink = str_replace('%monthnum%', zeroise(intval($month), 2), $daylink); $daylink = str_replace('%day%', zeroise(intval($day), 2), $daylink); return apply_filters('day_link', get_option('home') . user_trailingslashit($daylink, 'day'), $year, $month, $day); } else { return apply_filters('day_link', get_option('home') . '/?m=' . $year . zeroise($month, 2) . zeroise($day, 2), $year, $month, $day); } } function get_feed_link($feed='rss2') { global $wp_rewrite; $do_perma = 0; $feed_url = get_option('siteurl'); $comment_feed_url = $feed_url; $permalink = $wp_rewrite->get_feed_permastruct(); if ( '' != $permalink ) { if ( false != strpos($feed, 'comments_') ) { $feed = str_replace('comments_', '', $feed); $permalink = $wp_rewrite->get_comment_feed_permastruct(); } if ( 'rss2' == $feed ) $feed = ''; $permalink = str_replace('%feed%', $feed, $permalink); $permalink = preg_replace('#/+#', '/', "/$permalink"); $output = get_option('home') . user_trailingslashit($permalink, 'feed'); } else { if ( false != strpos($feed, 'comments_') ) $feed = str_replace('comments_', 'comments-', $feed); $output = get_option('home') . "/?feed={$feed}"; } return apply_filters('feed_link', $output, $feed); } function get_post_comments_feed_link($post_id = '', $feed = 'rss2') { global $id; if ( empty($post_id) ) $post_id = (int) $id; if ( '' != get_option('permalink_structure') ) { $url = trailingslashit( get_permalink() ) . 'feed'; if ( 'rss2' != $feed ) $url .= "/$feed"; $url = user_trailingslashit($url, 'single_feed'); } else { $url = get_option('home') . "/?feed=$feed&p=$id"; } return apply_filters('post_comments_feed_link', $url); } function edit_post_link($link = 'Edit This', $before = '', $after = '') { global $post; if ( is_attachment() ) return; if( $post->post_type == 'page' ) { if ( ! current_user_can('edit_page', $post->ID) ) return; $file = 'page'; } else { if ( ! current_user_can('edit_post', $post->ID) ) return; $file = 'post'; } $location = get_option('siteurl') . "/wp-admin/{$file}.php?action=edit&post=$post->ID"; echo $before . "$link" . $after; } function edit_comment_link($link = 'Edit This', $before = '', $after = '') { global $post, $comment; if( $post->post_type == 'page' ){ if ( ! current_user_can('edit_page', $post->ID) ) return; } else { if ( ! current_user_can('edit_post', $post->ID) ) return; } $location = get_option('siteurl') . "/wp-admin/comment.php?action=editcomment&c=$comment->comment_ID"; echo $before . "$link" . $after; } // Navigation links function get_previous_post($in_same_cat = false, $excluded_categories = '') { global $post, $wpdb; if( !is_single() || is_attachment() ) return null; $current_post_date = $post->post_date; $join = ''; if ( $in_same_cat ) { $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id "; $cat_array = get_the_category($post->ID); $join .= ' AND (category_id = ' . intval($cat_array[0]->cat_ID); for ( $i = 1; $i < (count($cat_array)); $i++ ) { $join .= ' OR category_id = ' . intval($cat_array[$i]->cat_ID); } $join .= ')'; } $sql_exclude_cats = ''; if ( !empty($excluded_categories) ) { $blah = explode(' and ', $excluded_categories); foreach ( $blah as $category ) { $category = intval($category); $sql_cat_ids = " OR pc.category_ID = '$category'"; } $posts_in_ex_cats = $wpdb->get_col("SELECT p.ID FROM $wpdb->posts p LEFT JOIN $wpdb->post2cat pc ON pc.post_id=p.ID WHERE 1 = 0 $sql_cat_ids GROUP BY p.ID"); $posts_in_ex_cats_sql = 'AND ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')'; } $join = apply_filters( 'get_previous_post_join', $join, $in_same_cat, $excluded_categories ); $where = apply_filters( 'get_previous_post_where', "WHERE post_date < '$current_post_date' AND post_type = 'post' AND post_status = 'publish' $posts_in_ex_cats_sql", $in_same_cat, $excluded_categories ); $sort = apply_filters( 'get_previous_post_sort', 'ORDER BY post_date DESC' ); // LIMIT 1 return @$wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts $join $where $sort"); } function get_next_post($in_same_cat = false, $excluded_categories = '') { global $post, $wpdb; if( !is_single() || is_attachment() ) return null; $current_post_date = $post->post_date; $join = ''; if ( $in_same_cat ) { $join = " INNER JOIN $wpdb->post2cat ON $wpdb->posts.ID= $wpdb->post2cat.post_id "; $cat_array = get_the_category($post->ID); $join .= ' AND (category_id = ' . intval($cat_array[0]->cat_ID); for ( $i = 1; $i < (count($cat_array)); $i++ ) { $join .= ' OR category_id = ' . intval($cat_array[$i]->cat_ID); } $join .= ')'; } $sql_exclude_cats = ''; if ( !empty($excluded_categories) ) { $blah = explode(' and ', $excluded_categories); foreach ( $blah as $category ) { $category = intval($category); $sql_cat_ids = " OR pc.category_ID = '$category'"; } $posts_in_ex_cats = $wpdb->get_col("SELECT p.ID from $wpdb->posts p LEFT JOIN $wpdb->post2cat pc ON pc.post_id = p.ID WHERE 1 = 0 $sql_cat_ids GROUP BY p.ID"); $posts_in_ex_cats_sql = 'AND ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')'; } $join = apply_filters( 'get_next_post_join', $join, $in_same_cat, $excluded_categories ); $where = apply_filters( 'get_next_post_where', "WHERE post_date > '$current_post_date' AND post_type = 'post' AND post_status = 'publish' $posts_in_ex_cats_sql AND ID <> " . $post->ID, $in_same_cat, $excluded_categories ); $sort = apply_filters( 'get_next_post_sort', 'ORDER BY post_date ASC' ); // LIMIT 1 return @$wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts $join $where $sort"); } function previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') { if ( is_attachment() ) $post = & get_post($GLOBALS['post']->post_parent); else $post = get_previous_post($in_same_cat, $excluded_categories); if ( !$post ) return; $title = apply_filters('the_title', $post->post_title, $post); $string = ''; $link = str_replace('%title', $title, $link); $link = $pre . $string . $link . ''; $format = str_replace('%link', $link, $format); echo $format; } function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { $post = get_next_post($in_same_cat, $excluded_categories); if ( !$post ) return; $title = apply_filters('the_title', $post->post_title, $post); $string = ''; $link = str_replace('%title', $title, $link); $link = $string . $link . ''; $format = str_replace('%link', $link, $format); echo $format; } function get_pagenum_link($pagenum = 1) { global $wp_rewrite; $qstr = $_SERVER['REQUEST_URI']; $page_querystring = "paged"; $page_modstring = "page/"; $page_modregex = "page/?"; $permalink = 0; $home_root = parse_url(get_option('home')); $home_root = $home_root['path']; $home_root = trailingslashit($home_root); $qstr = preg_replace('|^'. $home_root . '|', '', $qstr); $qstr = preg_replace('|^/+|', '', $qstr); $index = $_SERVER['PHP_SELF']; $index = preg_replace('|^'. $home_root . '|', '', $index); $index = preg_replace('|^/+|', '', $index); // if we already have a QUERY style page string if ( stripos( $qstr, $page_querystring ) != false ) { $replacement = "$page_querystring=$pagenum"; $qstr = preg_replace("/".$page_querystring."[^\d]+\d+/", $replacement, $qstr); // if we already have a mod_rewrite style page string } elseif ( preg_match( '|'.$page_modregex.'\d+|', $qstr ) ) { $permalink = 1; $qstr = preg_replace('|'.$page_modregex.'\d+|',"$page_modstring$pagenum",$qstr); // if we don't have a page string at all ... // lets see what sort of URL we have... } else { // we need to know the way queries are being written // if there's a querystring_start (a "?" usually), it's definitely not mod_rewritten if ( stripos( $qstr, '?' ) != false ) { // so append the query string (using &, since we already have ?) $qstr .= '&' . $page_querystring . '=' . $pagenum; // otherwise, it could be rewritten, OR just the default index ... } elseif( '' != get_option('permalink_structure') && ! is_admin() ) { $permalink = 1; $index = $wp_rewrite->index; // If it's not a path info permalink structure, trim the index. if ( !$wp_rewrite->using_index_permalinks() ) { $qstr = preg_replace("#/*" . $index . "/*#", '/', $qstr); } else { // If using path info style permalinks, make sure the index is in // the URL. if ( strpos($qstr, $index) == false ) $qstr = '/' . $index . $qstr; } $qstr = trailingslashit($qstr) . $page_modstring . $pagenum; } else { $qstr = $index . '?' . $page_querystring . '=' . $pagenum; } } $qstr = preg_replace('|^/+|', '', $qstr); if ( $permalink ) $qstr = user_trailingslashit($qstr, 'paged'); // showing /page/1/ or ?paged=1 is redundant if ( 1 == $pagenum ) { $qstr = str_replace(user_trailingslashit('index.php/page/1', 'paged'), '', $qstr); // for PATHINFO style $qstr = str_replace(user_trailingslashit('page/1', 'paged'), '', $qstr); // for mod_rewrite style $qstr = remove_query_arg('paged', $qstr); // for query style } $qstr = preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', trailingslashit( get_option('home') ) . $qstr ); return $qstr; } function get_next_posts_page_link($max_page = 0) { global $paged, $pagenow; if ( !is_single() ) { if ( !$paged ) $paged = 1; $nextpage = intval($paged) + 1; if ( !$max_page || $max_page >= $nextpage ) return get_pagenum_link($nextpage); } } function next_posts($max_page = 0) { echo clean_url(get_next_posts_page_link($max_page)); } function next_posts_link($label='Next Page »', $max_page=0) { global $paged, $wpdb, $wp_query; if ( !$max_page ) { $max_page = $wp_query->max_num_pages; } if ( !$paged ) $paged = 1; $nextpage = intval($paged) + 1; if ( (! is_single()) && (empty($paged) || $nextpage <= $max_page) ) { echo ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; } } function get_previous_posts_page_link() { global $paged, $pagenow; if ( !is_single() ) { $nextpage = intval($paged) - 1; if ( $nextpage < 1 ) $nextpage = 1; return get_pagenum_link($nextpage); } } function previous_posts() { echo clean_url(get_previous_posts_page_link()); } function previous_posts_link($label='« Previous Page') { global $paged; if ( (!is_single()) && ($paged > 1) ) { echo ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; } } function posts_nav_link($sep=' — ', $prelabel='« Previous Page', $nxtlabel='Next Page »') { global $wp_query; if ( !is_singular() ) { $max_num_pages = $wp_query->max_num_pages; $paged = get_query_var('paged'); //only have sep if there's both prev and next results if ($paged < 2 || $paged >= $max_num_pages) { $sep = ''; } if ( $max_num_pages > 1 ) { previous_posts_link($prelabel); echo preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $sep); next_posts_link($nxtlabel); } } } ?> 8wordpress/wp-includes/.svn/text-base/locale.php.svn-baseZweekday[0] = __('Sunday'); $this->weekday[1] = __('Monday'); $this->weekday[2] = __('Tuesday'); $this->weekday[3] = __('Wednesday'); $this->weekday[4] = __('Thursday'); $this->weekday[5] = __('Friday'); $this->weekday[6] = __('Saturday'); // The first letter of each day. The _%day%_initial suffix is a hack to make // sure the day initials are unique. $this->weekday_initial[__('Sunday')] = __('S_Sunday_initial'); $this->weekday_initial[__('Monday')] = __('M_Monday_initial'); $this->weekday_initial[__('Tuesday')] = __('T_Tuesday_initial'); $this->weekday_initial[__('Wednesday')] = __('W_Wednesday_initial'); $this->weekday_initial[__('Thursday')] = __('T_Thursday_initial'); $this->weekday_initial[__('Friday')] = __('F_Friday_initial'); $this->weekday_initial[__('Saturday')] = __('S_Saturday_initial'); foreach ($this->weekday_initial as $weekday_ => $weekday_initial_) { $this->weekday_initial[$weekday_] = preg_replace('/_.+_initial$/', '', $weekday_initial_); } // Abbreviations for each day. $this->weekday_abbrev[__('Sunday')] = __('Sun'); $this->weekday_abbrev[__('Monday')] = __('Mon'); $this->weekday_abbrev[__('Tuesday')] = __('Tue'); $this->weekday_abbrev[__('Wednesday')] = __('Wed'); $this->weekday_abbrev[__('Thursday')] = __('Thu'); $this->weekday_abbrev[__('Friday')] = __('Fri'); $this->weekday_abbrev[__('Saturday')] = __('Sat'); // The Months $this->month['01'] = __('January'); $this->month['02'] = __('February'); $this->month['03'] = __('March'); $this->month['04'] = __('April'); $this->month['05'] = __('May'); $this->month['06'] = __('June'); $this->month['07'] = __('July'); $this->month['08'] = __('August'); $this->month['09'] = __('September'); $this->month['10'] = __('October'); $this->month['11'] = __('November'); $this->month['12'] = __('December'); // Abbreviations for each month. Uses the same hack as above to get around the // 'May' duplication. $this->month_abbrev[__('January')] = __('Jan_January_abbreviation'); $this->month_abbrev[__('February')] = __('Feb_February_abbreviation'); $this->month_abbrev[__('March')] = __('Mar_March_abbreviation'); $this->month_abbrev[__('April')] = __('Apr_April_abbreviation'); $this->month_abbrev[__('May')] = __('May_May_abbreviation'); $this->month_abbrev[__('June')] = __('Jun_June_abbreviation'); $this->month_abbrev[__('July')] = __('Jul_July_abbreviation'); $this->month_abbrev[__('August')] = __('Aug_August_abbreviation'); $this->month_abbrev[__('September')] = __('Sep_September_abbreviation'); $this->month_abbrev[__('October')] = __('Oct_October_abbreviation'); $this->month_abbrev[__('November')] = __('Nov_November_abbreviation'); $this->month_abbrev[__('December')] = __('Dec_December_abbreviation'); foreach ($this->month_abbrev as $month_ => $month_abbrev_) { $this->month_abbrev[$month_] = preg_replace('/_.+_abbreviation$/', '', $month_abbrev_); } // The Meridiems $this->meridiem['am'] = __('am'); $this->meridiem['pm'] = __('pm'); $this->meridiem['AM'] = __('AM'); $this->meridiem['PM'] = __('PM'); // Import global locale vars set during inclusion of $locale.php. foreach ( $this->locale_vars as $var ) { if ( isset($GLOBALS[$var]) ) $this->$var = $GLOBALS[$var]; } } function get_weekday($weekday_number) { return $this->weekday[$weekday_number]; } function get_weekday_initial($weekday_name) { return $this->weekday_initial[$weekday_name]; } function get_weekday_abbrev($weekday_name) { return $this->weekday_abbrev[$weekday_name]; } function get_month($month_number) { return $this->month[zeroise($month_number, 2)]; } function get_month_initial($month_name) { return $this->month_initial[$month_name]; } function get_month_abbrev($month_name) { return $this->month_abbrev[$month_name]; } function get_meridiem($meridiem) { return $this->meridiem[$meridiem]; } // Global variables are deprecated. For backwards compatibility only. function register_globals() { $GLOBALS['weekday'] = $this->weekday; $GLOBALS['weekday_initial'] = $this->weekday_initial; $GLOBALS['weekday_abbrev'] = $this->weekday_abbrev; $GLOBALS['month'] = $this->month; $GLOBALS['month_abbrev'] = $this->month_abbrev; } function WP_Locale() { $this->init(); $this->register_globals(); } } ?>;wordpress/wp-includes/.svn/text-base/pluggable.php.svn-baseMID) ) return $current_user; $current_user = new WP_User($id, $name); setup_userdata($current_user->ID); do_action('set_current_user'); return $current_user; } endif; if ( !function_exists('wp_get_current_user') ) : function wp_get_current_user() { global $current_user; get_currentuserinfo(); return $current_user; } endif; if ( !function_exists('get_currentuserinfo') ) : function get_currentuserinfo() { global $current_user; if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) return false; if ( ! empty($current_user) ) return; if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) || !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true) ) { wp_set_current_user(0); return false; } $user_login = $_COOKIE[USER_COOKIE]; wp_set_current_user(0, $user_login); } endif; if ( !function_exists('get_userdata') ) : function get_userdata( $user_id ) { global $wpdb; $user_id = (int) $user_id; if ( $user_id == 0 ) return false; $user = wp_cache_get($user_id, 'users'); if ( $user ) return $user; if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID = " . $user_id) ) // LIMIT 1 return false; $wpdb->hide_errors(); $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user_id); $wpdb->show_errors(); if ($metavalues) { foreach ( $metavalues as $meta ) { $value = maybe_unserialize($meta->meta_value); $user->{$meta->meta_key} = $value; // We need to set user_level from meta, not row if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) $user->user_level = $meta->meta_value; } // end foreach } //end if // For backwards compat. if ( isset($user->first_name) ) $user->user_firstname = $user->first_name; if ( isset($user->last_name) ) $user->user_lastname = $user->last_name; if ( isset($user->description) ) $user->user_description = $user->description; wp_cache_add($user_id, $user, 'users'); wp_cache_add($user->user_login, $user_id, 'userlogins'); return $user; } endif; if ( !function_exists('update_user_cache') ) : function update_user_cache() { return true; } endif; if ( !function_exists('get_userdatabylogin') ) : function get_userdatabylogin($user_login) { global $wpdb; $user_login = sanitize_user( $user_login ); if ( empty( $user_login ) ) return false; $user_id = wp_cache_get($user_login, 'userlogins'); $userdata = wp_cache_get($user_id, 'users'); if ( $userdata ) return $userdata; $user_login = $wpdb->escape($user_login); if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") ) return false; $wpdb->hide_errors(); $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user->ID); $wpdb->show_errors(); if ($metavalues) { foreach ( $metavalues as $meta ) { $value = maybe_unserialize($meta->meta_value); $user->{$meta->meta_key} = $value; // We need to set user_level from meta, not row if ( $wpdb->prefix . 'user_level' == $meta->meta_key ) $user->user_level = $meta->meta_value; } } // For backwards compat. if ( isset($user->first_name) ) $user->user_firstname = $user->first_name; if ( isset($user->last_name) ) $user->user_lastname = $user->last_name; if ( isset($user->description) ) $user->user_description = $user->description; wp_cache_add($user->ID, $user, 'users'); wp_cache_add($user->user_login, $user->ID, 'userlogins'); return $user; } endif; if ( !function_exists( 'wp_mail' ) ) : function wp_mail($to, $subject, $message, $headers = '') { global $phpmailer; if ( !is_object( $phpmailer ) ) { require_once(ABSPATH . WPINC . '/class-phpmailer.php'); require_once(ABSPATH . WPINC . '/class-smtp.php'); $phpmailer = new PHPMailer(); } $mail = compact('to', 'subject', 'message', 'headers'); $mail = apply_filters('wp_mail', $mail); extract($mail, EXTR_SKIP); if ( $headers == '' ) { $headers = "MIME-Version: 1.0\n" . "From: " . apply_filters('wp_mail_from', "wordpress@" . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']))) . "\n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n"; } $phpmailer->ClearAddresses(); $phpmailer->ClearCCs(); $phpmailer->ClearBCCs(); $phpmailer->ClearReplyTos(); $phpmailer->ClearAllRecipients(); $phpmailer->ClearCustomHeaders(); $phpmailer->FromName = "WordPress"; $phpmailer->AddAddress("$to", ""); $phpmailer->Subject = $subject; $phpmailer->Body = $message; $phpmailer->IsHTML(false); $phpmailer->IsMail(); // set mailer to use php mail() do_action_ref_array('phpmailer_init', array(&$phpmailer)); $mailheaders = (array) explode( "\n", $headers ); foreach ( $mailheaders as $line ) { $header = explode( ":", $line ); switch ( trim( $header[0] ) ) { case "From": $from = trim( str_replace( '"', '', $header[1] ) ); if ( strpos( $from, '<' ) ) { $phpmailer->FromName = str_replace( '"', '', substr( $header[1], 0, strpos( $header[1], '<' ) - 1 ) ); $from = trim( substr( $from, strpos( $from, '<' ) + 1 ) ); $from = str_replace( '>', '', $from ); } else { $phpmailer->FromName = $from; } $phpmailer->From = trim( $from ); break; default: if ( $line != '' && $header[0] != 'MIME-Version' && $header[0] != 'Content-Type' ) $phpmailer->AddCustomHeader( $line ); break; } } $result = @$phpmailer->Send(); return $result; } endif; if ( !function_exists('wp_login') ) : function wp_login($username, $password, $already_md5 = false) { global $wpdb, $error; $username = sanitize_user($username); if ( '' == $username ) return false; if ( '' == $password ) { $error = __('ERROR: The password field is empty.'); return false; } $login = get_userdatabylogin($username); //$login = $wpdb->get_row("SELECT ID, user_login, user_pass FROM $wpdb->users WHERE user_login = '$username'"); if (!$login) { $error = __('ERROR: Invalid username.'); return false; } else { // If the password is already_md5, it has been double hashed. // Otherwise, it is plain text. if ( ($already_md5 && md5($login->user_pass) == $password) || ($login->user_login == $username && $login->user_pass == md5($password)) ) { return true; } else { $error = __('ERROR: Incorrect password.'); $pwd = ''; return false; } } } endif; if ( !function_exists('is_user_logged_in') ) : function is_user_logged_in() { $user = wp_get_current_user(); if ( $user->id == 0 ) return false; return true; } endif; if ( !function_exists('auth_redirect') ) : function auth_redirect() { // Checks if a user is logged in, if not redirects them to the login page if ( (!empty($_COOKIE[USER_COOKIE]) && !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) || (empty($_COOKIE[USER_COOKIE])) ) { nocache_headers(); wp_redirect(get_option('siteurl') . '/wp-login.php?redirect_to=' . urlencode($_SERVER['REQUEST_URI'])); exit(); } } endif; if ( !function_exists('check_admin_referer') ) : function check_admin_referer($action = -1) { $adminurl = strtolower(get_option('siteurl')).'/wp-admin'; $referer = strtolower(wp_get_referer()); if ( !wp_verify_nonce($_REQUEST['_wpnonce'], $action) && !(-1 == $action && strpos($referer, $adminurl) != false)) { wp_nonce_ays($action); die(); } do_action('check_admin_referer', $action); }endif; if ( !function_exists('check_ajax_referer') ) : function check_ajax_referer() { $cookie = explode('; ', urldecode(empty($_POST['cookie']) ? $_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass cookie=document.cookie foreach ( $cookie as $tasty ) { if ( false != strpos($tasty, USER_COOKIE) ) $user = substr(strstr($tasty, '='), 1); if ( false != strpos($tasty, PASS_COOKIE) ) $pass = substr(strstr($tasty, '='), 1); } if ( !wp_login( $user, $pass, true ) ) die('-1'); do_action('check_ajax_referer'); } endif; // Cookie safe redirect. Works around IIS Set-Cookie bug. // http://support.microsoft.com/kb/q176113/ if ( !function_exists('wp_redirect') ) : function wp_redirect($location, $status = 302) { global $is_IIS; $location = apply_filters('wp_redirect', $location, $status); if ( !$location ) // allows the wp_redirect filter to cancel a redirect return false; $location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%]|i', '', $location); $location = wp_kses_no_null($location); // remove %0d and %0a from location $strip = array('%0d', '%0a'); $found = true; while($found) { $found = false; foreach($strip as $val) { while(strpos($location, $val) != false) { $found = true; $location = str_replace($val, '', $location); } } } if ( $is_IIS ) { header("Refresh: 0;url=$location"); } else { if ( php_sapi_name() != 'cgi-fcgi' ) status_header($status); // This causes problems on IIS and some FastCGI setups header("Location: $location"); } } endif; if ( !function_exists('wp_get_cookie_login') ): function wp_get_cookie_login() { if ( empty($_COOKIE[USER_COOKIE]) || empty($_COOKIE[PASS_COOKIE]) ) return false; return array('login' => $_COOKIE[USER_COOKIE], 'password' => $_COOKIE[PASS_COOKIE]); } endif; if ( !function_exists('wp_setcookie') ) : function wp_setcookie($username, $password, $already_md5 = false, $home = '', $siteurl = '', $remember = false) { if ( !$already_md5 ) $password = md5( md5($password) ); // Double hash the password in the cookie. if ( empty($home) ) $cookiepath = COOKIEPATH; else $cookiepath = preg_replace('|https?://[^/]+|i', '', $home . '/' ); if ( empty($siteurl) ) { $sitecookiepath = SITECOOKIEPATH; $cookiehash = COOKIEHASH; } else { $sitecookiepath = preg_replace('|https?://[^/]+|i', '', $siteurl . '/' ); $cookiehash = md5($siteurl); } if ( $remember ) $expire = time() + 31536000; else $expire = 0; setcookie(USER_COOKIE, $username, $expire, $cookiepath, COOKIE_DOMAIN); setcookie(PASS_COOKIE, $password, $expire, $cookiepath, COOKIE_DOMAIN); if ( $cookiepath != $sitecookiepath ) { setcookie(USER_COOKIE, $username, $expire, $sitecookiepath, COOKIE_DOMAIN); setcookie(PASS_COOKIE, $password, $expire, $sitecookiepath, COOKIE_DOMAIN); } } endif; if ( !function_exists('wp_clearcookie') ) : function wp_clearcookie() { setcookie(USER_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN); setcookie(PASS_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN); setcookie(USER_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN); setcookie(PASS_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN); } endif; if ( ! function_exists('wp_notify_postauthor') ) : function wp_notify_postauthor($comment_id, $comment_type='') { global $wpdb; $comment = get_comment($comment_id); $post = get_post($comment->comment_post_ID); $user = get_userdata( $post->post_author ); if ('' == $user->user_email) return false; // If there's no email to send the comment to $comment_author_domain = @gethostbyaddr($comment->comment_author_IP); $blogname = get_option('blogname'); if ( empty( $comment_type ) ) $comment_type = 'comment'; if ('comment' == $comment_type) { $notify_message = sprintf( __('New comment on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n"; $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= sprintf( __('Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s'), $comment->comment_author_IP ) . "\r\n"; $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= __('You can see all comments on this post here: ') . "\r\n"; $subject = sprintf( __('[%1$s] Comment: "%2$s"'), $blogname, $post->post_title ); } elseif ('trackback' == $comment_type) { $notify_message = sprintf( __('New trackback on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n"; $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= __('Excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= __('You can see all trackbacks on this post here: ') . "\r\n"; $subject = sprintf( __('[%1$s] Trackback: "%2$s"'), $blogname, $post->post_title ); } elseif ('pingback' == $comment_type) { $notify_message = sprintf( __('New pingback on your post #%1$s "%2$s"'), $comment->comment_post_ID, $post->post_title ) . "\r\n"; $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= __('Excerpt: ') . "\r\n" . sprintf('[...] %s [...]', $comment->comment_content ) . "\r\n\r\n"; $notify_message .= __('You can see all pingbacks on this post here: ') . "\r\n"; $subject = sprintf( __('[%1$s] Pingback: "%2$s"'), $blogname, $post->post_title ); } $notify_message .= get_permalink($comment->comment_post_ID) . "#comments\r\n\r\n"; $notify_message .= sprintf( __('Delete it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Spam it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&dt=spam&c=$comment_id" ) . "\r\n"; $wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); if ( '' == $comment->comment_author ) { $from = "From: \"$blogname\" <$wp_email>"; if ( '' != $comment->comment_author_email ) $reply_to = "Reply-To: $comment->comment_author_email"; } else { $from = "From: \"$comment->comment_author\" <$wp_email>"; if ( '' != $comment->comment_author_email ) $reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>"; } $message_headers = "MIME-Version: 1.0\n" . "$from\n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n"; if ( isset($reply_to) ) $message_headers .= $reply_to . "\n"; $notify_message = apply_filters('comment_notification_text', $notify_message, $comment_id); $subject = apply_filters('comment_notification_subject', $subject, $comment_id); $message_headers = apply_filters('comment_notification_headers', $message_headers, $comment_id); @wp_mail($user->user_email, $subject, $notify_message, $message_headers); return true; } endif; /* wp_notify_moderator notifies the moderator of the blog (usually the admin) about a new comment that waits for approval always returns true */ if ( !function_exists('wp_notify_moderator') ) : function wp_notify_moderator($comment_id) { global $wpdb; if( get_option( "moderation_notify" ) == 0 ) return true; $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = ". $comment_id); // LIMIT 1 $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $comment->comment_post_ID); // LIMIT 1 $comment_author_domain = @gethostbyaddr($comment->comment_author_IP); $comments_waiting = $wpdb->get_var("SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'"); $notify_message = sprintf( __('A new comment on the post #%1$s "%2$s" is waiting for your approval'), $post->ID, $post->post_title ) . "\r\n"; $notify_message .= get_permalink($comment->comment_post_ID) . "\r\n\r\n"; $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n"; $notify_message .= sprintf( __('URL : %s'), $comment->comment_author_url ) . "\r\n"; $notify_message .= sprintf( __('Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s'), $comment->comment_author_IP ) . "\r\n"; $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= sprintf( __('Approve it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=mac&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Delete it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Spam it: %s'), get_option('siteurl')."/wp-admin/comment.php?action=cdc&dt=spam&c=$comment_id" ) . "\r\n"; $notify_message .= sprintf( __('Currently %s comments are waiting for approval. Please visit the moderation panel:'), $comments_waiting ) . "\r\n"; $notify_message .= get_option('siteurl') . "/wp-admin/moderation.php\r\n"; $subject = sprintf( __('[%1$s] Please moderate: "%2$s"'), get_option('blogname'), $post->post_title ); $admin_email = get_option('admin_email'); $notify_message = apply_filters('comment_moderation_text', $notify_message, $comment_id); $subject = apply_filters('comment_moderation_subject', $subject, $comment_id); @wp_mail($admin_email, $subject, $notify_message); return true; } endif; if ( !function_exists('wp_new_user_notification') ) : function wp_new_user_notification($user_id, $plaintext_pass = '') { $user = new WP_User($user_id); $user_login = stripslashes($user->user_login); $user_email = stripslashes($user->user_email); $message = sprintf(__('New user registration on your blog %s:'), get_option('blogname')) . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n"; @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), get_option('blogname')), $message); if ( empty($plaintext_pass) ) return; $message = sprintf(__('Username: %s'), $user_login) . "\r\n"; $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n"; $message .= get_option('siteurl') . "/wp-login.php\r\n"; wp_mail($user_email, sprintf(__('[%s] Your username and password'), get_option('blogname')), $message); } endif; if ( !function_exists('wp_verify_nonce') ) : function wp_verify_nonce($nonce, $action = -1) { $user = wp_get_current_user(); $uid = (int) $user->id; $i = ceil(time() / 43200); //Allow for expanding range, but only do one check if we can if( substr(wp_hash($i . $action . $uid), -12, 10) == $nonce || substr(wp_hash(($i - 1) . $action . $uid), -12, 10) == $nonce ) return true; return false; } endif; if ( !function_exists('wp_create_nonce') ) : function wp_create_nonce($action = -1) { $user = wp_get_current_user(); $uid = (int) $user->id; $i = ceil(time() / 43200); return substr(wp_hash($i . $action . $uid), -12, 10); } endif; if ( !function_exists('wp_salt') ) : function wp_salt() { $salt = get_option('secret'); if ( empty($salt) ) $salt = DB_PASSWORD . DB_USER . DB_NAME . DB_HOST . ABSPATH; return $salt; } endif; if ( !function_exists('wp_hash') ) : function wp_hash($data) { $salt = wp_salt(); if ( function_exists('hash_hmac') ) { return hash_hmac('md5', $data, $salt); } else { return md5($data . $salt); } } endif; ?> 8wordpress/wp-includes/.svn/text-base/plugin.php.svn-base1$function_to_add
    to. * @param callback $function_to_add The name of the function to be called when the filter is applied. * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action. * @param int $accepted_args optional. The number of arguments the function accept (default 1). In WordPress 1.5.1+, hooked functions can take extra arguments that are set when the matching do_action() or apply_filters() call is run. * @return boolean true if the $function_to_add is added succesfully to filter $tag. How many arguments your function takes. In WordPress 1.5.1+, hooked functions can take extra arguments that are set when the matching do_action() or apply_filters() call is run. For example, the action comment_id_not_found will pass any functions that hook onto it the ID of the requested comment. */ function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; // So the format is wp_filter['tag']['array of priorities']['array of functions serialized']['array of ['array (functions, accepted_args)]'] $wp_filter[$tag][$priority][_wp_filter_build_unique_id($tag, $function_to_add, $priority)] = array('function' => $function_to_add, 'accepted_args' => $accepted_args); unset( $merged_filters[ $tag ] ); return true; } /** * Call the functions added to a filter hook. * * The callback functions attached to filter hook $tag are invoked by * calling this function. This function can be used to create a new filter hook * by simply calling this function with the name of the new hook specified using * the $tag parameter. * @uses merge_filters Merges the filter hooks using this function. * @param string $tag The name of the filter hook. * @param string $string The text on which the filters hooked to $tag are applied on. * @param mixed $var,... Additional variables passed to the functions hooked to $tag. * @return string The text in $string after all hooked functions are applied to it. */ function apply_filters($tag, $string) { global $wp_filter, $merged_filters; if ( !isset( $merged_filters[ $tag ] ) ) merge_filters($tag); if ( !isset($wp_filter[$tag]) ) return $string; reset( $wp_filter[ $tag ] ); $args = func_get_args(); do{ foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ){ $args[1] = $string; $string = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args'])); } } while ( next($wp_filter[$tag]) ); return $string; } /** * Merge the filter functions of a specific filter hook with generic filter functions. * * It is possible to defined generic filter functions using the filter hook * all. These functions are called for every filter tag. This function * merges the functions attached to the all hook with the functions * of a specific hoook defined by $tag. * @param string $tag The filter hook of which the functions should be merged. */ function merge_filters($tag) { global $wp_filter, $merged_filters; if ( isset($wp_filter['all']) && is_array($wp_filter['all']) ) $wp_filter[$tag] = array_merge($wp_filter['all'], (array) $wp_filter[$tag]); if ( isset($wp_filter[$tag]) ){ reset($wp_filter[$tag]); uksort($wp_filter[$tag], "strnatcasecmp"); } $merged_filters[ $tag ] = true; } /** * Removes a function from a specified filter hook. * * This function removes a function attached to a specified filter hook. This * method can be used to remove default functions attached to a specific filter * hook and possibly replace them with a substitute. * @param string $tag The filter hook to which the function to be removed is hooked. * @param callback $function_to_remove The name of the function which should be removed. * @param int $priority optional. The priority of the function (default: 10). * @param int $accepted_args optional. The number of arguments the function accpets (default: 1). * @return boolean Whether the function is removed. */ function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; unset($GLOBALS['wp_filter'][$tag][$priority][_wp_filter_build_unique_id($tag, $function_to_remove, $priority)]); unset( $merged_filters[ $tag ] ); return true; } /** * Hooks a function on to a specific action. * * Actions are the hooks that the WordPress core launches at specific points * during execution, or when specific events occur. Plugins can specify that * one or more of its PHP functions are executed at these points, using the * Action API. * * @param string $tag The name of the action to which the $function_to-add is hooked. * @param callback $function_to_add The name of the function you wish to be called. Note: any of the syntaxes explained in the PHP documentation for the 'callback' type (http://us2.php.net/manual/en/language.pseudo-types.php#language.types.callback) are valid. * @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed (default: 10). Lower numbers correspond with earlier execution, and functions with the same priority are executed in the order in which they were added to the action. * @param int $accepted_args optional. The number of arguments the function accept (default 1). In WordPress 1.5.1+, hooked functions can take extra arguments that are set when the matching do_action() or apply_filters() call is run. * @return boolean Always true. */ function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { add_filter($tag, $function_to_add, $priority, $accepted_args); } /** * Execute functions hooked on a specific action hook. * * This function invokes all functions attached to action hook $tag. * It is possible to create new action hooks by simply calling this function, * specifying the name of the new hook using the $tag parameter. * @uses merge_filters * @param string $tag The name of the action to be executed. * @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action. */ function do_action($tag, $arg = '') { global $wp_filter, $wp_actions; if ( is_array($wp_actions) ) $wp_actions[] = $tag; else $wp_actions = array($tag); $args = array(); if ( is_array($arg) && 1 == count($arg) && is_object($arg[0]) ) // array(&$this) $args[] =& $arg[0]; else $args[] = $arg; for ( $a = 2; $a < func_num_args(); $a++ ) $args[] = func_get_arg($a); merge_filters($tag); if ( !isset($wp_filter[$tag]) ) return; do{ foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ) call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); } while ( next($wp_filter[$tag]) ); } /** * Return the number times an action is fired. * @param string $tag The name of the action hook. * @return int The number of times action hook $tag is fired */ function did_action($tag) { global $wp_actions; if ( empty($wp_actions) ) return 0; return count(array_keys($wp_actions, $tag)); } /** * Execute functions hooked on a specific action hook, specifying arguments in a array. * * This function is identical to {@link do_action}, but the argumetns passe to * the functions hooked to $tag are supplied using an array. * @param string $tag The name of the action to be executed. * @param array $args The arguments supplied to the functions hooked to $tag */ function do_action_ref_array($tag, $args) { global $wp_filter, $wp_actions; if ( !is_array($wp_actions) ) $wp_actions = array($tag); else $wp_actions[] = $tag; merge_filters($tag); if ( !isset($wp_filter[$tag]) ) return; do{ foreach( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ) call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); } while ( next($wp_filter[$tag]) ); } /** * Removes a function from a specified action hook. * * This function removes a function attached to a specified action hook. This * method can be used to remove default functions attached to a specific filter * hook and possibly replace them with a substitute. * @param string $tag The action hook to which the function to be removed is hooked. * @param callback $function_to_remove The name of the function which should be removed. * @param int $priority optional The priority of the function (default: 10). * @param int $accepted_args optional. The number of arguments the function accpets (default: 1). * @return boolean Whether the function is removed. */ function remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { remove_filter($tag, $function_to_remove, $priority, $accepted_args); } // // Functions for handling plugins. // /** * Gets the basename of a plugin. * * This method extract the name of a plugin from its filename. * @param string $file The filename of plugin. * @return string The name of a plugin. */ function plugin_basename($file) { $file = str_replace('\\','/',$file); // sanitize for Win32 installs $file = preg_replace('|/+|','/', $file); // remove any duplicate slash $file = preg_replace('|^.*/wp-content/plugins/|','',$file); // get relative path from plugins dir return $file; } /** * Hook a function on a plugin activation action hook. * * When a plugin is activated, the action 'activate_PLUGINNAME' hook is * activated. In the name of this hook, PLUGINNAME is replaced with the name of * the plugin, including the optional subdirectory. For example, when the plugin * is located in wp-content/plugin/sampleplugin/sample.php, then the * name of this hook will become 'activate_sampleplugin/sample.php'. * When the plugin consists of only one file and is (as by default) located at * wp-content/plugin/sample.php the name of this hook will be * 'activate_sample.php'. * @param string $file The filename of the plugin including the path. * @param string $function the function hooked to the 'activate_PLUGIN' action. */ function register_activation_hook($file, $function) { $file = plugin_basename($file); add_action('activate_' . $file, $function); } /** * Hook a function on a plugin deactivation action hook. * * When a plugin is deactivated, the action 'deactivate_PLUGINNAME' hook is * deactivated. In the name of this hook, PLUGINNAME is replaced with the name of * the plugin, including the optional subdirectory. For example, when the plugin * is located in wp-content/plugin/sampleplugin/sample.php, then the * name of this hook will become 'activate_sampleplugin/sample.php'. * When the plugin consists of only one file and is (as by default) located at * wp-content/plugin/sample.php the name of this hook will be * 'activate_sample.php'. * @param string $file The filename of the plugin including the path. * @param string $function the function hooked to the 'activate_PLUGIN' action. */ function register_deactivation_hook($file, $function) { $file = plugin_basename($file); add_action('deactivate_' . $file, $function); } function _wp_filter_build_unique_id($tag, $function, $priority = 10) { global $wp_filter; // If function then just skip all of the tests and not overwrite the following. if( is_string($function) ) return $function; // Object Class Calling else if(is_object($function[0]) ) { $obj_idx = get_class($function[0]).$function[1]; if( is_null($function[0]->wp_filter_id) ) { $count = count((array)$wp_filter[$tag][$priority]); $function[0]->wp_filter_id = $count; $obj_idx .= $count; unset($count); } else $obj_idx .= $function[0]->wp_filter_id; return $obj_idx; } // Static Calling else if( is_string($function[0]) ) return $function[0].$function[1]; } ?>6wordpress/wp-includes/.svn/text-base/post.php.svn-base & $GLOBALS['post']->post_parent); else return false; } elseif ( is_object($args) ) $r = array('post_parent' => $post->post_parent); elseif ( is_numeric($args) ) $r = array('post_parent' => $args); elseif ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('numberposts' => -1, 'post_type' => '', 'post_status' => '', 'post_parent' => 0); $r = array_merge($defaults, $r); $children = get_posts( $r ); if ( $children ) { foreach ( $children as $key => $child ) { $post_cache[$blog_id][$child->ID] =& $children[$key]; $kids[$child->ID] =& $children[$key]; } } else { return false; } if ( $output == OBJECT ) { return $kids; } elseif ( $output == ARRAY_A ) { foreach ( $kids as $kid ) $weeuns[$kid->ID] = get_object_vars($kids[$kid->ID]); return $weeuns; } elseif ( $output == ARRAY_N ) { foreach ( $kids as $kid ) $babes[$kid->ID] = array_values(get_object_vars($kids[$kid->ID])); return $babes; } else { return $kids; } } // get extended entry info () function get_extended($post) { //Match the new style more links if ( preg_match('//', $post, $matches) ) { list($main, $extended) = explode($matches[0], $post, 2); } else { $main = $post; $extended = ''; } // Strip leading and trailing whitespace $main = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $main); $extended = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $extended); return array('main' => $main, 'extended' => $extended); } // Retrieves post data given a post ID or post object. // Handles post caching. function &get_post(&$post, $output = OBJECT) { global $post_cache, $wpdb, $blog_id; if ( empty($post) ) { if ( isset($GLOBALS['post']) ) $_post = & $GLOBALS['post']; else $_post = null; } elseif ( is_object($post) ) { if ( 'page' == $post->post_type ) return get_page($post, $output); if ( !isset($post_cache[$blog_id][$post->ID]) ) $post_cache[$blog_id][$post->ID] = &$post; $_post = & $post_cache[$blog_id][$post->ID]; } else { $post = (int) $post; if ( isset($post_cache[$blog_id][$post]) ) $_post = & $post_cache[$blog_id][$post]; elseif ( $_post = wp_cache_get($post, 'pages') ) return get_page($_post, $output); else { $query = "SELECT * FROM $wpdb->posts WHERE ID = " . $post; // LIMIT 1 $_post = & $wpdb->get_row($query); if ( 'page' == $_post->post_type ) return get_page($_post, $output); $post_cache[$blog_id][$post] = & $_post; } } if ( defined('WP_IMPORTING') ) unset($post_cache[$blog_id]); if ( $output == OBJECT ) { return $_post; } elseif ( $output == ARRAY_A ) { return get_object_vars($_post); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_post)); } else { return $_post; } } // Takes a post ID, returns its mime type. function get_post_mime_type($ID = '') { $post = & get_post($ID); if ( is_object($post) ) return $post->post_mime_type; return false; } function get_post_status($ID = '') { $post = get_post($ID); if ( is_object($post) ) { if ( ('attachment' == $post->post_type) && $post->post_parent && ($post->ID != $post->post_parent) ) return get_post_status($post->post_parent); else return $post->post_status; } return false; } function get_post_type($post = false) { global $wpdb, $posts; if ( false == $post ) $post = $posts[0]; elseif ( (int) $post ) $post = get_post($post, OBJECT); if ( is_object($post) ) return $post->post_type; return false; } function get_posts($args) { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('numberposts' => 5, 'offset' => 0, 'category' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' =>'', 'post_type' => 'post', 'post_status' => 'publish', 'post_parent' => 0); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $numberposts = (int) $numberposts; $offset = (int) $offset; $category = (int) $category; $post_parent = (int) $post_parent; $inclusions = ''; if ( !empty($include) ) { $offset = 0; //ignore offset, category, exclude, meta_key, and meta_value, post_parent if using include $category = 0; $exclude = ''; $meta_key = ''; $meta_value = ''; $post_parent = 0; $incposts = preg_split('/[\s,]+/',$include); $numberposts = count($incposts); // only the number of posts included if ( count($incposts) ) { foreach ( $incposts as $incpost ) { if (empty($inclusions)) $inclusions = ' AND ( ID = ' . intval($incpost) . ' '; else $inclusions .= ' OR ID = ' . intval($incpost) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $exclusions = ''; if ( !empty($exclude) ) { $exposts = preg_split('/[\s,]+/',$exclude); if ( count($exposts) ) { foreach ( $exposts as $expost ) { if (empty($exclusions)) $exclusions = ' AND ( ID <> ' . intval($expost) . ' '; else $exclusions .= ' AND ID <> ' . intval($expost) . ' '; } } } if (!empty($exclusions)) $exclusions .= ')'; $query = "SELECT DISTINCT * FROM $wpdb->posts "; $query .= empty( $category ) ? '' : ", $wpdb->post2cat "; $query .= empty( $meta_key ) ? '' : ", $wpdb->postmeta "; $query .= " WHERE 1=1 "; $query .= empty( $post_type ) ? '' : "AND post_type = '$post_type' "; $query .= empty( $post_status ) ? '' : "AND post_status = '$post_status' "; $query .= "$exclusions $inclusions " ; $query .= empty( $category ) ? '' : "AND ($wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $category. ") "; $query .= empty( $post_parent ) ? '' : "AND $wpdb->posts.post_parent = " . $post_parent . " "; $query .= empty( $meta_key ) | empty($meta_value) ? '' : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )"; $query .= $orderby . ' ' . $order; // if ( 0 < $numberposts ) // $query .= " LIMIT " . $offset . ',' . $numberposts; $posts = $wpdb->get_results($query); update_post_caches($posts); return $posts; } // // Post meta functions // function add_post_meta($post_id, $key, $value, $unique = false) { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; if ( $unique ) { if ( $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = '$key' AND post_id = " . $post_id ) ) { return false; } } $post_meta_cache[$blog_id][$post_id][$key][] = $value; $value = maybe_serialize($value); $value = $wpdb->escape($value); $wpdb->query("INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (" . $post_id . ",'$key','$value')"); return true; } function delete_post_meta($post_id, $key, $value = '') { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; if ( empty($value) ) { $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key'"); } else { $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key' AND meta_value = '$value'"); } if ( !$meta_id ) return false; if ( empty($value) ) { $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key'"); unset($post_meta_cache[$blog_id][$post_id][$key]); } else { $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $post_id . " AND meta_key = '$key' AND meta_value = '$value'"); $cache_key = $post_meta_cache[$blog_id][$post_id][$key]; if ($cache_key) foreach ( $cache_key as $index => $data ) if ( $data == $value ) unset($post_meta_cache[$blog_id][$post_id][$key][$index]); } unset($post_meta_cache[$blog_id][$post_id][$key]); return true; } function get_post_meta($post_id, $key, $single = false) { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; if ( isset($post_meta_cache[$blog_id][$post_id][$key]) ) { if ( $single ) { return maybe_unserialize( $post_meta_cache[$blog_id][$post_id][$key][0] ); } else { return maybe_unserialize( $post_meta_cache[$blog_id][$post_id][$key] ); } } if ( !isset($post_meta_cache[$blog_id][$post_id]) ) update_postmeta_cache($post_id); if ( $single ) { if ( isset($post_meta_cache[$blog_id][$post_id][$key][0]) ) return maybe_unserialize($post_meta_cache[$blog_id][$post_id][$key][0]); else return ''; } else { return maybe_unserialize($post_meta_cache[$blog_id][$post_id][$key]); } } function update_post_meta($post_id, $key, $value, $prev_value = '') { global $wpdb, $post_meta_cache, $blog_id; $post_id = (int) $post_id; $original_value = $value; $value = maybe_serialize($value); $value = $wpdb->escape($value); $original_prev = $prev_value; $prev_value = maybe_serialize($prev_value); $prev_value = $wpdb->escape($prev_value); if (! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = '$key' AND post_id = " . $post_id ) ) { return false; } if ( empty($prev_value) ) { $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE meta_key = '$key' AND post_id = " . $post_id ); $cache_key = $post_meta_cache[$blog_id][$post_id][$key]; if ( !empty($cache_key) ) foreach ($cache_key as $index => $data) $post_meta_cache[$blog_id][$post_id][$key][$index] = $original_value; } else { $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE meta_key = '$key' AND post_id = " . $post_id . " AND meta_value = '$prev_value'"); $cache_key = $post_meta_cache[$blog_id][$post_id][$key]; if ( !empty($cache_key) ) foreach ($cache_key as $index => $data) if ( $data == $original_prev ) $post_meta_cache[$blog_id][$post_id][$key][$index] = $original_value; } return true; } function get_post_custom($post_id = 0) { global $id, $post_meta_cache, $wpdb, $blog_id; if ( !$post_id ) $post_id = (int) $id; $post_id = (int) $post_id; if ( !isset($post_meta_cache[$blog_id][$post_id]) ) update_postmeta_cache($post_id); return $post_meta_cache[$blog_id][$post_id]; } function get_post_custom_keys( $post_id = 0 ) { $custom = get_post_custom( $post_id ); if ( !is_array($custom) ) return; if ( $keys = array_keys($custom) ) return $keys; } function get_post_custom_values( $key = '', $post_id = 0 ) { $custom = get_post_custom($post_id); return $custom[$key]; } function wp_delete_post($postid = 0) { global $wpdb, $wp_rewrite; $postid = (int) $postid; if ( !$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $postid ) ) return $post; if ( 'attachment' == $post->post_type ) return wp_delete_attachment($postid); do_action('delete_post', $postid); if ( 'publish' == $post->post_status && 'post' == $post->post_type ) { $categories = wp_get_post_categories($post->ID); if( is_array( $categories ) ) { foreach ( $categories as $cat_id ) { wp_cache_delete($cat_id, 'category'); do_action('edit_category', $cat_id); } } } if ( 'page' == $post->post_type ) $wpdb->query("UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = " . $postid . " AND post_type = 'page'"); $wpdb->query("UPDATE $wpdb->posts SET post_parent = $post->post_parent WHERE post_parent = " . $postid . " AND post_type = 'attachment'"); $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = " . $postid); $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $postid); if ( 'page' == $post->post_type ) { clean_page_cache($postid); $wp_rewrite->flush_rules(); } do_action('deleted_post', $postid); return $post; } function wp_get_post_categories($post_id = 0) { $post_id = (int) $post_id; $cats = &get_the_category($post_id); $cat_ids = array(); foreach ( $cats as $cat ) $cat_ids[] = (int) $cat->cat_ID; return array_unique($cat_ids); } function wp_get_recent_posts($num = 10) { global $wpdb; // Set the limit clause, if we got a limit $num = (int) $num; if ($num) { $limit = "LIMIT $num"; } $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC"; // $limit $result = $wpdb->get_results($sql,ARRAY_A); return $result?$result:array(); } function wp_get_single_post($postid = 0, $mode = OBJECT) { global $wpdb; $postid = (int) $postid; $post = get_post($postid, $mode); // Set categories if($mode == OBJECT) { $post->post_category = wp_get_post_categories($postid); } else { $post['post_category'] = wp_get_post_categories($postid); } return $post; } function wp_insert_post($postarr = array()) { global $wpdb, $wp_rewrite, $allowedtags, $user_ID; if ( is_object($postarr) ) $postarr = get_object_vars($postarr); // export array as variables extract($postarr, EXTR_SKIP); // Are we updating or creating? $update = false; if ( !empty($ID) ) { $update = true; $post = & get_post($ID); $previous_status = $post->post_status; } // Get the basics. if ( empty($no_filter) ) { $post_content = apply_filters('content_save_pre', $post_content); $post_content_filtered = apply_filters('content_filtered_save_pre', $post_content_filtered); $post_excerpt = apply_filters('excerpt_save_pre', $post_excerpt); $post_title = apply_filters('title_save_pre', $post_title); $post_category = apply_filters('category_save_pre', $post_category); $post_status = apply_filters('status_save_pre', $post_status); $post_name = apply_filters('name_save_pre', $post_name); $comment_status = apply_filters('comment_status_pre', $comment_status); $ping_status = apply_filters('ping_status_pre', $ping_status); } if ( ('' == $post_content) && ('' == $post_title) && ('' == $post_excerpt) ) return 0; // Make sure we set a valid category if (0 == count($post_category) || !is_array($post_category)) { $post_category = array(get_option('default_category')); } $post_cat = $post_category[0]; if ( empty($post_author) ) $post_author = $user_ID; if ( empty($post_status) ) $post_status = 'draft'; if ( empty($post_type) ) $post_type = 'post'; // Get the post ID. if ( $update ) $post_ID = (int) $ID; // Create a valid post name. Drafts are allowed to have an empty // post name. if ( empty($post_name) ) { if ( 'draft' != $post_status ) $post_name = sanitize_title($post_title); } else { $post_name = sanitize_title($post_name); } // If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now if (empty($post_date)) { if ( 'draft' != $post_status ) $post_date = current_time('mysql'); } if (empty($post_date_gmt)) { if ( 'draft' != $post_status ) $post_date_gmt = get_gmt_from_date($post_date); } if ( 'publish' == $post_status ) { $now = gmdate('Y-m-d H:i:59'); if ( mysql2date('U', $post_date_gmt) > mysql2date('U', $now) ) $post_status = 'future'; } if ( empty($comment_status) ) { if ( $update ) $comment_status = 'closed'; else $comment_status = get_option('default_comment_status'); } if ( empty($ping_status) ) $ping_status = get_option('default_ping_status'); if ( empty($post_pingback) ) $post_pingback = get_option('default_pingback_flag'); if ( isset($to_ping) ) $to_ping = preg_replace('|\s+|', "\n", $to_ping); else $to_ping = ''; if ( ! isset($pinged) ) $pinged = ''; if ( isset($post_parent) ) $post_parent = (int) $post_parent; else $post_parent = 0; if ( isset($menu_order) ) $menu_order = (int) $menu_order; else $menu_order = 0; if ( !isset($post_password) ) $post_password = ''; if ( 'draft' != $post_status && 'publish' != $post_status ) { $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$post_name' AND post_type = '$post_type' AND ID <> ". $post_ID ." AND post_parent = $post_parent"); if ($post_name_check || in_array($post_name, $wp_rewrite->feeds) ) { $suffix = 2; do { $alt_post_name = $post_name . "-$suffix"; $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$alt_post_name' AND post_type = '$post_type' AND ID <>" . $post_ID . " AND post_parent = $post_parent"); // LIMIT 1 $suffix++; } while ($post_name_check); $post_name = $alt_post_name; } } if ($update) { $wpdb->query( "UPDATE $wpdb->posts SET post_author = '$post_author', post_date = '$post_date', post_date_gmt = '$post_date_gmt', post_content = '$post_content', post_content_filtered = '$post_content_filtered', post_title = '$post_title', post_excerpt = '$post_excerpt', post_status = '$post_status', post_type = '$post_type', comment_status = '$comment_status', ping_status = '$ping_status', post_password = '$post_password', post_name = '$post_name', to_ping = '$to_ping', pinged = '$pinged', post_modified = '".current_time('mysql')."', post_modified_gmt = '".current_time('mysql',1)."', post_parent = '$post_parent', menu_order = '$menu_order' WHERE ID = " . $post_ID ); } else { $wpdb->insert( "INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type) VALUES ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type')", $wpdb->posts, "id"); $post_ID = (int) $wpdb->insert_id; } if ( empty($post_name) && 'draft' != $post_status ) { $post_name = sanitize_title($post_title, $post_ID); $wpdb->query( "UPDATE $wpdb->posts SET post_name = '$post_name' WHERE ID = " . $post_ID ); } wp_set_post_categories($post_ID, $post_category); if ( 'page' == $post_type ) { clean_page_cache($post_ID); $wp_rewrite->flush_rules(); } else { clean_post_cache($post_ID); } // Set GUID if ( ! $update ) $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post_ID) . "' WHERE ID = " . $post_ID); if ( $update) { if ($previous_status != 'publish' && $post_status == 'publish') { // Reset GUID if transitioning to publish. $wpdb->query("UPDATE $wpdb->posts SET guid = '" . get_permalink($post_ID) . "' WHERE ID = " . $post_ID); do_action('private_to_published', $post_ID); } do_action('edit_post', $post_ID); } if ($post_status == 'publish' && $post_type == 'post') { do_action('publish_post', $post_ID); if ( defined('XMLRPC_REQUEST') ) do_action('xmlrpc_publish_post', $post_ID); if ( defined('APP_REQUEST') ) do_action('app_publish_post', $post_ID); if ( !defined('WP_IMPORTING') ) { if ( $post_pingback ) $result = $wpdb->query(" INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (" . $post_ID . ",'_pingme','1') "); $result = $wpdb->query(" INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES (" . $post_ID . ",'_encloseme','1') "); wp_schedule_single_event(time(), 'do_pings'); } } else if ($post_type == 'page') { if ( !empty($page_template) ) if ( ! update_post_meta($post_ID, '_wp_page_template', $page_template)) add_post_meta($post_ID, '_wp_page_template', $page_template, true); if ( $post_status == 'publish' ) do_action('publish_page', $post_ID); } // Always clears the hook in case the post status bounced from future to draft. wp_clear_scheduled_hook('publish_future_post', $post_ID); // Schedule publication. if ( 'future' == $post_status ) wp_schedule_single_event(strtotime($post_date_gmt. ' GMT'), 'publish_future_post', array($post_ID)); do_action('save_post', $post_ID); do_action('wp_insert_post', $post_ID); return $post_ID; } function wp_update_post($postarr = array()) { global $wpdb; if ( is_object($postarr) ) $postarr = get_object_vars($postarr); // First, get all of the original fields $post = wp_get_single_post($postarr['ID'], ARRAY_A); // Escape data pulled from DB. $post = add_magic_quotes($post); // Passed post category list overwrites existing category list if not empty. if ( isset($postarr['post_category']) && is_array($postarr['post_category']) && 0 != count($postarr['post_category']) ) $post_cats = $postarr['post_category']; else $post_cats = $post['post_category']; // Drafts shouldn't be assigned a date unless explicitly done so by the user if ( 'draft' == $post['post_status'] && empty($postarr['edit_date']) && empty($postarr['post_date']) && ('0000-00-00 00:00:00' == $post['post_date']) ) $clear_date = true; else $clear_date = false; // Merge old and new fields with new fields overwriting old ones. $postarr = array_merge($post, $postarr); $postarr['post_category'] = $post_cats; if ( $clear_date ) { $postarr['post_date'] = ''; $postarr['post_date_gmt'] = ''; } if ($postarr['post_type'] == 'attachment') return wp_insert_attachment($postarr); return wp_insert_post($postarr); } function wp_publish_post($post_id) { $post = get_post($post_id); if ( empty($post) ) return; if ( 'publish' == $post->post_status ) return; return wp_update_post(array('post_status' => 'publish', 'ID' => $post_id, 'no_filter' => true)); } function wp_set_post_categories($post_ID = 0, $post_categories = array()) { global $wpdb; $post_ID = (int) $post_ID; // If $post_categories isn't already an array, make it one: if (!is_array($post_categories) || 0 == count($post_categories) || empty($post_categories)) $post_categories = array(get_option('default_category')); $post_categories = array_unique($post_categories); // First the old categories $old_categories = $wpdb->get_col(" SELECT category_id FROM $wpdb->post2cat WHERE post_id = " . $post_ID ); if (!$old_categories) { $old_categories = array(); } else { $old_categories = array_unique($old_categories); } // Delete any? $delete_cats = array_diff($old_categories,$post_categories); if ($delete_cats) { foreach ($delete_cats as $del) { $wpdb->query("DELETE FROM $wpdb->post2cat WHERE category_id = ". (int) $del . " AND post_id = " . $post_ID ); } } // Add any? $add_cats = array_diff($post_categories, $old_categories); if ($add_cats) { foreach ($add_cats as $new_cat) { $new_cat = (int) $new_cat; if ( !empty($new_cat) ) $wpdb->query("INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES (" . $post_ID . "," . $new_cat . ")"); } } // Update category counts. $all_affected_cats = array_unique(array_merge($post_categories, $old_categories)); foreach ( $all_affected_cats as $cat_id ) { $count = (int)$wpdb->get_var("SELECT COUNT(*) FROM $wpdb->post2cat, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->post2cat.post_id AND post_status = 'publish' AND post_type = 'post' AND category_id = " . (int) $cat_id ); $wpdb->query("UPDATE $wpdb->categories SET category_count = " . $count . "WHERE cat_ID = " . (int)$cat_id); clean_category_cache($cat_id); do_action('edit_category', $cat_id); } } // wp_set_post_categories() // // Trackback and ping functions // function add_ping($post_id, $uri) { // Add a URL to those already pung global $wpdb; $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = " . $post_id); $pung = trim($pung); $pung = preg_split('/\s/', $pung); $pung[] = $uri; $new = implode("\n", $pung); $new = apply_filters('add_ping', $new); return $wpdb->query("UPDATE $wpdb->posts SET pinged = '$new' WHERE ID = " . $post_id); } function get_enclosed($post_id) { // Get enclosures already enclosed for a post global $wpdb; $custom_fields = get_post_custom( $post_id ); $pung = array(); if ( !is_array( $custom_fields ) ) return $pung; foreach ( $custom_fields as $key => $val ) { if ( 'enclosure' != $key || !is_array( $val ) ) continue; foreach( $val as $enc ) { $enclosure = split( "\n", $enc ); $pung[] = trim( $enclosure[ 0 ] ); } } $pung = apply_filters('get_enclosed', $pung); return $pung; } function get_pung($post_id) { // Get URLs already pung for a post global $wpdb; $pung = $wpdb->get_var("SELECT pinged FROM $wpdb->posts WHERE ID = " . $post_id); $pung = trim($pung); $pung = preg_split('/\s/', $pung); $pung = apply_filters('get_pung', $pung); return $pung; } function get_to_ping($post_id) { // Get any URLs in the todo list global $wpdb; $to_ping = $wpdb->get_var("SELECT to_ping FROM $wpdb->posts WHERE ID = " . $post_id); $to_ping = trim($to_ping); $to_ping = preg_split('/\s/', $to_ping, -1, PREG_SPLIT_NO_EMPTY); $to_ping = apply_filters('get_to_ping', $to_ping); return $to_ping; } // do trackbacks for a list of urls // accepts a comma-separated list of trackback urls and a post id function trackback_url_list($tb_list, $post_id) { if (!empty($tb_list)) { // get post data $postdata = wp_get_single_post($post_id, ARRAY_A); // import postdata as variables extract($postdata, EXTR_SKIP); // form an excerpt $excerpt = strip_tags($post_excerpt?$post_excerpt:$post_content); if (strlen($excerpt) > 255) { $excerpt = substr($excerpt,0,252) . '...'; } $trackback_urls = explode(',', $tb_list); foreach($trackback_urls as $tb_url) { $tb_url = trim($tb_url); trackback($tb_url, stripslashes($post_title), $excerpt, $post_id); } } } // // Page functions // function get_all_page_ids() { global $wpdb; if ( ! $page_ids = wp_cache_get('all_page_ids', 'pages') ) { $page_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'page'"); wp_cache_add('all_page_ids', $page_ids, 'pages'); } return $page_ids; } // Retrieves page data given a page ID or page object. // Handles page caching. function &get_page(&$page, $output = OBJECT) { global $wpdb, $blog_id; if ( empty($page) ) { if ( isset($GLOBALS['page']) ) { $_page = & $GLOBALS['page']; wp_cache_add($_page->ID, $_page, 'pages'); } else { // shouldn't we just return NULL at this point? ~ Mark $_page = null; } } elseif ( is_object($page) ) { if ( 'post' == $page->post_type ) return get_post($page, $output); wp_cache_add($page->ID, $page, 'pages'); $_page = $page; } else { $page = (int) $page; // first, check the cache if ( ! ( $_page = wp_cache_get($page, 'pages') ) ) { // not in the page cache? if ( isset($GLOBALS['page']->ID) && ($page == $GLOBALS['page']->ID) ) { // for is_page() views // I don't think this code ever gets executed ~ Mark $_page = & $GLOBALS['page']; wp_cache_add($_page->ID, $_page, 'pages'); } elseif ( isset($GLOBALS['post_cache'][$blog_id][$page]) ) { // it's actually a page, and is cached return get_post($page, $output); } else { // it's not in any caches, so off to the DB we go // Why are we using assignment for this query? $_page = & $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID= " . $page); // LIMIT 1 if ( 'post' == $_page->post_type ) return get_post($_page, $output); // Potential issue: we're not checking to see if the post_type = 'page' // So all non-'post' posts will get cached as pages. wp_cache_add($_page->ID, $_page, 'pages'); } } } // at this point, one way or another, $_post contains the page object if ( $output == OBJECT ) { return $_page; } elseif ( $output == ARRAY_A ) { return get_object_vars($_page); } elseif ( $output == ARRAY_N ) { return array_values(get_object_vars($_page)); } else { return $_page; } } function get_page_by_path($page_path, $output = OBJECT) { global $wpdb; $page_path = rawurlencode(urldecode($page_path)); $page_path = str_replace('%2F', '/', $page_path); $page_path = str_replace('%20', ' ', $page_path); $page_paths = '/' . trim($page_path, '/'); $leaf_path = sanitize_title(basename($page_paths)); $page_paths = explode('/', $page_paths); foreach($page_paths as $pathdir) $full_path .= ($pathdir!=''?'/':'') . sanitize_title($pathdir); $pages = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = '$leaf_path' AND post_type='page'"); if ( empty($pages) ) return NULL; foreach ($pages as $page) { $path = '/' . $leaf_path; $curpage = $page; while ($curpage->post_parent != 0) { $curpage = $wpdb->get_row("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = '$curpage->post_parent' and post_type='page'"); $path = '/' . $curpage->post_name . $path; } if ( $path == $full_path ) return get_page($page->ID, $output); } return NULL; } function get_page_by_title($page_title, $output = OBJECT) { global $wpdb; $page_title = $wpdb->escape($page_title); $page = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$page_title' AND post_type='page'"); if ( $page ) return get_page($page, $output); return NULL; } function &get_page_children($page_id, $pages) { global $page_cache, $blog_id; if ( empty($pages) ) $pages = &$page_cache[$blog_id]; $page_list = array(); foreach ( $pages as $page ) { if ( $page->post_parent == $page_id ) { $page_list[] = $page; if ( $children = get_page_children($page->ID, $pages) ) $page_list = array_merge($page_list, $children); } } return $page_list; } //fetches the pages returned as a FLAT list, but arranged in order of their hierarchy, i.e., child parents //immediately follow their parents function get_page_hierarchy($posts, $parent = 0) { $result = array ( ); if ($posts) { foreach ($posts as $post) { if ($post->post_parent == $parent) { $result[$post->ID] = $post->post_name; $children = get_page_hierarchy($posts, $post->ID); $result += $children; //append $children to $result } } } return $result; } function get_page_uri($page_id) { $page = get_page($page_id); $uri = urldecode($page->post_name); // A page cannot be it's own parent. if ( $page->post_parent == $page->ID ) return $uri; while ($page->post_parent != 0) { $page = get_page($page->post_parent); $uri = urldecode($page->post_name) . "/" . $uri; } return $uri; } function &get_pages($args = '') { global $wpdb; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => '', 'authors' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $key = md5( serialize( $r ) ); if ( $cache = wp_cache_get( 'get_pages', 'page' ) ) if ( isset( $cache[ $key ] ) ) return apply_filters('get_pages', $cache[ $key ], $r ); $inclusions = ''; if ( !empty($include) ) { $child_of = 0; //ignore child_of, exclude, meta_key, and meta_value params if using include $exclude = ''; $meta_key = ''; $meta_value = ''; $incpages = preg_split('/[\s,]+/',$include); if ( count($incpages) ) { foreach ( $incpages as $incpage ) { if (empty($inclusions)) $inclusions = ' AND ( ID = ' . intval($incpage) . ' '; else $inclusions .= ' OR ID = ' . intval($incpage) . ' '; } } } if (!empty($inclusions)) $inclusions .= ')'; $exclusions = ''; if ( !empty($exclude) ) { $expages = preg_split('/[\s,]+/',$exclude); if ( count($expages) ) { foreach ( $expages as $expage ) { if (empty($exclusions)) $exclusions = ' AND ( ID <> ' . intval($expage) . ' '; else $exclusions .= ' AND ID <> ' . intval($expage) . ' '; } } } if (!empty($exclusions)) $exclusions .= ')'; $author_query = ''; if (!empty($authors)) { $post_authors = preg_split('/[\s,]+/',$authors); if ( count($post_authors) ) { foreach ( $post_authors as $post_author ) { //Do we have an author id or an author login? if ( 0 == intval($post_author) ) { $post_author = get_userdatabylogin($post_author); if ( empty($post_author) ) continue; if ( empty($post_author->ID) ) continue; $post_author = $post_author->ID; } if ( '' == $author_query ) $author_query = ' post_author = ' . intval($post_author) . ' '; else $author_query .= ' OR post_author = ' . intval($post_author) . ' '; } if ( '' != $author_query ) $author_query = " AND ($author_query)"; } } $query = "SELECT * FROM $wpdb->posts " ; $query .= ( empty( $meta_key ) ? "" : ", $wpdb->postmeta " ) ; $query .= " WHERE (post_type = 'page' AND post_status = 'publish') $exclusions $inclusions " ; $query .= ( empty( $meta_key ) | empty($meta_value) ? "" : " AND ($wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '$meta_key' AND $wpdb->postmeta.meta_value = '$meta_value' )" ) ; $query .= $author_query; $query .= " ORDER BY " . $sort_column . " " . $sort_order ; $pages = $wpdb->get_results($query); $pages = apply_filters('get_pages', $pages, $r); if ( empty($pages) ) return array(); // Update cache. update_page_cache($pages); if ( $child_of || $hierarchical ) $pages = & get_page_children($child_of, $pages); $cache[ $key ] = $pages; wp_cache_set( 'get_pages', $cache, 'page' ); return $pages; } function generate_page_uri_index() { global $wpdb; //get pages in order of hierarchy, i.e. children after parents $posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'page'")); //now reverse it, because we need parents after children for rewrite rules to work properly $posts = array_reverse($posts, true); $page_uris = array(); $page_attachment_uris = array(); if ($posts) { foreach ($posts as $id => $post) { // URL => page name $uri = get_page_uri($id); $attachments = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_parent = " . $id ); if ( $attachments ) { foreach ( $attachments as $attachment ) { $attach_uri = get_page_uri($attachment->ID); $page_attachment_uris[$attach_uri] = $attachment->ID; } } $page_uris[$uri] = $id; } delete_option('page_uris'); update_option('page_uris', $page_uris); if ( $page_attachment_uris ) { delete_option('page_attachment_uris'); update_option('page_attachment_uris', $page_attachment_uris); } } } // // Attachment functions // function is_local_attachment($url) { if (strpos($url, get_bloginfo('url')) == false) return false; if (strpos($url, get_bloginfo('url') . '/?attachment_id=') != false) return true; if ( $id = url_to_postid($url) ) { $post = & get_post($id); if ( 'attachment' == $post->post_type ) return true; } return false; } function wp_insert_attachment($object, $file = false, $post_parent = 0) { global $wpdb, $user_ID; if ( is_object($object) ) $object = get_object_vars($object); // Export array as variables extract($object, EXTR_SKIP); // Get the basics. $post_content = apply_filters('content_save_pre', $post_content); $post_content_filtered = apply_filters('content_filtered_save_pre', $post_content_filtered); $post_excerpt = apply_filters('excerpt_save_pre', $post_excerpt); $post_title = apply_filters('title_save_pre', $post_title); $post_category = apply_filters('category_save_pre', $post_category); $post_name = apply_filters('name_save_pre', $post_name); $comment_status = apply_filters('comment_status_pre', $comment_status); $ping_status = apply_filters('ping_status_pre', $ping_status); $post_mime_type = apply_filters('post_mime_type_pre', $post_mime_type); // Make sure we set a valid category if (0 == count($post_category) || !is_array($post_category)) { $post_category = array(get_option('default_category')); } $post_cat = $post_category[0]; if ( empty($post_author) ) $post_author = $user_ID; $post_type = 'attachment'; $post_status = 'inherit'; // Are we updating or creating? $update = false; if ( !empty($ID) ) { $update = true; $post_ID = (int) $ID; } // Create a valid post name. if ( empty($post_name) ) $post_name = sanitize_title($post_title); else $post_name = sanitize_title($post_name); if ($update) { $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '$post_name' AND post_status = 'inherit' AND ID <> " . $post_ID); // LIMIT 1 if ($post_name_check) { $suffix = 2; while ($post_name_check) { $alt_post_name = $post_name . "-$suffix"; $post_name_check = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = ' $alt_post_name' AND post_status = 'inherit' AND ID <> " . $post_ID . " AND post_parent = " . $post_parent); // LIMIT 1 $suffix++; } $post_name = $alt_post_name; } } if (empty($post_date)) $post_date = current_time('mysql'); if (empty($post_date_gmt)) $post_date_gmt = current_time('mysql', 1); if ( empty($comment_status) ) { if ( $update ) $comment_status = 'closed'; else $comment_status = get_option('default_comment_status'); } if ( empty($ping_status) ) $ping_status = get_option('default_ping_status'); if ( empty($post_pingback) ) $post_pingback = get_option('default_pingback_flag'); if ( isset($to_ping) ) $to_ping = preg_replace('|\s+|', "\n", $to_ping); else $to_ping = ''; if ( isset($post_parent) ) $post_parent = (int) $post_parent; else $post_parent = 0; if ( isset($menu_order) ) $menu_order = (int) $menu_order; else $menu_order = 0; if ( !isset($post_password) ) $post_password = ''; if ( isset($to_ping) ) $to_ping = preg_replace('|\s+|', "\n", $to_ping); else $to_ping = ''; if ( ! isset($pinged) ) $pinged = ''; if ($update) { $wpdb->query( "UPDATE $wpdb->posts SET post_author = '$post_author', post_date = '$post_date', post_date_gmt = '$post_date_gmt', post_content = '$post_content', post_content_filtered = '$post_content_filtered', post_title = '$post_title', post_excerpt = '$post_excerpt', post_status = '$post_status', post_type = '$post_type', comment_status = '$comment_status', ping_status = '$ping_status', post_password = '$post_password', post_name = '$post_name', to_ping = '$to_ping', pinged = '$pinged', post_modified = '".current_time('mysql')."', post_modified_gmt = '".current_time('mysql',1)."', post_parent = '$post_parent', menu_order = '$menu_order', post_mime_type = '$post_mime_type', guid = '$guid' WHERE ID = $post_ID"); } else { $wpdb->insert( "INSERT INTO $wpdb->posts (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt, post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, guid) VALUES ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type', '$guid')",$wpdb->posts , "id"); $post_ID = (int) $wpdb->insert_id; } if ( empty($post_name) ) { $post_name = sanitize_title($post_title, $post_ID); $wpdb->query( "UPDATE $wpdb->posts SET post_name = '$post_name' WHERE ID = " . $post_ID ); } wp_set_post_categories($post_ID, $post_category); if ( $file ) update_attached_file( $post_ID, $file ); clean_post_cache($post_ID); if ( $update) { do_action('edit_attachment', $post_ID); } else { do_action('add_attachment', $post_ID); } return $post_ID; } function wp_delete_attachment($postid) { global $wpdb; $postid = (int) $postid; if ( !$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID = " . $postid) ) return $post; if ( 'attachment' != $post->post_type ) return false; $meta = wp_get_attachment_metadata( $postid ); $file = get_attached_file( $postid ); $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_post_ID = " . $postid); $wpdb->query("DELETE FROM $wpdb->post2cat WHERE post_id = " . $postid); $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = " . $postid); if ( ! empty($meta['thumb']) ) { // Don't delete the thumb if another attachment uses it if (! $wpdb->get_row("SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%".$wpdb->escape($meta['thumb'])."%' AND post_id <> " . $postid )) { $thumbfile = str_replace(basename($file), $meta['thumb'], $file); $thumbfile = apply_filters('wp_delete_file', $thumbfile); @ unlink($thumbfile); } } $file = apply_filters('wp_delete_file', $file); if ( ! empty($file) ) @ unlink($file); do_action('delete_attachment', $postid); return $post; } function wp_get_attachment_metadata( $post_id, $unfiltered = false ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; $data = get_post_meta( $post->ID, '_wp_attachment_metadata', true ); if ( $unfiltered ) return $data; return apply_filters( 'wp_get_attachment_metadata', $data, $post->ID ); } function wp_update_attachment_metadata( $post_id, $data ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; $old_data = wp_get_attachment_metadata( $post->ID, true ); $data = apply_filters( 'wp_update_attachment_metadata', $data, $post->ID ); if ( $old_data ) return update_post_meta( $post->ID, '_wp_attachment_metadata', $data, $old_data ); else return add_post_meta( $post->ID, '_wp_attachment_metadata', $data ); } function wp_get_attachment_url( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; $url = get_the_guid( $post->ID ); if ( 'attachment' != $post->post_type || !$url ) return false; return apply_filters( 'wp_get_attachment_url', $url, $post->ID ); } function wp_get_attachment_thumb_file( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; if ( !$imagedata = wp_get_attachment_metadata( $post->ID ) ) return false; $file = get_attached_file( $post->ID ); if ( !empty($imagedata['thumb']) && ($thumbfile = str_replace(basename($file), $imagedata['thumb'], $file)) && file_exists($thumbfile) ) return apply_filters( 'wp_get_attachment_thumb_file', $thumbfile, $post->ID ); return false; } function wp_get_attachment_thumb_url( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; if ( !$url = wp_get_attachment_url( $post->ID ) ) return false; if ( !$thumb = wp_get_attachment_thumb_file( $post->ID ) ) return false; $url = str_replace(basename($url), basename($thumb), $url); return apply_filters( 'wp_get_attachment_thumb_url', $url, $post->ID ); } function wp_attachment_is_image( $post_id = 0 ) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; if ( !$file = get_attached_file( $post->ID ) ) return false; $ext = preg_match('/\.([^.]+)$/', $file, $matches) ? strtolower($matches[1]) : false; $image_exts = array('jpg', 'jpeg', 'gif', 'png'); if ( 'image/' == substr($post->post_mime_type, 0, 6) || $ext && 'import' == $post->post_mime_type && in_array($ext, $image_exts) ) return true; return false; } function wp_mime_type_icon( $mime = 0 ) { $post_id = 0; if ( is_numeric($mime) ) { $mime = (int) $mime; if ( !$post =& get_post( $mime ) ) return false; $post_id = (int) $post->ID; $mime = $post->post_mime_type; } if ( empty($mime) ) return false; $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); $icon_dir_uri = apply_filters( 'icon_dir_uri', get_template_directory_uri() . '/images' ); $types = array( substr($mime, 0, strpos($mime, '/')), substr($mime, strpos($mime, '/') + 1), str_replace('/', '_', $mime) ); $exts = array('jpg', 'gif', 'png'); $src = false; foreach ( $types as $type ) { foreach ( $exts as $ext ) { $src_file = "$icon_dir/$type.$ext"; if ( file_exists($src_file) ) { $src = "$icon_dir_uri/$type.$ext"; break 2; } } } return apply_filters( 'wp_mime_type_icon', $src, $mime, $post_id ); // Last arg is 0 if function pass mime type. } function wp_check_for_changed_slugs($post_id) { if ( !strlen($_POST['wp-old-slug']) ) return $post_id; $post = &get_post($post_id); // we're only concerned with published posts if ( $post->post_status != 'publish' || $post->post_type != 'post' ) return $post_id; // only bother if the slug has changed if ( $post->post_name == $_POST['wp-old-slug'] ) return $post_id; $old_slugs = (array) get_post_meta($post_id, '_wp_old_slug'); // if we haven't added this old slug before, add it now if ( !count($old_slugs) || !in_array($_POST['wp-old-slug'], $old_slugs) ) add_post_meta($post_id, '_wp_old_slug', $_POST['wp-old-slug']); // if the new slug was used previously, delete it from the list if ( in_array($post->post_name, $old_slugs) ) delete_post_meta($post_id, '_wp_old_slug', $post->post_name); return $post_id; } /** * This function provides a standardized way to appropriately select on * the post_status of posts/pages. The function will return a piece of * SQL code that can be added to a WHERE clause; this SQL is constructed * to allow all published posts, and all private posts to which the user * has access. * * @param string $post_type currently only supports 'post' or 'page'. * @return string SQL code that can be added to a where clause. */ function get_private_posts_cap_sql($post_type) { global $user_ID; $cap = ''; // Private posts if ($post_type == 'post') { $cap = 'read_private_posts'; // Private pages } elseif ($post_type == 'page') { $cap = 'read_private_pages'; // Dunno what it is, maybe plugins have their own post type? } else { $cap = apply_filters('pub_priv_sql_capability', $cap); if (empty($cap)) { // We don't know what it is, filters don't change anything, // so set the SQL up to return nothing. return '1 = 0'; } } $sql = '(post_status = \'publish\''; if (current_user_can($cap)) { // Does the user have the capability to view private posts? Guess so. $sql .= ' OR post_status = \'private\''; } elseif (is_user_logged_in()) { // Users can view their own private posts. $sql .= ' OR post_status = \'private\' AND post_author = \'' . $user_ID . '\''; } $sql .= ')'; return $sql; } ?>?wordpress/wp-includes/.svn/text-base/post-template.php.svn-base1 0 ) { $title = apply_filters('the_title', $before . $title . $after, $before, $after); if ( $echo ) echo $title; else return $title; } } function get_the_title($id = 0) { $post = &get_post($id); $title = $post->post_title; if ( !empty($post->post_password) ) $title = sprintf(__('Protected: %s'), $title); else if ( 'private' == $post->post_status ) $title = sprintf(__('Private: %s'), $title); return $title; } function the_guid( $id = 0 ) { echo get_the_guid($id); } function get_the_guid( $id = 0 ) { $post = &get_post($id); return apply_filters('get_the_guid', $post->guid); } function the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { $content = get_the_content($more_link_text, $stripteaser, $more_file); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); echo $content; } function get_the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') { global $id, $post, $more, $single, $withcomments, $page, $pages, $multipage, $numpages; global $preview; global $pagenow; $output = ''; if ( !empty($post->post_password) ) { // if there's a password if ( stripslashes($_COOKIE['wp-postpass_'.COOKIEHASH]) != $post->post_password ) { // and it doesn't match the cookie $output = get_the_password_form(); return $output; } } if ( $more_file != '' ) $file = $more_file; else $file = $pagenow; //$_SERVER['PHP_SELF']; if ( $page > count($pages) ) // if the requested page doesn't exist $page = count($pages); // give them the highest numbered page that DOES exist $content = $pages[$page-1]; if ( preg_match('//', $content, $matches) ) { $content = explode($matches[0], $content, 2); if ( !empty($matches[1]) && !empty($more_link_text) ) $more_link_text = strip_tags(wp_kses_no_null(trim($matches[1]))); } else { $content = array($content); } if ( (false != strpos($post->post_content, '') && ((!$multipage) || ($page==1))) ) $stripteaser = 1; $teaser = $content[0]; if ( ($more) && ($stripteaser) ) $teaser = ''; $output .= $teaser; if ( count($content) > 1 ) { if ( $more ) { $output .= ''.$content[1]; } else { $output = balanceTags($output); if ( ! empty($more_link_text) ) $output .= ' $more_link_text"; } } if ( $preview ) // preview fix for javascript bug with foreign languages $output = preg_replace('/\%u([0-9A-F]{4,4})/e', "'&#'.base_convert('\\1',16,10).';'", $output); return $output; } function the_excerpt() { echo apply_filters('the_excerpt', get_the_excerpt()); } function get_the_excerpt($fakeit = true) { global $id, $post; $output = ''; $output = $post->post_excerpt; if ( !empty($post->post_password) ) { // if there's a password if ( $_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password ) { // and it doesn't match the cookie $output = __('There is no excerpt because this is a protected post.'); return $output; } } return apply_filters('get_the_excerpt', $output); } function wp_link_pages($args = '') { global $post; if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('before' => '

    ' . __('Pages:'), 'after' => '

    ', 'next_or_number' => 'number', 'nextpagelink' => __('Next page'), 'previouspagelink' => __('Previous page'), 'pagelink' => '%', 'more_file' => '', 'echo' => 1); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); global $id, $page, $numpages, $multipage, $more, $pagenow; if ( $more_file != '' ) $file = $more_file; else $file = $pagenow; $output = ''; if ( $multipage ) { if ( 'number' == $next_or_number ) { $output .= $before; for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) { $j = str_replace('%',"$i",$pagelink); $output .= ' '; if ( ($i != $page) || ((!$more) && ($page==1)) ) { if ( 1 == $i ) { $output .= ''; } else { if ( '' == get_option('permalink_structure') || 'draft' == $post->post_status ) $output .= ''; else $output .= ''; } } $output .= $j; if ( ($i != $page) || ((!$more) && ($page==1)) ) $output .= ''; } $output .= $after; } else { if ( $more ) { $output .= $before; $i = $page - 1; if ( $i && $more ) { if ( 1 == $i ) { $output .= '' . $previouspagelink . ''; } else { if ( '' == get_option('permalink_structure') || 'draft' == $post->post_status ) $output .= '' . $previouspagelink . ''; else $output .= '' . $previouspagelink . ''; } } $i = $page + 1; if ( $i <= $numpages && $more ) { if ( 1 == $i ) { $output .= '' . $nextpagelink . ''; } else { if ( '' == get_option('permalink_structure') || 'draft' == $post->post_status ) $output .= '' . $nextpagelink . ''; else $output .= '' . $nextpagelink . ''; } } $output .= $after; } } } if ( $echo ) echo $output; return $output; } // // Post-meta: Custom per-post fields. // function post_custom( $key = '' ) { $custom = get_post_custom(); if ( 1 == count($custom[$key]) ) return $custom[$key][0]; else return $custom[$key]; } // this will probably change at some point... function the_meta() { global $id; if ( $keys = get_post_custom_keys() ) { echo "\n"; } } // // Pages // function wp_dropdown_pages($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('depth' => 0, 'child_of' => 0, 'selected' => 0, 'echo' => 1, 'name' => 'page_id', 'show_option_none' => ''); $r = array_merge($defaults, $r); extract($r, EXTR_SKIP); $pages = get_pages($r); $output = ''; if ( ! empty($pages) ) { $output = "\n"; } $output = apply_filters('wp_dropdown_pages', $output); if ( $echo ) echo $output; return $output; } function wp_list_pages($args = '') { if ( is_array($args) ) $r = &$args; else parse_str($args, $r); $defaults = array('depth' => 0, 'show_date' => '', 'date_format' => get_option('date_format'), 'child_of' => 0, 'exclude' => '', 'title_li' => __('Pages'), 'echo' => 1, 'authors' => '', 'sort_column' => 'menu_order, post_title'); $r = array_merge($defaults, $r); $output = ''; $current_page = 0; // sanitize, mostly to keep spaces out $r['exclude'] = preg_replace('[^0-9,]', '', $r['exclude']); // Allow plugins to filter an array of excluded pages $r['exclude'] = implode(',', apply_filters('wp_list_pages_excludes', explode(',', $r['exclude']))); // Query pages. $pages = get_pages($r); if ( !empty($pages) ) { if ( $r['title_li'] ) $output .= ''; } $output = apply_filters('wp_list_pages', $output); if ( $r['echo'] ) echo $output; else return $output; } // // Page helpers // function walk_page_tree() { $walker = new Walker_Page; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } function walk_page_dropdown_tree() { $walker = new Walker_PageDropdown; $args = func_get_args(); return call_user_func_array(array(&$walker, 'walk'), $args); } // // Attachments // function the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { echo get_the_attachment_link($id, $fullsize, $max_dims); } function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { $id = (int) $id; $_post = & get_post($id); if ( ('attachment' != $_post->post_type) || !$url = wp_get_attachment_url($_post->ID) ) return __('Missing Attachment'); $post_title = attribute_escape($_post->post_title); $innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims); return "$innerHTML"; } function get_attachment_icon_src( $id = 0, $fullsize = false ) { $id = (int) $id; if ( !$post = & get_post($id) ) return false; $imagedata = wp_get_attachment_metadata( $post->ID ); $file = get_attached_file( $post->ID ); if ( !$fullsize && $thumbfile = wp_get_attachment_thumb_file( $post->ID ) ) { // We have a thumbnail desired, specified and existing $src = wp_get_attachment_thumb_url( $post->ID ); $src_file = $thumbfile; $class = 'attachmentthumb'; } elseif ( wp_attachment_is_image( $post->ID ) ) { // We have an image without a thumbnail $src = wp_get_attachment_url( $post->ID ); $src_file = & $file; $class = 'attachmentimage'; } elseif ( $src = wp_mime_type_icon( $post->ID ) ) { // No thumb, no image. We'll look for a mime-related icon instead. $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); $src_file = $icon_dir . '/' . basename($src); } if ( !isset($src) || !$src ) return false; return array($src, $src_file); } function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) { $id = (int) $id; if ( !$post = & get_post($id) ) return false; if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) ) return false; list($src, $src_file) = $src; // Do we need to constrain the image? if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) { $imagesize = getimagesize($src_file); if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) { $actual_aspect = $imagesize[0] / $imagesize[1]; $desired_aspect = $max_dims[0] / $max_dims[1]; if ( $actual_aspect >= $desired_aspect ) { $height = $actual_aspect * $max_dims[0]; $constraint = "width='{$max_dims[0]}' "; $post->iconsize = array($max_dims[0], $height); } else { $width = $max_dims[1] / $actual_aspect; $constraint = "height='{$max_dims[1]}' "; $post->iconsize = array($width, $max_dims[1]); } } else { $post->iconsize = array($imagesize[0], $imagesize[1]); } } $post_title = attribute_escape($post->post_title); $icon = "$post_title"; return apply_filters( 'attachment_icon', $icon, $post->ID ); } function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) { $id = (int) $id; if ( !$post = & get_post($id) ) return false; if ( $innerHTML = get_attachment_icon($post->ID, $fullsize, $max_dims)) return $innerHTML; $innerHTML = attribute_escape($post->post_title); return apply_filters('attachment_innerHTML', $innerHTML, $post->ID); } function prepend_attachment($content) { $p = '

    '; $p .= get_the_attachment_link(false, true, array(400, 300)); $p .= '

    '; $p = apply_filters('prepend_attachment', $p); return "$p\n$content"; } // // Misc // function get_the_password_form() { $output = '

    ' . __("This post is password protected. To view it please enter your password below:") . '

    '; return $output; } ?> 7wordpress/wp-includes/.svn/text-base/query.php.svn-baseget($var); } function set_query_var($var, $value) { global $wp_query; return $wp_query->set($var, $value); } function &query_posts($query) { unset($GLOBALS['wp_query']); $GLOBALS['wp_query'] =& new WP_Query(); return $GLOBALS['wp_query']->query($query); } /* * Query type checks. */ function is_admin () { global $wp_query; return ($wp_query->is_admin || (strpos($_SERVER['REQUEST_URI'], 'wp-admin/') != false)); } function is_archive () { global $wp_query; return $wp_query->is_archive; } function is_attachment () { global $wp_query; return $wp_query->is_attachment; } function is_author ($author = '') { global $wp_query; if ( !$wp_query->is_author ) return false; if ( empty($author) ) return true; $author_obj = $wp_query->get_queried_object(); if ( $author == $author_obj->ID ) return true; elseif ( $author == $author_obj->nickname ) return true; elseif ( $author == $author_obj->user_nicename ) return true; return false; } function is_category ($category = '') { global $wp_query; if ( !$wp_query->is_category ) return false; if ( empty($category) ) return true; $cat_obj = $wp_query->get_queried_object(); if ( $category == $cat_obj->cat_ID ) return true; else if ( $category == $cat_obj->cat_name ) return true; elseif ( $category == $cat_obj->category_nicename ) return true; return false; } function is_comments_popup () { global $wp_query; return $wp_query->is_comments_popup; } function is_date () { global $wp_query; return $wp_query->is_date; } function is_day () { global $wp_query; return $wp_query->is_day; } function is_feed () { global $wp_query; return $wp_query->is_feed; } function is_home () { global $wp_query; return $wp_query->is_home; } function is_month () { global $wp_query; return $wp_query->is_month; } function is_page ($page = '') { global $wp_query; if ( !$wp_query->is_page ) return false; if ( empty($page) ) return true; $page_obj = $wp_query->get_queried_object(); if ( $page == $page_obj->ID ) return true; elseif ( $page == $page_obj->post_title ) return true; else if ( $page == $page_obj->post_name ) return true; return false; } function is_paged () { global $wp_query; return $wp_query->is_paged; } function is_plugin_page() { global $plugin_page; if ( isset($plugin_page) ) return true; return false; } function is_preview() { global $wp_query; return $wp_query->is_preview; } function is_robots() { global $wp_query; return $wp_query->is_robots; } function is_search () { global $wp_query; return $wp_query->is_search; } function is_single ($post = '') { global $wp_query; if ( !$wp_query->is_single ) return false; if ( empty( $post) ) return true; $post_obj = $wp_query->get_queried_object(); if ( $post == $post_obj->ID ) return true; elseif ( $post == $post_obj->post_title ) return true; elseif ( $post == $post_obj->post_name ) return true; return false; } function is_singular() { global $wp_query; return $wp_query->is_singular; } function is_time () { global $wp_query; return $wp_query->is_time; } function is_trackback () { global $wp_query; return $wp_query->is_trackback; } function is_year () { global $wp_query; return $wp_query->is_year; } function is_404 () { global $wp_query; return $wp_query->is_404; } /* * The Loop. Post loop control. */ function have_posts() { global $wp_query; return $wp_query->have_posts(); } function in_the_loop() { global $wp_query; return $wp_query->in_the_loop; } function rewind_posts() { global $wp_query; return $wp_query->rewind_posts(); } function the_post() { global $wp_query; $wp_query->the_post(); } /* * Comments loop. */ function have_comments() { global $wp_query; return $wp_query->have_comments(); } function the_comment() { global $wp_query; return $wp_query->the_comment(); } /* * WP_Query */ class WP_Query { var $query; var $query_vars = array(); var $queried_object; var $queried_object_id; var $request; var $posts; var $post_count = 0; var $current_post = -1; var $in_the_loop = false; var $post; var $comments; var $comment_count = 0; var $current_comment = -1; var $comment; var $found_posts = 0; var $max_num_pages = 0; var $is_single = false; var $is_preview = false; var $is_page = false; var $is_archive = false; var $is_date = false; var $is_year = false; var $is_month = false; var $is_day = false; var $is_time = false; var $is_author = false; var $is_category = false; var $is_search = false; var $is_feed = false; var $is_comment_feed = false; var $is_trackback = false; var $is_home = false; var $is_404 = false; var $is_comments_popup = false; var $is_admin = false; var $is_attachment = false; var $is_singular = false; var $is_robots = false; var $is_posts_page = false; function init_query_flags() { $this->is_single = false; $this->is_page = false; $this->is_archive = false; $this->is_date = false; $this->is_year = false; $this->is_month = false; $this->is_day = false; $this->is_time = false; $this->is_author = false; $this->is_category = false; $this->is_search = false; $this->is_feed = false; $this->is_comment_feed = false; $this->is_trackback = false; $this->is_home = false; $this->is_404 = false; $this->is_paged = false; $this->is_admin = false; $this->is_attachment = false; $this->is_singular = false; $this->is_robots = false; $this->is_posts_page = false; } function init () { unset($this->posts); unset($this->query); $this->query_vars = array(); unset($this->queried_object); unset($this->queried_object_id); $this->post_count = 0; $this->current_post = -1; $this->in_the_loop = false; $this->init_query_flags(); } // Reparse the query vars. function parse_query_vars() { $this->parse_query(''); } function fill_query_vars($array) { $keys = array( 'error' , 'm' , 'p' , 'subpost' , 'subpost_id' , 'attachment' , 'attachment_id' , 'name' , 'hour' , 'static' , 'pagename' , 'page_id' , 'second' , 'minute' , 'hour' , 'day' , 'monthnum' , 'year' , 'w' , 'category_name' , 'author_name' , 'feed' , 'tb' , 'paged' , 'comments_popup' , 'preview' ); foreach ($keys as $key) { if ( !isset($array[$key])) $array[$key] = ''; } return $array; } // Parse a query string and set query type booleans. function parse_query ($query) { if ( !empty($query) || !isset($this->query) ) { $this->init(); if ( is_array($query) ) $this->query_vars = $query; else parse_str($query, $this->query_vars); $this->query = $query; } $this->query_vars = $this->fill_query_vars($this->query_vars); $qv = &$this->query_vars; if ( ! empty($qv['robots']) ) $this->is_robots = true; $qv['p'] = (int) $qv['p']; $qv['page_id'] = (int) $qv['page_id']; $qv['year'] = (int) $qv['year']; $qv['monthnum'] = (int) $qv['monthnum']; $qv['day'] = (int) $qv['day']; $qv['w'] = (int) $qv['w']; $qv['m'] = (int) $qv['m']; if ( '' != $qv['hour'] ) $qv['hour'] = (int) $qv['hour']; if ( '' != $qv['minute'] ) $qv['minute'] = (int) $qv['minute']; if ( '' != $qv['second'] ) $qv['second'] = (int) $qv['second']; // Compat. Map subpost to attachment. if ( '' != $qv['subpost'] ) $qv['attachment'] = $qv['subpost']; if ( '' != $qv['subpost_id'] ) $qv['attachment_id'] = $qv['subpost_id']; $qv['attachment_id'] = (int) $qv['attachment_id']; if ( ('' != $qv['attachment']) || !empty($qv['attachment_id']) ) { $this->is_single = true; $this->is_attachment = true; } elseif ( '' != $qv['name'] ) { $this->is_single = true; } elseif ( $qv['p'] ) { $this->is_single = true; } elseif ( ('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day']) ) { // If year, month, day, hour, minute, and second are set, a single // post is being queried. $this->is_single = true; } elseif ( '' != $qv['static'] || '' != $qv['pagename'] || !empty($qv['page_id']) ) { $this->is_page = true; $this->is_single = false; } elseif ( !empty($qv['s']) ) { $this->is_search = true; } else { // Look for archive queries. Dates, categories, authors. if ( '' != $qv['second'] ) { $this->is_time = true; $this->is_date = true; } if ( '' != $qv['minute'] ) { $this->is_time = true; $this->is_date = true; } if ( '' != $qv['hour'] ) { $this->is_time = true; $this->is_date = true; } if ( $qv['day'] ) { if (! $this->is_date) { $this->is_day = true; $this->is_date = true; } } if ( $qv['monthnum'] ) { if (! $this->is_date) { $this->is_month = true; $this->is_date = true; } } if ( $qv['year'] ) { if (! $this->is_date) { $this->is_year = true; $this->is_date = true; } } if ( $qv['m'] ) { $this->is_date = true; if (strlen($qv['m']) > 9) { $this->is_time = true; } else if (strlen($qv['m']) > 7) { $this->is_day = true; } else if (strlen($qv['m']) > 5) { $this->is_month = true; } else { $this->is_year = true; } } if ('' != $qv['w']) { $this->is_date = true; } if ( empty($qv['cat']) || ($qv['cat'] == '0') ) { $this->is_category = false; } else { if (strpos($qv['cat'], '-') != false) { $this->is_category = false; } else { $this->is_category = true; } } if ( '' != $qv['category_name'] ) { $this->is_category = true; } if ( empty($qv['author']) || ($qv['author'] == '0') ) { $this->is_author = false; } else { $this->is_author = true; } if ( '' != $qv['author_name'] ) { $this->is_author = true; } if ( ($this->is_date || $this->is_author || $this->is_category) ) $this->is_archive = true; } if ( '' != $qv['feed'] ) $this->is_feed = true; if ( '' != $qv['tb'] ) $this->is_trackback = true; if ( '' != $qv['paged'] ) $this->is_paged = true; if ( '' != $qv['comments_popup'] ) $this->is_comments_popup = true; // if we're previewing inside the write screen if ('' != $qv['preview']) $this->is_preview = true; if ( strpos($_SERVER['PHP_SELF'], 'wp-admin/') != false ) $this->is_admin = true; if ( false != strpos($qv['feed'], 'comments-') ) { $qv['feed'] = str_replace('comments-', '', $qv['feed']); $qv['withcomments'] = 1; } $this->is_singular = $this->is_single || $this->is_page || $this->is_attachment; if ( $this->is_feed && ( !empty($qv['withcomments']) || ( empty($qv['withoutcomments']) && $this->is_singular ) ) ) $this->is_comment_feed = true; if ( !( $this->is_singular || $this->is_archive || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup ) ) $this->is_home = true; // Correct is_* for page_on_front and page_for_posts if ( $this->is_home && ( empty($this->query) || $qv['preview'] == 'true' ) && 'page' == get_option('show_on_front') && get_option('page_on_front') ) { $this->is_page = true; $this->is_home = false; $qv['page_id'] = get_option('page_on_front'); } if ( '' != $qv['pagename'] ) { $this->queried_object =& get_page_by_path($qv['pagename']); if ( !empty($this->queried_object) ) $this->queried_object_id = (int) $this->queried_object->ID; else unset($this->queried_object); if ( 'page' == get_option('show_on_front') && isset($this->queried_object_id) && $this->queried_object_id == get_option('page_for_posts') ) { $this->is_page = false; $this->is_home = true; $this->is_posts_page = true; } } if ( $qv['page_id'] ) { if ( 'page' == get_option('show_on_front') && $qv['page_id'] == get_option('page_for_posts') ) { $this->is_page = false; $this->is_home = true; $this->is_posts_page = true; } } if ( !empty($qv['post_type']) ) $qv['post_type'] = sanitize_user($qv['post_type'], true); if ( !empty($qv['post_status']) ) $qv['post_status'] = sanitize_user($qv['post_status'], true); if ( $this->is_posts_page && !$qv['withcomments'] ) $this->is_comment_feed = false; $this->is_singular = $this->is_single || $this->is_page || $this->is_attachment; // Done correcting is_* for page_on_front and page_for_posts if ('404' == $qv['error']) $this->set_404(); if ( !empty($query) ) do_action_ref_array('parse_query', array(&$this)); } function set_404() { $is_feed = $this->is_feed; $this->init_query_flags(); $this->is_404 = true; $this->is_feed = $is_feed; } function get($query_var) { if (isset($this->query_vars[$query_var])) { return $this->query_vars[$query_var]; } return ''; } function set($query_var, $value) { $this->query_vars[$query_var] = $value; } function &get_posts() { global $wpdb, $pagenow, $user_ID; do_action_ref_array('pre_get_posts', array(&$this)); // Shorthand. $q = &$this->query_vars; $q = $this->fill_query_vars($q); // First let's clear some variables $distinct = ''; $whichcat = ''; $whichauthor = ''; $whichpage = ''; $result = ''; $where = ''; $limits = ''; $join = ''; $search = ''; $groupby = ''; if ( !isset($q['post_type']) ) $q['post_type'] = 'post'; $post_type = $q['post_type']; if ( !isset($q['posts_per_page']) || $q['posts_per_page'] == 0 ) $q['posts_per_page'] = get_option('posts_per_page'); if ( isset($q['showposts']) && $q['showposts'] ) { $q['showposts'] = (int) $q['showposts']; $q['posts_per_page'] = $q['showposts']; } if ( (isset($q['posts_per_archive_page']) && $q['posts_per_archive_page'] != 0) && ($this->is_archive || $this->is_search) ) $q['posts_per_page'] = $q['posts_per_archive_page']; if ( !isset($q['nopaging']) ) { if ($q['posts_per_page'] == -1) { $q['nopaging'] = true; } else { $q['nopaging'] = false; } } if ( $this->is_feed ) { $q['posts_per_page'] = get_option('posts_per_rss'); $q['nopaging'] = false; } $q['posts_per_page'] = (int) $q['posts_per_page']; if ( $q['posts_per_page'] < -1 ) $q['posts_per_page'] = abs($q['posts_per_page']); else if ( $q['posts_per_page'] == 0 ) $q['posts_per_page'] = 1; if ( $this->is_home && (empty($this->query) || $q['preview'] == 'true') && ( 'page' == get_option('show_on_front') ) && get_option('page_on_front') ) { $this->is_page = true; $this->is_home = false; $q['page_id'] = get_option('page_on_front'); } if (isset($q['page'])) { $q['page'] = trim($q['page'], '/'); $q['page'] = (int) $q['page']; $q['page'] = abs($q['page']); } $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); $full_add = $add_hours * 60 + $add_minutes; $wp_posts_post_date_field = " dateadd('minute'," . $full_add . ", stringdate(post_date)) "; // If a month is specified in the querystring, load that month if ( $q['m'] ) { $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']); $where .= ' AND YEAR(post_date)=' . substr($q['m'], 0, 4); if (strlen($q['m'])>5) $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2); if (strlen($q['m'])>7) $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2); if (strlen($q['m'])>9) $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2); if (strlen($q['m'])>11) $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2); if (strlen($q['m'])>13) $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2); } if ( '' != $q['hour'] ) $where .= " AND HOUR(post_date)='" . $q['hour'] . "'"; if ( '' != $q['minute'] ) $where .= " AND MINUTE(post_date)='" . $q['minute'] . "'"; if ( '' != $q['second'] ) $where .= " AND SECOND(post_date)='" . $q['second'] . "'"; if ( $q['year'] ) $where .= " AND YEAR(post_date)='" . $q['year'] . "'"; if ( $q['monthnum'] ) $where .= " AND MONTH(post_date)='" . $q['monthnum'] . "'"; if ( $q['day'] ) $where .= " AND DAYOFMONTH(post_date)='" . $q['day'] . "'"; if ('' != $q['name']) { $q['name'] = sanitize_title($q['name']); $where .= " AND post_name = '" . $q['name'] . "'"; } else if ('' != $q['pagename']) { if ( isset($this->queried_object_id) ) $reqpage = $this->queried_object_id; else { $reqpage = get_page_by_path($q['pagename']); if ( !empty($reqpage) ) $reqpage = $reqpage->ID; else $reqpage = 0; } if ( ('page' != get_option('show_on_front') ) || ( $reqpage != get_option('page_for_posts') ) ) { $q['pagename'] = str_replace('%2F', '/', urlencode(urldecode($q['pagename']))); $page_paths = '/' . trim($q['pagename'], '/'); $q['pagename'] = sanitize_title(basename($page_paths)); $q['name'] = $q['pagename']; $where .= " AND (ID = '$reqpage')"; } } elseif ('' != $q['attachment']) { $q['attachment'] = str_replace('%2F', '/', urlencode(urldecode($q['attachment']))); $attach_paths = '/' . trim($q['attachment'], '/'); $q['attachment'] = sanitize_title(basename($attach_paths)); $q['name'] = $q['attachment']; $where .= " AND post_name = '" . $q['attachment'] . "'"; } if ( $q['w'] ) $where .= " AND WEEK(post_date, 1)='" . $q['w'] . "'"; if ( intval($q['comments_popup']) ) $q['p'] = intval($q['comments_popup']); // If an attachment is requested by number, let it supercede any post number. if ( $q['attachment_id'] ) $q['p'] = $q['attachment_id']; // If a post number is specified, load that post if ( $q['p'] ) $where = ' AND ID = ' . $q['p']; if ( $q['page_id'] ) { if ( ('page' != get_option('show_on_front') ) || ( $q['page_id'] != get_option('page_for_posts') ) ) { $q['p'] = $q['page_id']; $where = ' AND ID = ' . $q['page_id']; } } // If a search pattern is specified, load the posts that match if ( !empty($q['s']) ) { // added slashes screw with quote grouping when done early, so done later $q['s'] = stripslashes($q['s']); if ($q['sentence']) { $q['search_terms'] = array($q['s']); } else { preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q[s], $matches); $q['search_terms'] = array_map(create_function('$a', 'return trim($a, "\\"\'\\n\\r ");'), $matches[0]); } $n = ($q['exact']) ? '' : '%'; $searchand = ''; foreach((array)$q['search_terms'] as $term) { $term = addslashes_gpc($term); $search .= "{$searchand}((post_title LIKE '{$n}{$term}{$n}') OR (post_content LIKE '{$n}{$term}{$n}'))"; $searchand = ' AND '; } $term = addslashes_gpc($q['s']); if (!$q['sentence'] && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] ) $search .= " OR (post_title LIKE '{$n}{$term}{$n}') OR (post_content LIKE '{$n}{$term}{$n}')"; if ( !empty($search) ) $search = " AND ({$search}) "; } // Category stuff if ( empty($q['cat']) || ($q['cat'] == '0') || // Bypass cat checks if fetching specific posts $this->is_singular ) { $whichcat = ''; } else { $q['cat'] = ''.urldecode($q['cat']).''; $q['cat'] = addslashes_gpc($q['cat']); $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) "; $cat_array = preg_split('/[,\s]+/', $q['cat']); $in_cats = $out_cats = $out_posts = ''; foreach ( $cat_array as $cat ) { $cat = intval($cat); $in = (strpos($cat, '-') != false) ? false : true; $cat = trim($cat, '-'); if ( $in ) $in_cats .= "$cat, " . get_category_children($cat, '', ', '); else $out_cats .= "$cat, " . get_category_children($cat, '', ', '); } $in_cats = substr($in_cats, 0, -2); $out_cats = substr($out_cats, 0, -2); if ( strlen($in_cats) > 0 ) $in_cats = " AND $wpdb->post2cat.category_id IN ($in_cats)"; if ( strlen($out_cats) > 0 ) { $ids = $wpdb->get_col("SELECT post_id FROM $wpdb->post2cat WHERE $wpdb->post2cat.category_id IN ($out_cats)"); if ( is_array($ids) && count($ids > 0) ) { foreach ( $ids as $id ) $out_posts .= "$id, "; $out_posts = substr($out_posts, 0, -2); } if ( strlen($out_posts) > 0 ) $out_cats = " AND $wpdb->posts.ID NOT IN ($out_posts)"; else $out_cats = ''; } $whichcat = $in_cats . $out_cats; $groupby = "{$wpdb->posts}.ID"; } // Category stuff for nice URLs if ( '' != $q['category_name'] ) { $reqcat = get_category_by_path($q['category_name']); $q['category_name'] = str_replace('%2F', '/', urlencode(urldecode($q['category_name']))); $cat_paths = '/' . trim($q['category_name'], '/'); $q['category_name'] = sanitize_title(basename($cat_paths)); $cat_paths = '/' . trim(urldecode($q['category_name']), '/'); $q['category_name'] = sanitize_title(basename($cat_paths)); $cat_paths = explode('/', $cat_paths); $cat_path = ''; foreach ( (array) $cat_paths as $pathdir ) $cat_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title($pathdir); //if we don't match the entire hierarchy fallback on just matching the nicename if ( empty($reqcat) ) $reqcat = get_category_by_path($q['category_name'], false); if ( !empty($reqcat) ) $reqcat = $reqcat->cat_ID; else $reqcat = 0; $q['cat'] = $reqcat; $tables = ", $wpdb->post2cat, $wpdb->categories"; $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) LEFT JOIN $wpdb->categories ON ($wpdb->post2cat.category_id = $wpdb->categories.cat_ID) "; $whichcat = " AND category_id IN ({$q['cat']}, "; $whichcat .= get_category_children($q['cat'], '', ', '); $whichcat = substr($whichcat, 0, -2); $whichcat .= ")"; $groupby = "{$wpdb->posts}.ID"; } $groupby = ''; // Author/user stuff if ( empty($q['author']) || ($q['author'] == '0') ) { $whichauthor=''; } else { $q['author'] = ''.urldecode($q['author']).''; $q['author'] = addslashes_gpc($q['author']); if (strpos($q['author'], '-') != false) { $eq = '!='; $andor = 'AND'; $q['author'] = explode('-', $q['author']); $q['author'] = ''.intval($q['author'][1]); } else { $eq = '='; $andor = 'OR'; } $author_array = preg_split('/[,\s]+/', $q['author']); $whichauthor .= ' AND (post_author '.$eq.' '.intval($author_array[0]); for ($i = 1; $i < (count($author_array)); $i = $i + 1) { $whichauthor .= ' '.$andor.' post_author '.$eq.' '.intval($author_array[$i]); } $whichauthor .= ')'; } // Author stuff for nice URLs if ('' != $q['author_name']) { if (strpos($q['author_name'], '/') != false) { $q['author_name'] = explode('/',$q['author_name']); if ($q['author_name'][count($q['author_name'])-1]) { $q['author_name'] = $q['author_name'][count($q['author_name'])-1];#no trailing slash } else { $q['author_name'] = $q['author_name'][count($q['author_name'])-2];#there was a trailling slash } } $q['author_name'] = sanitize_title($q['author_name']); $q['author'] = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_nicename='".$q['author_name']."'"); $whichauthor .= ' AND (post_author = '.intval($q['author']).')'; } $where .= $search.$whichcat.$whichauthor; if ( empty($q['order']) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC')) ) $q['order'] = 'DESC'; // Order by if ( empty($q['orderby']) ) { $q['orderby'] = 'post_date '.$q['order']; } else { // Used to filter values $allowed_keys = array('author', 'date', 'category', 'title', 'modified', 'menu_order'); $q['orderby'] = urldecode($q['orderby']); $q['orderby'] = addslashes_gpc($q['orderby']); $orderby_array = explode(' ',$q['orderby']); if ( empty($orderby_array) ) $orderby_array[] = $q['orderby']; $q['orderby'] = ''; for ($i = 0; $i < count($orderby_array); $i++) { // Only allow certain values for safety $orderby = $orderby_array[$i]; if ( 'menu_order' != $orderby ) $orderby = 'post_' . $orderby; if ( in_array($orderby_array[$i], $allowed_keys) ) $q['orderby'] .= (($i == 0) ? '' : ',') . "$orderby {$q['order']}"; } if ( empty($q['orderby']) ) $q['orderby'] = 'post_date '.$q['order']; } if ( $this->is_attachment ) { $where .= " AND (post_type = 'attachment')"; } elseif ($this->is_page) { $where .= " AND (post_type = 'page')"; } elseif ($this->is_single) { $where .= " AND (post_type = 'post')"; } else { $where .= " AND (post_type = '$post_type' AND (post_status = 'publish'"; if ( is_admin() ) $where .= " OR post_status = 'future' OR post_status = 'draft'"; if ( is_user_logged_in() ) { if ( 'post' == $post_type ) $cap = 'read_private_posts'; else $cap = 'read_private_pages'; if ( current_user_can($cap) ) $where .= " OR post_status = 'private'"; else $where .= " OR post_author = $user_ID AND post_status = 'private'"; } $where .= '))'; } // Apply filters on where and join prior to paging so that any // manipulations to them are reflected in the paging by day queries. $where = apply_filters('posts_where', $where); $join = apply_filters('posts_join', $join); // Paging if ( empty($q['nopaging']) && !$this->is_singular ) { $page = abs(intval($q['paged'])); if (empty($page)) { $page = 1; } if ( empty($q['offset']) ) { $pgstrt = ''; $pgstrt = (intval($page) -1) * $q['posts_per_page'] . ', '; // $limits = 'LIMIT '.$pgstrt.$q['posts_per_page']; } else { // we're ignoring $page and using 'offset' $q['offset'] = abs(intval($q['offset'])); $pgstrt = $q['offset'] . ', '; // $limits = 'LIMIT ' . $pgstrt . $q['posts_per_page']; } } // Comments feeds if ( $this->is_comment_feed && ( $this->is_archive || $this->is_search || !$this->is_singular ) ) { if ( $this->is_archive || $this->is_search ) { $cjoin = "LEFT JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) $join "; $cwhere = "WHERE comment_approved = '1' $where"; $cgroupby = "GROUP BY $wpdb->comments.comment_id"; } else { // Other non singular e.g. front $cjoin = "LEFT JOIN $wpdb->posts ON ( $wpdb->comments.comment_post_ID = $wpdb->posts.ID )"; $cwhere = "WHERE post_status = 'publish' AND comment_approved = '1'"; $cgroupby = ''; } $cjoin = apply_filters('comment_feed_join', $cjoin); $cwhere = apply_filters('comment_feed_where', $cwhere); $cgroupby = apply_filters('comment_feed_groupby', $cgroupby); $this->comments = (array) $wpdb->get_results("SELECT $distinct $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere $cgroupby ORDER BY comment_date_gmt DESC"); $this->comment_count = count($this->comments); $post_ids = array(); foreach ($this->comments as $comment) $post_ids[] = (int) $comment->comment_post_ID; $post_ids = join(',', $post_ids); $join = ''; if ( $post_ids ) $where = "AND $wpdb->posts.ID IN ($post_ids) "; else $where = "AND 0"; } // Apply post-paging filters on where and join. Only plugins that // manipulate paging queries should use these hooks. $where = apply_filters('posts_where_paged', $where); $groupby = '';//apply_filters('posts_groupby', $groupby); if ( ! empty($groupby) ) $groupby = 'GROUP BY ' . $groupby; $join = apply_filters('posts_join_paged', $join); $orderby = apply_filters('posts_orderby', $q['orderby']); $distinct = apply_filters('posts_distinct', $distinct); $fields = apply_filters('posts_fields', "$wpdb->posts.*"); $limits = ''; //apply_filters( 'post_limits', $limits ); $found_rows = ''; $request = " SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby ORDER BY $orderby"; // $limits $this->request = apply_filters('posts_request', $request); $this->posts = $wpdb->get_results($this->request); if ( $this->is_comment_feed && $this->is_singular ) { $cjoin = apply_filters('comment_feed_join', ''); $cwhere = apply_filters('comment_feed_where', "WHERE comment_post_ID = {$this->posts[0]->ID} AND comment_approved = '1'"); $comments_request = "SELECT $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere ORDER BY comment_date_gmt DESC"; // LIMIT " . get_option('posts_per_rss') $this->comments = $wpdb->get_results($comments_request); $this->comment_count = count($this->comments); } if ( !empty($limits) ) { $found_posts_query = apply_filters( 'found_posts_query', 'SELECT COUNT(*)' ); $this->found_posts = $wpdb->get_var( $found_posts_query ); $this->found_posts = apply_filters( 'found_posts', $this->found_posts ); $this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']); } // Check post status to determine if post should be displayed. if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { $status = get_post_status($this->posts[0]); //$type = get_post_type($this->posts[0]); if ( ('publish' != $status) ) { if ( ! is_user_logged_in() ) { // User must be logged in to view unpublished posts. $this->posts = array(); } else { if ('draft' == $status) { // User must have edit permissions on the draft to preview. if (! current_user_can('edit_post', $this->posts[0]->ID)) { $this->posts = array(); } else { $this->is_preview = true; $this->posts[0]->post_date = current_time('mysql'); } } else if ('future' == $status) { $this->is_preview = true; if (!current_user_can('edit_post', $this->posts[0]->ID)) { $this->posts = array ( ); } } else { if (! current_user_can('read_post', $this->posts[0]->ID)) $this->posts = array(); } } } } $this->posts = apply_filters('the_posts', $this->posts); update_post_caches($this->posts); $this->post_count = count($this->posts); if ($this->post_count > 0) { $this->post = $this->posts[0]; } return $this->posts; } function next_post() { $this->current_post++; $this->post = $this->posts[$this->current_post]; return $this->post; } function the_post() { global $post; $this->in_the_loop = true; $post = $this->next_post(); setup_postdata($post); if ( $this->current_post == 0 ) // loop has just started do_action('loop_start'); } function have_posts() { if ($this->current_post + 1 < $this->post_count) { return true; } elseif ($this->current_post + 1 == $this->post_count) { do_action('loop_end'); // Do some cleaning up after the loop $this->rewind_posts(); } $this->in_the_loop = false; return false; } function rewind_posts() { $this->current_post = -1; if ($this->post_count > 0) { $this->post = $this->posts[0]; } } function next_comment() { $this->current_comment++; $this->comment = $this->comments[$this->current_comment]; return $this->comment; } function the_comment() { global $comment; $comment = $this->next_comment(); if ($this->current_comment == 0) { do_action('comment_loop_start'); } } function have_comments() { if ($this->current_comment + 1 < $this->comment_count) { return true; } elseif ($this->current_comment + 1 == $this->comment_count) { $this->rewind_comments(); } return false; } function rewind_comments() { $this->current_comment = -1; if ($this->comment_count > 0) { $this->comment = $this->comments[0]; } } function &query($query) { $this->parse_query($query); return $this->get_posts(); } function get_queried_object() { if (isset($this->queried_object)) { return $this->queried_object; } $this->queried_object = NULL; $this->queried_object_id = 0; if ($this->is_category) { $cat = $this->get('cat'); $category = &get_category($cat); $this->queried_object = &$category; $this->queried_object_id = (int) $cat; } else if ($this->is_posts_page) { $this->queried_object = & get_page(get_option('page_for_posts')); $this->queried_object_id = (int) $this->queried_object->ID; } else if ($this->is_single) { $this->queried_object = $this->post; $this->queried_object_id = (int) $this->post->ID; } else if ($this->is_page) { $this->queried_object = $this->post; $this->queried_object_id = (int) $this->post->ID; } else if ($this->is_author) { $author_id = (int) $this->get('author'); $author = get_userdata($author_id); $this->queried_object = $author; $this->queried_object_id = $author_id; } return $this->queried_object; } function get_queried_object_id() { $this->get_queried_object(); if (isset($this->queried_object_id)) { return $this->queried_object_id; } return 0; } function WP_Query ($query = '') { if (! empty($query)) { $this->query($query); } } } // Redirect old slugs function wp_old_slug_redirect () { global $wp_query; if ( is_404() && '' != $wp_query->query_vars['name'] ) : global $wpdb; $query = "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND meta_key = '_wp_old_slug' AND meta_value='" . $wp_query->query_vars['name'] . "'"; // if year, monthnum, or day have been specified, make our query more precise // just in case there are multiple identical _wp_old_slug values if ( '' != $wp_query->query_vars['year'] ) $query .= " AND YEAR(post_date) = '{$wp_query->query_vars['year']}'"; if ( '' != $wp_query->query_vars['monthnum'] ) $query .= " AND MONTH(post_date) = '{$wp_query->query_vars['monthnum']}'"; if ( '' != $wp_query->query_vars['day'] ) $query .= " AND DAYOFMONTH(post_date) = '{$wp_query->query_vars['day']}'"; $id = (int) $wpdb->get_var($query); if ( !$id ) return; $link = get_permalink($id); if ( !$link ) return; wp_redirect($link, '301'); // Permanent redirect exit; endif; } // // Private helper functions // // Setup global post data. function setup_postdata($post) { global $id, $postdata, $authordata, $day, $page, $pages, $multipage, $more, $numpages, $wp_query; global $pagenow; $id = (int) $post->ID; $authordata = get_userdata($post->post_author); $day = mysql2date('d.m.y', $post->post_date); $currentmonth = mysql2date('m', $post->post_date); $numpages = 1; $page = get_query_var('page'); if ( !$page ) $page = 1; if ( is_single() || is_page() ) $more = 1; $content = $post->post_content; if ( preg_match('//', $content) ) { if ( $page > 1 ) $more = 1; $multipage = 1; $content = str_replace("\n\n", '', $content); $content = str_replace("\n", '', $content); $content = str_replace("\n", '', $content); $pages = explode('', $content); $numpages = count($pages); } else { $pages[0] = $post->post_content; $multipage = 0; } return true; } ?> Hwordpress/wp-includes/.svn/text-base/registration-functions.php.svn-basee >wordpress/wp-includes/.svn/text-base/registration.php.svn-baseID; return null; } function email_exists( $email ) { global $wpdb; $email = addslashes( $email ); return $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_email = '$email'"); } function validate_username( $username ) { $name = sanitize_user($username, true); $valid = true; if ( $name != $username ) $valid = false; return apply_filters('validate_username', $valid, $username); } function wp_insert_user($userdata) { global $wpdb; extract($userdata, EXTR_SKIP); // Are we updating or creating? if ( !empty($ID) ) { $ID = (int) $ID; $update = true; } else { $update = false; // Password is not hashed when creating new user. $user_pass = md5($user_pass); } $user_login = sanitize_user($user_login, true); $user_login = apply_filters('pre_user_login', $user_login); if ( empty($user_nicename) ) $user_nicename = sanitize_title( $user_login ); $user_nicename = apply_filters('pre_user_nicename', $user_nicename); if ( empty($user_url) ) $user_url = ''; $user_url = apply_filters('pre_user_url', $user_url); if ( empty($user_email) ) $user_email = ''; $user_email = apply_filters('pre_user_email', $user_email); if ( empty($display_name) ) $display_name = $user_login; $display_name = apply_filters('pre_user_display_name', $display_name); if ( empty($nickname) ) $nickname = $user_login; $nickname = apply_filters('pre_user_nickname', $nickname); if ( empty($first_name) ) $first_name = ''; $first_name = apply_filters('pre_user_first_name', $first_name); if ( empty($last_name) ) $last_name = ''; $last_name = apply_filters('pre_user_last_name', $last_name); if ( empty($description) ) $description = ''; $description = apply_filters('pre_user_description', $description); if ( empty($rich_editing) ) $rich_editing = 'true'; if ( empty($user_registered) ) $user_registered = gmdate('Y-m-d H:i:s'); if ( $update ) { $query = "UPDATE $wpdb->users SET user_pass='$user_pass', user_email='$user_email', user_url='$user_url', user_nicename = '$user_nicename', display_name = '$display_name' WHERE ID = ". $ID; $query = apply_filters('update_user_query', $query); $wpdb->query( $query ); $user_id = (int) $ID; } else { $query = "INSERT INTO $wpdb->users (user_login, user_pass, user_email, user_url, user_registered, user_nicename, display_name) VALUES ('$user_login', '$user_pass', '$user_email', '$user_url', '$user_registered', '$user_nicename', '$display_name')"; $query = apply_filters('create_user_query', $query); $wpdb->insert( $query, $wpdb->users, "id"); $user_id = (int) $wpdb->insert_id; } update_usermeta( $user_id, 'first_name', $first_name); update_usermeta( $user_id, 'last_name', $last_name); update_usermeta( $user_id, 'nickname', $nickname ); update_usermeta( $user_id, 'description', $description ); update_usermeta( $user_id, 'jabber', $jabber ); update_usermeta( $user_id, 'aim', $aim ); update_usermeta( $user_id, 'yim', $yim ); update_usermeta( $user_id, 'rich_editing', $rich_editing); if ( $update && isset($role) ) { $user = new WP_User($user_id); $user->set_role($role); } if ( !$update ) { $user = new WP_User($user_id); $user->set_role(get_option('default_role')); } wp_cache_delete($user_id, 'users'); wp_cache_delete($user_login, 'userlogins'); if ( $update ) do_action('profile_update', $user_id); else do_action('user_register', $user_id); return $user_id; } function wp_update_user($userdata) { global $wpdb; $ID = (int) $userdata['ID']; // First, get all of the original fields $user = get_userdata($ID); // Escape data pulled from DB. $user = add_magic_quotes(get_object_vars($user)); // If password is changing, hash it now. if ( ! empty($userdata['user_pass']) ) { $plaintext_pass = $userdata['user_pass']; $userdata['user_pass'] = md5($userdata['user_pass']); } // Merge old and new fields with new fields overwriting old ones. $userdata = array_merge($user, $userdata); $user_id = wp_insert_user($userdata); // Update the cookies if the password changed. $current_user = wp_get_current_user(); if ( $current_user->id == $ID ) { if ( isset($plaintext_pass) ) { wp_clearcookie(); wp_setcookie($userdata['user_login'], $plaintext_pass); } } return $user_id; } function wp_create_user($username, $password, $email = '') { global $wpdb; $user_login = $wpdb->escape($username); $user_email = $wpdb->escape($email); $user_pass = $password; $userdata = compact('user_login', 'user_email', 'user_pass'); return wp_insert_user($userdata); } function create_user($username, $password, $email) { return wp_create_user($username, $password, $email); } ?>9wordpress/wp-includes/.svn/text-base/rewrite.php.svn-baserwadd_rule($regex, $redirect); } //Add a new tag (like %postname%) //warning: you must call this on init or earlier, otherwise the query var addition stuff won't work function add_rewrite_tag($tagname, $regex) { //validation if (strlen($tagname) < 3 || $tagname{0} != '%' || $tagname{strlen($tagname)-1} != '%') { return; } $qv = trim($tagname, '%'); global $wp_rewrite, $wp; $wp->add_query_var($qv); $wp_rewrite->add_rewrite_tag($tagname, $regex, $qv . '='); } //Add a new feed type like /atom1/ function add_feed($feedname, $function) { global $wp_rewrite; if (!in_array($feedname, $wp_rewrite->feeds)) { //override the file if it is $wp_rewrite->feeds[] = $feedname; } $hook = 'do_feed_' . $feedname; remove_action($hook, $function, 10, 1); add_action($hook, $function, 10, 1); return $hook; } define('EP_PERMALINK', 1 ); define('EP_ATTACHMENT', 2 ); define('EP_DATE', 4 ); define('EP_YEAR', 8 ); define('EP_MONTH', 16 ); define('EP_DAY', 32 ); define('EP_ROOT', 64 ); define('EP_COMMENTS', 128 ); define('EP_SEARCH', 256 ); define('EP_CATEGORIES', 512 ); define('EP_AUTHORS', 1024); define('EP_PAGES', 2048); //pseudo-places define('EP_NONE', 0 ); define('EP_ALL', 4095); //and an endpoint, like /trackback/ function add_rewrite_endpoint($name, $places) { global $wp_rewrite; $wp_rewrite->add_endpoint($name, $places); } // examine a url (supposedly from this blog) and try to // determine the post ID it represents. function url_to_postid($url) { global $wp_rewrite; $url = apply_filters('url_to_postid', $url); // First, check to see if there is a 'p=N' or 'page_id=N' to match against preg_match('#[?&](p|page_id)=(\d+)#', $url, $values); $id = intval($values[2]); if ( $id ) return $id; // Check to see if we are using rewrite rules $rewrite = $wp_rewrite->wp_rewrite_rules(); // Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options if ( empty($rewrite) ) return 0; // $url cleanup by Mark Jaquith // This fixes things like #anchors, ?query=strings, missing 'www.', // added 'www.', or added 'index.php/' that will mess up our WP_Query // and return a false negative // Get rid of the #anchor $url_split = explode('#', $url); $url = $url_split[0]; // Get rid of URL ?query=string $url_split = explode('?', $url); $url = $url_split[0]; // Add 'www.' if it is absent and should be there if ( false != strpos(get_option('home'), '://www.') && false == strpos($url, '://www.') ) $url = str_replace('://', '://www.', $url); // Strip 'www.' if it is present and shouldn't be if ( false == strpos(get_option('home'), '://www.') ) $url = str_replace('://www.', '://', $url); // Strip 'index.php/' if we're not using path info permalinks if ( !$wp_rewrite->using_index_permalinks() ) $url = str_replace('index.php/', '', $url); if ( false != strpos($url, get_option('home')) ) { // Chop off http://domain.com $url = str_replace(get_option('home'), '', $url); } else { // Chop off /path/to/blog $home_path = parse_url(get_option('home')); $home_path = $home_path['path']; $url = str_replace($home_path, '', $url); } // Trim leading and lagging slashes $url = trim($url, '/'); $request = $url; // Done with cleanup // Look for matches. $request_match = $request; foreach ($rewrite as $match => $query) { // If the requesting file is the anchor of the match, prepend it // to the path info. if ( (! empty($url)) && (strpos($match, $url) == 0) ) { $request_match = $url . '/' . $request; } if ( preg_match("!^$match!", $request_match, $matches) ) { // Got a match. // Trim the query of everything up to the '?'. $query = preg_replace("!^.+\?!", '', $query); // Substitute the substring matches into the query. eval("\$query = \"$query\";"); // Filter out non-public query vars global $wp; parse_str($query, $query_vars); $query = array(); foreach ( $query_vars as $key => $value ) { if ( in_array($key, $wp->public_query_vars) ) $query[$key] = $value; } // Do the query $query = new WP_Query($query); if ( $query->is_single || $query->is_page ) return $query->post->ID; else return 0; } } return 0; } /* WP_Rewrite class *******************************************************************************/ class WP_Rewrite { var $permalink_structure; var $use_trailing_slashes; var $category_base; var $category_structure; var $author_base = 'author'; var $author_structure; var $date_structure; var $page_structure; var $search_base = 'search'; var $search_structure; var $comments_base = 'comments'; var $feed_base = 'feed'; var $comments_feed_structure; var $feed_structure; var $front; var $root = ''; var $index = 'index.php'; var $matches = ''; var $rules; var $extra_rules; //those not generated by the class, see add_rewrite_rule() var $non_wp_rules; //rules that don't redirect to WP's index.php var $endpoints; var $use_verbose_rules = false; var $rewritecode = array( '%year%', '%monthnum%', '%day%', '%hour%', '%minute%', '%second%', '%postname%', '%post_id%', '%category%', '%author%', '%pagename%', '%search%' ); var $rewritereplace = array( '([0-9]{4})', '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', '([^/]+)', '([0-9]+)', '(.+?)', '([^/]+)', '([^/]+)', '(.+)' ); var $queryreplace = array ( 'year=', 'monthnum=', 'day=', 'hour=', 'minute=', 'second=', 'name=', 'p=', 'category_name=', 'author_name=', 'pagename=', 's=' ); var $feeds = array ( 'feed', 'rdf', 'rss', 'rss2', 'atom' ); function using_permalinks() { if (empty($this->permalink_structure)) return false; else return true; } function using_index_permalinks() { if (empty($this->permalink_structure)) { return false; } // If the index is not in the permalink, we're using mod_rewrite. if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) { return true; } return false; } function using_mod_rewrite_permalinks() { if ( $this->using_permalinks() && ! $this->using_index_permalinks()) return true; else return false; } function preg_index($number) { $match_prefix = '$'; $match_suffix = ''; if (! empty($this->matches)) { $match_prefix = '$' . $this->matches . '['; $match_suffix = ']'; } return "$match_prefix$number$match_suffix"; } function page_rewrite_rules() { $uris = get_option('page_uris'); $attachment_uris = get_option('page_attachment_uris'); $rewrite_rules = array(); $page_structure = $this->get_page_permastruct(); if( is_array( $attachment_uris ) ) { foreach ($attachment_uris as $uri => $pagename) { $this->add_rewrite_tag('%pagename%', "($uri)", 'attachment='); $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure, EP_PAGES)); } } if( is_array( $uris ) ) { foreach ($uris as $uri => $pagename) { $this->add_rewrite_tag('%pagename%', "($uri)", 'pagename='); $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure, EP_PAGES)); } } return $rewrite_rules; } function get_date_permastruct() { if (isset($this->date_structure)) { return $this->date_structure; } if (empty($this->permalink_structure)) { $this->date_structure = ''; return false; } // The date permalink must have year, month, and day separated by slashes. $endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%'); $this->date_structure = ''; $date_endian = ''; foreach ($endians as $endian) { if (false != strpos($this->permalink_structure, $endian)) { $date_endian= $endian; break; } } if ( empty($date_endian) ) $date_endian = '%year%/%monthnum%/%day%'; // Do not allow the date tags and %post_id% to overlap in the permalink // structure. If they do, move the date tags to $front/date/. $front = $this->front; preg_match_all('/%.+?%/', $this->permalink_structure, $tokens); $tok_index = 1; foreach ($tokens[0] as $token) { if ( ($token == '%post_id%') && ($tok_index <= 3) ) { $front = $front . 'date/'; break; } $tok_index++; } $this->date_structure = $front . $date_endian; return $this->date_structure; } function get_year_permastruct() { $structure = $this->get_date_permastruct($this->permalink_structure); if (empty($structure)) { return false; } $structure = str_replace('%monthnum%', '', $structure); $structure = str_replace('%day%', '', $structure); $structure = preg_replace('#/+#', '/', $structure); return $structure; } function get_month_permastruct() { $structure = $this->get_date_permastruct($this->permalink_structure); if (empty($structure)) { return false; } $structure = str_replace('%day%', '', $structure); $structure = preg_replace('#/+#', '/', $structure); return $structure; } function get_day_permastruct() { return $this->get_date_permastruct($this->permalink_structure); } function get_category_permastruct() { if (isset($this->category_structure)) { return $this->category_structure; } if (empty($this->permalink_structure)) { $this->category_structure = ''; return false; } if (empty($this->category_base)) $this->category_structure = $this->front . 'category/'; else $this->category_structure = $this->category_base . '/'; $this->category_structure .= '%category%'; return $this->category_structure; } function get_author_permastruct() { if (isset($this->author_structure)) { return $this->author_structure; } if (empty($this->permalink_structure)) { $this->author_structure = ''; return false; } $this->author_structure = $this->front . $this->author_base . '/%author%'; return $this->author_structure; } function get_search_permastruct() { if (isset($this->search_structure)) { return $this->search_structure; } if (empty($this->permalink_structure)) { $this->search_structure = ''; return false; } $this->search_structure = $this->root . $this->search_base . '/%search%'; return $this->search_structure; } function get_page_permastruct() { if (isset($this->page_structure)) { return $this->page_structure; } if (empty($this->permalink_structure)) { $this->page_structure = ''; return false; } $this->page_structure = $this->root . '%pagename%'; return $this->page_structure; } function get_feed_permastruct() { if (isset($this->feed_structure)) { return $this->feed_structure; } if (empty($this->permalink_structure)) { $this->feed_structure = ''; return false; } $this->feed_structure = $this->root . $this->feed_base . '/%feed%'; return $this->feed_structure; } function get_comment_feed_permastruct() { if (isset($this->comment_feed_structure)) { return $this->comment_feed_structure; } if (empty($this->permalink_structure)) { $this->comment_feed_structure = ''; return false; } $this->comment_feed_structure = $this->root . $this->comments_base . '/' . $this->feed_base . '/%feed%'; return $this->comment_feed_structure; } function add_rewrite_tag($tag, $pattern, $query) { // If the tag already exists, replace the existing pattern and query for // that tag, otherwise add the new tag, pattern, and query to the end of // the arrays. $position = array_search($tag, $this->rewritecode); if (FALSE != $position && NULL != $position) { $this->rewritereplace[$position] = $pattern; $this->queryreplace[$position] = $query; } else { $this->rewritecode[] = $tag; $this->rewritereplace[] = $pattern; $this->queryreplace[] = $query; } } //the main WP_Rewrite function. generate the rules from permalink structure function generate_rewrite_rules($permalink_structure, $ep_mask = EP_NONE, $paged = true, $feed = true, $forcomments = false, $walk_dirs = true, $endpoints = true) { //build a regex to match the feed section of URLs, something like (feed|atom|rss|rss2)/? $feedregex2 = ''; foreach ($this->feeds as $feed_name) { $feedregex2 .= $feed_name . '|'; } $feedregex2 = '(' . trim($feedregex2, '|') . ')/?$'; //$feedregex is identical but with /feed/ added on as well, so URLs like /feed/atom //and /atom are both possible $feedregex = $this->feed_base . '/' . $feedregex2; //build a regex to match the trackback and page/xx parts of URLs $trackbackregex = 'trackback/?$'; $pageregex = 'page/?([0-9]{1,})/?$'; //build up an array of endpoint regexes to append => queries to append if ($endpoints) { $ep_query_append = array (); foreach ($this->endpoints as $endpoint) { //match everything after the endpoint name, but allow for nothing to appear there $epmatch = $endpoint[1] . '(/(.*))?/?$'; //this will be appended on to the rest of the query for each dir $epquery = '&' . $endpoint[1] . '='; $ep_query_append[$epmatch] = array ( $endpoint[0], $epquery ); } } //get everything up to the first rewrite tag $front = substr($permalink_structure, 0, strpos($permalink_structure, '%')); //build an array of the tags (note that said array ends up being in $tokens[0]) preg_match_all('/%.+?%/', $permalink_structure, $tokens); $num_tokens = count($tokens[0]); $index = $this->index; //probably 'index.php' $feedindex = $index; $trackbackindex = $index; //build a list from the rewritecode and queryreplace arrays, that will look something like //tagname=$matches[i] where i is the current $i for ($i = 0; $i < $num_tokens; ++$i) { if (0 < $i) { $queries[$i] = $queries[$i - 1] . '&'; } $query_token = str_replace($this->rewritecode, $this->queryreplace, $tokens[0][$i]) . $this->preg_index($i+1); $queries[$i] .= $query_token; } //get the structure, minus any cruft (stuff that isn't tags) at the front $structure = $permalink_structure; if ($front != '/') { $structure = str_replace($front, '', $structure); } //create a list of dirs to walk over, making rewrite rules for each level //so for example, a $structure of /%year%/%month%/%postname% would create //rewrite rules for /%year%/, /%year%/%month%/ and /%year%/%month%/%postname% $structure = trim($structure, '/'); if ($walk_dirs) { $dirs = explode('/', $structure); } else { $dirs[] = $structure; } $num_dirs = count($dirs); //strip slashes from the front of $front $front = preg_replace('|^/+|', '', $front); //the main workhorse loop $post_rewrite = array(); $struct = $front; for ($j = 0; $j < $num_dirs; ++$j) { //get the struct for this dir, and trim slashes off the front $struct .= $dirs[$j] . '/'; //accumulate. see comment near explode('/', $structure) above $struct = ltrim($struct, '/'); //replace tags with regexes $match = str_replace($this->rewritecode, $this->rewritereplace, $struct); //make a list of tags, and store how many there are in $num_toks $num_toks = preg_match_all('/%.+?%/', $struct, $toks); //get the 'tagname=$matches[i]' $query = $queries[$num_toks - 1]; //set up $ep_mask_specific which is used to match more specific URL types switch ($dirs[$j]) { case '%year%': $ep_mask_specific = EP_YEAR; break; case '%monthnum%': $ep_mask_specific = EP_MONTH; break; case '%day%': $ep_mask_specific = EP_DAY; break; } //create query for /page/xx $pagematch = $match . $pageregex; $pagequery = $index . '?' . $query . '&paged=' . $this->preg_index($num_toks + 1); //create query for /feed/(feed|atom|rss|rss2|rdf) $feedmatch = $match . $feedregex; $feedquery = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1); //create query for /(feed|atom|rss|rss2|rdf) (see comment near creation of $feedregex) $feedmatch2 = $match . $feedregex2; $feedquery2 = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1); //if asked to, turn the feed queries into comment feed ones if ($forcomments) { $feedquery .= '&withcomments=1'; $feedquery2 .= '&withcomments=1'; } //start creating the array of rewrites for this dir $rewrite = array(); if ($feed) //...adding on /feed/ regexes => queries $rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2); if ($paged) //...and /page/xx ones $rewrite = array_merge($rewrite, array($pagematch => $pagequery)); //do endpoints if ($endpoints) { foreach ($ep_query_append as $regex => $ep) { //add the endpoints on if the mask fits if ($ep[0] & $ep_mask || $ep[0] & $ep_mask_specific) { $rewrite[$match . $regex] = $index . '?' . $query . $ep[1] . $this->preg_index($num_toks + 2); } } } //if we've got some tags in this dir if ($num_toks) { $post = false; $page = false; //check to see if this dir is permalink-level: i.e. the structure specifies an //individual post. Do this by checking it contains at least one of 1) post name, //2) post ID, 3) page name, 4) timestamp (year, month, day, hour, second and //minute all present). Set these flags now as we need them for the endpoints. if (strpos($struct, '%postname%') != false || strpos($struct, '%post_id%') != false || strpos($struct, '%pagename%') != false || (strpos($struct, '%year%') != false && strpos($struct, '%monthnum%') != false && strpos($struct, '%day%') != false && strpos($struct, '%hour%') != false && strpos($struct, '%minute%') != false && strpos($struct, '%second%') != false)) { $post = true; if (strpos($struct, '%pagename%') != false) $page = true; } //if we're creating rules for a permalink, do all the endpoints like attachments etc if ($post) { $post = true; //create query and regex for trackback $trackbackmatch = $match . $trackbackregex; $trackbackquery = $trackbackindex . '?' . $query . '&tb=1'; //trim slashes from the end of the regex for this dir $match = rtrim($match, '/'); //get rid of brackets $submatchbase = str_replace(array('(',')'),'',$match); //add a rule for at attachments, which take the form of /some-text $sub1 = $submatchbase . '/([^/]+)/'; $sub1tb = $sub1 . $trackbackregex; //add trackback regex /trackback/... $sub1feed = $sub1 . $feedregex; //and /feed/(atom|...) $sub1feed2 = $sub1 . $feedregex2; //and /(feed|atom...) //add an ? as we don't have to match that last slash, and finally a $ so we //match to the end of the URL //add another rule to match attachments in the explicit form: ///attachment/some-text $sub2 = $submatchbase . '/attachment/([^/]+)/'; $sub2tb = $sub2 . $trackbackregex; //and add trackbacks /attachment/trackback $sub2feed = $sub2 . $feedregex; //feeds, /attachment/feed/(atom|...) $sub2feed2 = $sub2 . $feedregex2; //and feeds again on to this /attachment/(feed|atom...) //create queries for these extra tag-ons we've just dealt with $subquery = $index . '?attachment=' . $this->preg_index(1); $subtbquery = $subquery . '&tb=1'; $subfeedquery = $subquery . '&feed=' . $this->preg_index(2); //do endpoints for attachments if ($endpoint) { foreach ($ep_query_append as $regex => $ep) { if ($ep[0] & EP_ATTACHMENT) { $rewrite[$sub1 . $regex] = $subquery . '?' . $ep[1] . $this->preg_index(2); $rewrite[$sub2 . $regex] = $subquery . '?' . $ep[1] . $this->preg_index(2); } } } //now we've finished with endpoints, finish off the $sub1 and $sub2 matches $sub1 .= '?$'; $sub2 .= '?$'; //allow URLs like /2 for /page/2 $match = $match . '(/[0-9]+)?/?$'; $query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1); } else { //not matching a permalink so this is a lot simpler //close the match and finalise the query $match .= '?$'; $query = $index . '?' . $query; } //create the final array for this dir by joining the $rewrite array (which currently //only contains rules/queries for trackback, pages etc) to the main regex/query for //this dir $rewrite = array_merge($rewrite, array($match => $query)); //if we're matching a permalink, add those extras (attachments etc) on if ($post) { //add trackback $rewrite = array_merge(array($trackbackmatch => $trackbackquery), $rewrite); //add regexes/queries for attachments, attachment trackbacks and so on if ( ! $page ) //require /attachment/stuff form for pages because of confusion with subpages $rewrite = array_merge($rewrite, array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery)); $rewrite = array_merge($rewrite, array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery)); } } //if($num_toks) //add the rules for this dir to the accumulating $post_rewrite $post_rewrite = array_merge($rewrite, $post_rewrite); } //foreach ($dir) return $post_rewrite; //the finished rules. phew! } function generate_rewrite_rule($permalink_structure, $walk_dirs = false) { return $this->generate_rewrite_rules($permalink_structure, EP_NONE, false, false, false, $walk_dirs); } /* rewrite_rules * Construct rewrite matches and queries from permalink structure. * Returns an associate array of matches and queries. */ function rewrite_rules() { $rewrite = array(); if (empty($this->permalink_structure)) { return $rewrite; } // robots.txt $robots_rewrite = array('robots.txt$' => $this->index . '?robots=1'); //Default Feed rules - These are require to allow for the direct access files to work with permalink structure starting with %category% $default_feeds = array( 'wp-atom.php$' => $this->index .'?feed=atom', 'wp-rdf.php$' => $this->index .'?feed=rdf', 'wp-rss.php$' => $this->index .'?feed=rss', 'wp-rss2.php$' => $this->index .'?feed=rss2', 'wp-feed.php$' => $this->index .'?feed=feed', 'wp-commentsrss2.php$' => $this->index . '?feed=rss2&withcomments=1'); // Post $post_rewrite = $this->generate_rewrite_rules($this->permalink_structure, EP_PERMALINK); $post_rewrite = apply_filters('post_rewrite_rules', $post_rewrite); // Date $date_rewrite = $this->generate_rewrite_rules($this->get_date_permastruct(), EP_DATE); $date_rewrite = apply_filters('date_rewrite_rules', $date_rewrite); // Root $root_rewrite = $this->generate_rewrite_rules($this->root . '/', EP_ROOT); $root_rewrite = apply_filters('root_rewrite_rules', $root_rewrite); // Comments $comments_rewrite = $this->generate_rewrite_rules($this->root . $this->comments_base, EP_COMMENTS, true, true, true, false); $comments_rewrite = apply_filters('comments_rewrite_rules', $comments_rewrite); // Search $search_structure = $this->get_search_permastruct(); $search_rewrite = $this->generate_rewrite_rules($search_structure, EP_SEARCH); $search_rewrite = apply_filters('search_rewrite_rules', $search_rewrite); // Categories $category_rewrite = $this->generate_rewrite_rules($this->get_category_permastruct(), EP_CATEGORIES); $category_rewrite = apply_filters('category_rewrite_rules', $category_rewrite); // Authors $author_rewrite = $this->generate_rewrite_rules($this->get_author_permastruct(), EP_AUTHORS); $author_rewrite = apply_filters('author_rewrite_rules', $author_rewrite); // Pages $page_rewrite = $this->page_rewrite_rules(); $page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite); // Put them together. $this->rules = array_merge($robots_rewrite, $default_feeds, $page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $this->extra_rules); do_action_ref_array('generate_rewrite_rules', array(&$this)); $this->rules = apply_filters('rewrite_rules_array', $this->rules); return $this->rules; } function wp_rewrite_rules() { $this->rules = get_option('rewrite_rules'); if ( empty($this->rules) ) { $this->matches = 'matches'; $this->rewrite_rules(); update_option('rewrite_rules', $this->rules); } return $this->rules; } function mod_rewrite_rules() { if ( ! $this->using_permalinks()) { return ''; } $site_root = parse_url(get_option('siteurl')); $site_root = trailingslashit($site_root['path']); $home_root = parse_url(get_option('home')); $home_root = trailingslashit($home_root['path']); $rules = "\n"; $rules .= "RewriteEngine On\n"; $rules .= "RewriteBase $home_root\n"; //add in the rules that don't redirect to WP's index.php (and thus shouldn't be handled by WP at all) foreach ($this->non_wp_rules as $match => $query) { // Apache 1.3 does not support the reluctant (non-greedy) modifier. $match = str_replace('.+?', '.+', $match); // If the match is unanchored and greedy, prepend rewrite conditions // to avoid infinite redirects and eclipsing of real files. if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) { //nada. } $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n"; } if ($this->use_verbose_rules) { $this->matches = ''; $rewrite = $this->rewrite_rules(); $num_rules = count($rewrite); $rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n" . "RewriteCond %{REQUEST_FILENAME} -d\n" . "RewriteRule ^.*$ - [S=$num_rules]\n"; foreach ($rewrite as $match => $query) { // Apache 1.3 does not support the reluctant (non-greedy) modifier. $match = str_replace('.+?', '.+', $match); // If the match is unanchored and greedy, prepend rewrite conditions // to avoid infinite redirects and eclipsing of real files. if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) { //nada. } if (strpos($query, $this->index) != false) { $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n"; } else { $rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n"; } } } else { $rules .= "RewriteCond %{REQUEST_FILENAME} !-f\n" . "RewriteCond %{REQUEST_FILENAME} !-d\n" . "RewriteRule . {$home_root}{$this->index} [L]\n"; } $rules .= "\n"; $rules = apply_filters('mod_rewrite_rules', $rules); $rules = apply_filters('rewrite_rules', $rules); // Deprecated return $rules; } //Add a straight rewrite rule function add_rule($regex, $redirect) { //get everything up to the first ? $index = (strpos($redirect, '?') == false ? strlen($redirect) : strpos($redirect, '?')); $front = substr($redirect, 0, $index); if ($front != $this->index) { //it doesn't redirect to WP's index.php $this->add_external_rule($regex, $redirect); } else { $this->extra_rules[$regex] = $redirect; } } //add a rule that doesn't redirect to index.php function add_external_rule($regex, $redirect) { $this->non_wp_rules[$regex] = $redirect; } //add an endpoint, like /trackback/, to be inserted after certain URL types (specified in $places) function add_endpoint($name, $places) { global $wp; $this->endpoints[] = array ( $places, $name ); $wp->add_query_var($name); } function flush_rules() { generate_page_uri_index(); delete_option('rewrite_rules'); $this->wp_rewrite_rules(); if ( function_exists('save_mod_rewrite_rules') ) save_mod_rewrite_rules(); } function init() { $this->extra_rules = $this->non_wp_rules = $this->endpoints = array(); $this->permalink_structure = get_option('permalink_structure'); $this->front = substr($this->permalink_structure, 0, strpos($this->permalink_structure, '%')); $this->root = ''; if ($this->using_index_permalinks()) { $this->root = $this->index . '/'; } $this->category_base = get_option('category_base'); unset($this->category_structure); unset($this->author_structure); unset($this->date_structure); unset($this->page_structure); unset($this->search_structure); unset($this->feed_structure); unset($this->comment_feed_structure); $this->use_trailing_slashes = ( substr($this->permalink_structure, -1, 1) == '/' ) ? true : false; } function set_permalink_structure($permalink_structure) { if ($permalink_structure != $this->permalink_structure) { update_option('permalink_structure', $permalink_structure); $this->init(); } } function set_category_base($category_base) { if ($category_base != $this->category_base) { update_option('category_base', $category_base); $this->init(); } } function WP_Rewrite() { $this->init(); } } ?>?wordpress/wp-includes/.svn/text-base/rss-functions.php.svn-base[ 5wordpress/wp-includes/.svn/text-base/rss.php.svn-baseR * Version: 0.51 * License: GPL */ define('RSS', 'RSS'); define('ATOM', 'Atom'); define('MAGPIE_USER_AGENT', 'WordPress/' . $GLOBALS['wp_version']); class MagpieRSS { var $parser; var $current_item = array(); // item currently being parsed var $items = array(); // collection of parsed items var $channel = array(); // hash of channel fields var $textinput = array(); var $image = array(); var $feed_type; var $feed_version; // parser variables var $stack = array(); // parser stack var $inchannel = false; var $initem = false; var $incontent = false; // if in Atom field var $intextinput = false; var $inimage = false; var $current_field = ''; var $current_namespace = false; //var $ERROR = ""; var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); function MagpieRSS ($source) { # if PHP xml isn't compiled in, die # if ( !function_exists('xml_parser_create') ) trigger_error( "Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php" ); $parser = @xml_parser_create(); if ( !is_resource($parser) ) trigger_error( "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php"); $this->parser = $parser; # pass in parser, and a reference to this object # setup handlers # xml_set_object( $this->parser, $this ); xml_set_element_handler($this->parser, 'feed_start_element', 'feed_end_element' ); xml_set_character_data_handler( $this->parser, 'feed_cdata' ); $status = xml_parse( $this->parser, $source ); if (! $status ) { $errorcode = xml_get_error_code( $this->parser ); if ( $errorcode != XML_ERROR_NONE ) { $xml_error = xml_error_string( $errorcode ); $error_line = xml_get_current_line_number($this->parser); $error_col = xml_get_current_column_number($this->parser); $errormsg = "$xml_error at line $error_line, column $error_col"; $this->error( $errormsg ); } } xml_parser_free( $this->parser ); $this->normalize(); } function feed_start_element($p, $element, &$attrs) { $el = $element = strtolower($element); $attrs = array_change_key_case($attrs, CASE_LOWER); // check for a namespace, and split if found $ns = false; if ( strpos( $element, ':' ) ) { list($ns, $el) = split( ':', $element, 2); } if ( $ns and $ns != 'rdf' ) { $this->current_namespace = $ns; } # if feed type isn't set, then this is first element of feed # identify feed from root element # if (!isset($this->feed_type) ) { if ( $el == 'rdf' ) { $this->feed_type = RSS; $this->feed_version = '1.0'; } elseif ( $el == 'rss' ) { $this->feed_type = RSS; $this->feed_version = $attrs['version']; } elseif ( $el == 'feed' ) { $this->feed_type = ATOM; $this->feed_version = $attrs['version']; $this->inchannel = true; } return; } if ( $el == 'channel' ) { $this->inchannel = true; } elseif ($el == 'item' or $el == 'entry' ) { $this->initem = true; if ( isset($attrs['rdf:about']) ) { $this->current_item['about'] = $attrs['rdf:about']; } } // if we're in the default namespace of an RSS feed, // record textinput or image fields elseif ( $this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) { $this->intextinput = true; } elseif ( $this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) { $this->inimage = true; } # handle atom content constructs elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) { // avoid clashing w/ RSS mod_content if ($el == 'content' ) { $el = 'atom_content'; } $this->incontent = $el; } // if inside an Atom content construct (e.g. content or summary) field treat tags as text elseif ($this->feed_type == ATOM and $this->incontent ) { // if tags are inlined, then flatten $attrs_str = join(' ', array_map('map_attrs', array_keys($attrs), array_values($attrs) ) ); $this->append_content( "<$element $attrs_str>" ); array_unshift( $this->stack, $el ); } // Atom support many links per containging element. // Magpie treats link elements of type rel='alternate' // as being equivalent to RSS's simple link element. // elseif ($this->feed_type == ATOM and $el == 'link' ) { if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) { $link_el = 'link'; } else { $link_el = 'link_' . $attrs['rel']; } $this->append($link_el, $attrs['href']); } // set stack[0] to current element else { array_unshift($this->stack, $el); } } function feed_cdata ($p, $text) { if ($this->feed_type == ATOM and $this->incontent) { $this->append_content( $text ); } else { $current_el = join('_', array_reverse($this->stack)); $this->append($current_el, $text); } } function feed_end_element ($p, $el) { $el = strtolower($el); if ( $el == 'item' or $el == 'entry' ) { $this->items[] = $this->current_item; $this->current_item = array(); $this->initem = false; } elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) { $this->intextinput = false; } elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) { $this->inimage = false; } elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) { $this->incontent = false; } elseif ($el == 'channel' or $el == 'feed' ) { $this->inchannel = false; } elseif ($this->feed_type == ATOM and $this->incontent ) { // balance tags properly // note: i don't think this is actually neccessary if ( $this->stack[0] == $el ) { $this->append_content(""); } else { $this->append_content("<$el />"); } array_shift( $this->stack ); } else { array_shift( $this->stack ); } $this->current_namespace = false; } function concat (&$str1, $str2="") { if (!isset($str1) ) { $str1=""; } $str1 .= $str2; } function append_content($text) { if ( $this->initem ) { $this->concat( $this->current_item[ $this->incontent ], $text ); } elseif ( $this->inchannel ) { $this->concat( $this->channel[ $this->incontent ], $text ); } } // smart append - field and namespace aware function append($el, $text) { if (!$el) { return; } if ( $this->current_namespace ) { if ( $this->initem ) { $this->concat( $this->current_item[ $this->current_namespace ][ $el ], $text); } elseif ($this->inchannel) { $this->concat( $this->channel[ $this->current_namespace][ $el ], $text ); } elseif ($this->intextinput) { $this->concat( $this->textinput[ $this->current_namespace][ $el ], $text ); } elseif ($this->inimage) { $this->concat( $this->image[ $this->current_namespace ][ $el ], $text ); } } else { if ( $this->initem ) { $this->concat( $this->current_item[ $el ], $text); } elseif ($this->intextinput) { $this->concat( $this->textinput[ $el ], $text ); } elseif ($this->inimage) { $this->concat( $this->image[ $el ], $text ); } elseif ($this->inchannel) { $this->concat( $this->channel[ $el ], $text ); } } } function normalize () { // if atom populate rss fields if ( $this->is_atom() ) { $this->channel['descripton'] = $this->channel['tagline']; for ( $i = 0; $i < count($this->items); $i++) { $item = $this->items[$i]; if ( isset($item['summary']) ) $item['description'] = $item['summary']; if ( isset($item['atom_content'])) $item['content']['encoded'] = $item['atom_content']; $this->items[$i] = $item; } } elseif ( $this->is_rss() ) { $this->channel['tagline'] = $this->channel['description']; for ( $i = 0; $i < count($this->items); $i++) { $item = $this->items[$i]; if ( isset($item['description'])) $item['summary'] = $item['description']; if ( isset($item['content']['encoded'] ) ) $item['atom_content'] = $item['content']['encoded']; $this->items[$i] = $item; } } } function is_rss () { if ( $this->feed_type == RSS ) { return $this->feed_version; } else { return false; } } function is_atom() { if ( $this->feed_type == ATOM ) { return $this->feed_version; } else { return false; } } function map_attrs($k, $v) { return "$k=\"$v\""; } function error( $errormsg, $lvl = E_USER_WARNING ) { // append PHP's error message if track_errors enabled if ( isset($php_errormsg) ) { $errormsg .= " ($php_errormsg)"; } if ( MAGPIE_DEBUG ) { trigger_error( $errormsg, $lvl); } else { error_log( $errormsg, 0); } } } require_once( dirname(__FILE__) . '/class-snoopy.php'); function fetch_rss ($url) { // initialize constants init(); if ( !isset($url) ) { // error("fetch_rss called without a url"); return false; } // if cache is disabled if ( !MAGPIE_CACHE_ON ) { // fetch file, and parse it $resp = _fetch_remote_file( $url ); if ( is_success( $resp->status ) ) { return _response_to_rss( $resp ); } else { // error("Failed to fetch $url and cache is off"); return false; } } // else cache is ON else { // Flow // 1. check cache // 2. if there is a hit, make sure its fresh // 3. if cached obj fails freshness check, fetch remote // 4. if remote fails, return stale object, or error $cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE ); if (MAGPIE_DEBUG and $cache->ERROR) { debug($cache->ERROR, E_USER_WARNING); } $cache_status = 0; // response of check_cache $request_headers = array(); // HTTP headers to send with fetch $rss = 0; // parsed RSS object $errormsg = 0; // errors, if any if (!$cache->ERROR) { // return cache HIT, MISS, or STALE $cache_status = $cache->check_cache( $url ); } // if object cached, and cache is fresh, return cached obj if ( $cache_status == 'HIT' ) { $rss = $cache->get( $url ); if ( isset($rss) and $rss ) { $rss->from_cache = 1; if ( MAGPIE_DEBUG > 1) { debug("MagpieRSS: Cache HIT", E_USER_NOTICE); } return $rss; } } // else attempt a conditional get // setup headers if ( $cache_status == 'STALE' ) { $rss = $cache->get( $url ); if ( $rss->etag and $rss->last_modified ) { $request_headers['If-None-Match'] = $rss->etag; $request_headers['If-Last-Modified'] = $rss->last_modified; } } $resp = _fetch_remote_file( $url, $request_headers ); if (isset($resp) and $resp) { if ($resp->status == '304' ) { // we have the most current copy if ( MAGPIE_DEBUG > 1) { debug("Got 304 for $url"); } // reset cache on 304 (at minutillo insistent prodding) $cache->set($url, $rss); return $rss; } elseif ( is_success( $resp->status ) ) { $rss = _response_to_rss( $resp ); if ( $rss ) { if (MAGPIE_DEBUG > 1) { debug("Fetch successful"); } // add object to cache $cache->set( $url, $rss ); return $rss; } } else { $errormsg = "Failed to fetch $url. "; if ( $resp->error ) { # compensate for Snoopy's annoying habbit to tacking # on '\n' $http_error = substr($resp->error, 0, -2); $errormsg .= "(HTTP Error: $http_error)"; } else { $errormsg .= "(HTTP Response: " . $resp->response_code .')'; } } } else { $errormsg = "Unable to retrieve RSS file for unknown reasons."; } // else fetch failed // attempt to return cached object if ($rss) { if ( MAGPIE_DEBUG ) { debug("Returning STALE object for $url"); } return $rss; } // else we totally failed // error( $errormsg ); return false; } // end if ( !MAGPIE_CACHE_ON ) { } // end fetch_rss() function _fetch_remote_file ($url, $headers = "" ) { // Snoopy is an HTTP client in PHP $client = new Snoopy(); $client->agent = MAGPIE_USER_AGENT; $client->read_timeout = MAGPIE_FETCH_TIME_OUT; $client->use_gzip = MAGPIE_USE_GZIP; if (is_array($headers) ) { $client->rawheaders = $headers; } @$client->fetch($url); return $client; } function _response_to_rss ($resp) { $rss = new MagpieRSS( $resp->results ); // if RSS parsed successfully if ( $rss and !$rss->ERROR) { // find Etag, and Last-Modified foreach($resp->headers as $h) { // 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1" if (strpos($h, ": ")) { list($field, $val) = explode(": ", $h, 2); } else { $field = $h; $val = ""; } if ( $field == 'ETag' ) { $rss->etag = $val; } if ( $field == 'Last-Modified' ) { $rss->last_modified = $val; } } return $rss; } // else construct error message else { $errormsg = "Failed to parse RSS file."; if ($rss) { $errormsg .= " (" . $rss->ERROR . ")"; } // error($errormsg); return false; } // end if ($rss and !$rss->error) } /*=======================================================================*\ Function: init Purpose: setup constants with default values check for user overrides \*=======================================================================*/ function init () { if ( defined('MAGPIE_INITALIZED') ) { return; } else { define('MAGPIE_INITALIZED', 1); } if ( !defined('MAGPIE_CACHE_ON') ) { define('MAGPIE_CACHE_ON', 1); } if ( !defined('MAGPIE_CACHE_DIR') ) { define('MAGPIE_CACHE_DIR', './cache'); } if ( !defined('MAGPIE_CACHE_AGE') ) { define('MAGPIE_CACHE_AGE', 60*60); // one hour } if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) { define('MAGPIE_CACHE_FRESH_ONLY', 0); } if ( !defined('MAGPIE_DEBUG') ) { define('MAGPIE_DEBUG', 0); } if ( !defined('MAGPIE_USER_AGENT') ) { $ua = 'WordPress/' . $GLOBALS['wp_version']; if ( MAGPIE_CACHE_ON ) { $ua = $ua . ')'; } else { $ua = $ua . '; No cache)'; } define('MAGPIE_USER_AGENT', $ua); } if ( !defined('MAGPIE_FETCH_TIME_OUT') ) { define('MAGPIE_FETCH_TIME_OUT', 2); // 2 second timeout } // use gzip encoding to fetch rss files if supported? if ( !defined('MAGPIE_USE_GZIP') ) { define('MAGPIE_USE_GZIP', true); } } function is_info ($sc) { return $sc >= 100 && $sc < 200; } function is_success ($sc) { return $sc >= 200 && $sc < 300; } function is_redirect ($sc) { return $sc >= 300 && $sc < 400; } function is_error ($sc) { return $sc >= 400 && $sc < 600; } function is_client_error ($sc) { return $sc >= 400 && $sc < 500; } function is_server_error ($sc) { return $sc >= 500 && $sc < 600; } class RSSCache { var $BASE_CACHE = 'wp-content/cache'; // where the cache files are stored var $MAX_AGE = 43200; // when are files stale, default twelve hours var $ERROR = ''; // accumulate error messages function RSSCache ($base='', $age='') { if ( $base ) { $this->BASE_CACHE = $base; } if ( $age ) { $this->MAX_AGE = $age; } } /*=======================================================================*\ Function: set Purpose: add an item to the cache, keyed on url Input: url from wich the rss file was fetched Output: true on sucess \*=======================================================================*/ function set ($url, $rss) { global $wpdb; $cache_option = 'rss_' . $this->file_name( $url ); $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; if ( !$wpdb->get_var("SELECT option_name FROM $wpdb->options WHERE option_name = '$cache_option'") ) add_option($cache_option, '', '', 'no'); if ( !$wpdb->get_var("SELECT option_name FROM $wpdb->options WHERE option_name = '$cache_timestamp'") ) add_option($cache_timestamp, '', '', 'no'); update_option($cache_option, $rss); update_option($cache_timestamp, time() ); return $cache_option; } /*=======================================================================*\ Function: get Purpose: fetch an item from the cache Input: url from wich the rss file was fetched Output: cached object on HIT, false on MISS \*=======================================================================*/ function get ($url) { $this->ERROR = ""; $cache_option = 'rss_' . $this->file_name( $url ); if ( ! get_option( $cache_option ) ) { $this->debug( "Cache doesn't contain: $url (cache option: $cache_option)" ); return 0; } $rss = get_option( $cache_option ); return $rss; } /*=======================================================================*\ Function: check_cache Purpose: check a url for membership in the cache and whether the object is older then MAX_AGE (ie. STALE) Input: url from wich the rss file was fetched Output: cached object on HIT, false on MISS \*=======================================================================*/ function check_cache ( $url ) { $this->ERROR = ""; $cache_option = $this->file_name( $url ); $cache_timestamp = 'rss_' . $this->file_name( $url ) . '_ts'; if ( $mtime = get_option($cache_timestamp) ) { // find how long ago the file was added to the cache // and whether that is longer then MAX_AGE $age = time() - $mtime; if ( $this->MAX_AGE > $age ) { // object exists and is current return 'HIT'; } else { // object exists but is old return 'STALE'; } } else { // object does not exist return 'MISS'; } } /*=======================================================================*\ Function: serialize \*=======================================================================*/ function serialize ( $rss ) { return serialize( $rss ); } /*=======================================================================*\ Function: unserialize \*=======================================================================*/ function unserialize ( $data ) { return unserialize( $data ); } /*=======================================================================*\ Function: file_name Purpose: map url to location in cache Input: url from wich the rss file was fetched Output: a file name \*=======================================================================*/ function file_name ($url) { return md5( $url ); } /*=======================================================================*\ Function: error Purpose: register error \*=======================================================================*/ function error ($errormsg, $lvl=E_USER_WARNING) { // append PHP's error message if track_errors enabled if ( isset($php_errormsg) ) { $errormsg .= " ($php_errormsg)"; } $this->ERROR = $errormsg; if ( MAGPIE_DEBUG ) { trigger_error( $errormsg, $lvl); } else { error_log( $errormsg, 0); } } function debug ($debugmsg, $lvl=E_USER_NOTICE) { if ( MAGPIE_DEBUG ) { $this->error("MagpieRSS [debug] $debugmsg", $lvl); } } } function parse_w3cdtf ( $date_str ) { # regex to match wc3dtf $pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/"; if ( preg_match( $pat, $date_str, $match ) ) { list( $year, $month, $day, $hours, $minutes, $seconds) = array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[7]); # calc epoch for current date assuming GMT $epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year); $offset = 0; if ( $match[11] == 'Z' ) { # zulu time, aka GMT } else { list( $tz_mod, $tz_hour, $tz_min ) = array( $match[8], $match[9], $match[10]); # zero out the variables if ( ! $tz_hour ) { $tz_hour = 0; } if ( ! $tz_min ) { $tz_min = 0; } $offset_secs = (($tz_hour*60)+$tz_min)*60; # is timezone ahead of GMT? then subtract offset # if ( $tz_mod == '+' ) { $offset_secs = $offset_secs * -1; } $offset = $offset_secs; } $epoch = $epoch + $offset; return $epoch; } else { return -1; } } function wp_rss ($url, $num_items) { //ini_set("display_errors", false); uncomment to suppress php errors thrown if the feed is not returned. $rss = fetch_rss($url); if ( $rss ) { echo ""; } else { echo "an error has occured the feed is probably down, try again later."; } } function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS $rss = fetch_rss($url); if ( $rss ) { $rss->items = array_slice($rss->items, 0, $num_items); foreach ($rss->items as $item ) { echo "
  • \n"; echo ""; echo htmlentities($item['title']); echo "
    \n"; echo "
  • \n"; } } else { return false; } } ?>?wordpress/wp-includes/.svn/text-base/script-loader.php.svn-base8default_scripts(); } function default_scripts() { $this->add( 'dbx', '/wp-includes/js/dbx.js', false, '2.05' ); $this->add( 'fat', '/wp-includes/js/fat.js', false, '1.0-RC1_3660' ); $this->add( 'sack', '/wp-includes/js/tw-sack.js', false, '1.6.1' ); $this->add( 'quicktags', '/wp-includes/js/quicktags.js', false, '3958' ); $this->localize( 'quicktags', 'quicktagsL10n', array( 'quickLinks' => __('(Quick Links)'), 'wordLookup' => __('Enter a word to look up:'), 'dictionaryLookup' => attribute_escape(__('Dictionary lookup')), 'lookup' => attribute_escape(__('lookup')), 'closeAllOpenTags' => attribute_escape(__('Close all open tags')), 'closeTags' => attribute_escape(__('close tags')), 'enterURL' => __('Enter the URL'), 'enterImageURL' => __('Enter the URL of the image'), 'enterImageDescription' => __('Enter a description of the image') ) ); $this->add( 'colorpicker', '/wp-includes/js/colorpicker.js', false, '3517' ); $this->add( 'tiny_mce', '/wp-includes/js/tinymce/tiny_mce_gzip.php', false, '20070326' ); $mce_config = apply_filters('tiny_mce_config_url', '/wp-includes/js/tinymce/tiny_mce_config.php'); $this->add( 'wp_tiny_mce', $mce_config, array('tiny_mce'), '20070225' ); $this->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.5.0-0'); $this->add( 'autosave', '/wp-includes/js/autosave.js', array('prototype', 'sack'), '20070306'); $this->localize( 'autosave', 'autosaveL10n', array( 'autosaveInterval' => apply_filters('autosave_interval', '120'), 'errorText' => __('Error: %response%'), 'saveText' => __('Saved at %time%.'), 'requestFile' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php', 'savingText' => __('Saving Draft...') ) ); $this->add( 'wp-ajax', '/wp-includes/js/wp-ajax.js', array('prototype'), '20070306'); $this->localize( 'wp-ajax', 'WPAjaxL10n', array( 'defaultUrl' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php', 'permText' => __("You don't have permission to do that."), 'strangeText' => __("Something strange happened. Try refreshing the page."), 'whoaText' => __("Slow down, I'm still sending your data!") ) ); $this->add( 'listman', '/wp-includes/js/list-manipulation.js', array('wp-ajax', 'fat'), '20070306' ); $this->localize( 'listman', 'listManL10n', array( 'jumpText' => __('Jump to new item'), 'delText' => __('Are you sure you want to delete this %thing%?') ) ); $this->add( 'scriptaculous-root', '/wp-includes/js/scriptaculous/wp-scriptaculous.js', array('prototype'), '1.7.0'); $this->add( 'scriptaculous-builder', '/wp-includes/js/scriptaculous/builder.js', array('scriptaculous-root'), '1.7.0'); $this->add( 'scriptaculous-dragdrop', '/wp-includes/js/scriptaculous/dragdrop.js', array('scriptaculous-builder', 'scriptaculous-effects'), '1.7.0'); $this->add( 'scriptaculous-effects', '/wp-includes/js/scriptaculous/effects.js', array('scriptaculous-root'), '1.7.0'); $this->add( 'scriptaculous-slider', '/wp-includes/js/scriptaculous/slider.js', array('scriptaculous-effects'), '1.7.0'); $this->add( 'scriptaculous-controls', '/wp-includes/js/scriptaculous/controls.js', array('scriptaculous-root'), '1.7.0'); $this->add( 'scriptaculous', '', array('scriptaculous-dragdrop', 'scriptaculous-slider', 'scriptaculous-controls'), '1.7.0'); $this->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop'), '20070118'); $this->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.1.2'); $this->add( 'interface', '/wp-includes/js/jquery/interface.js', array('jquery'), '1.2'); if ( is_admin() ) { global $pagenow; $man = false; switch ( $pagenow ) : case 'post.php' : case 'post-new.php' : $man = 'postmeta'; break; case 'page.php' : case 'page-new.php' : $man = 'pagemeta'; break; case 'link-add.php' : case 'link.php' : $man = 'linkmeta'; break; endswitch; if ( $man ) { $this->add( 'dbx-admin-key', '/wp-admin/dbx-admin-key.js', array('dbx'), '20070417' ); $this->localize( 'dbx-admin-key', 'dbxL10n', array( 'manager' => $man, 'open' => __('open'), 'close' => __('close'), 'moveMouse' => __('click-down and drag to move this box'), 'toggleMouse' => __('click to %toggle% this box'), 'moveKey' => __('use the arrow keys to move this box'), 'toggleKey' => __(', or press the enter key to %toggle% it'), ) ); } $this->add( 'ajaxcat', '/wp-admin/cat.js', array('listman'), '20070417' ); $this->localize( 'ajaxcat', 'catL10n', array( 'add' => attribute_escape(__('Add')), 'how' => __('Separate multiple categories with commas.') ) ); $this->add( 'admin-categories', '/wp-admin/categories.js', array('listman'), '3684' ); $this->add( 'admin-custom-fields', '/wp-admin/custom-fields.js', array('listman'), '3733' ); $this->add( 'admin-comments', '/wp-admin/edit-comments.js', array('listman'), '20070327' ); $this->add( 'admin-users', '/wp-admin/users.js', array('listman'), '4583' ); $this->add( 'xfn', '/wp-admin/xfn.js', false, '3517' ); $this->add( 'upload', '/wp-admin/upload.js', array('prototype'), '20070306' ); $this->localize( 'upload', 'uploadL10n', array( 'browseTitle' => attribute_escape(__('Browse your files')), 'back' => __('« Back'), 'directTitle' => attribute_escape(__('Direct link to file')), 'edit' => __('Edit'), 'thumb' => __('Thumbnail'), 'full' => __('Full size'), 'icon' => __('Icon'), 'title' => __('Title'), 'show' => __('Show:'), 'link' => __('Link to:'), 'file' => __('File'), 'page' => __('Page'), 'none' => __('None'), 'editorText' => attribute_escape(__('Send to editor »')), 'insert' => __('Insert'), 'urlText' => __('URL'), 'desc' => __('Description'), 'deleteText' => attribute_escape(__('Delete File')), 'saveText' => attribute_escape(__('Save »')), 'confirmText' => __("Are you sure you want to delete the file '%title%'?\nClick ok to delete or cancel to go back.") ) ); } } /** * Prints script tags * * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies. * * @param mixed handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts. * @return array Scripts that have been printed */ function print_scripts( $handles = false ) { // Print the queue if nothing is passed. If a string is passed, print that script. If an array is passed, print those scripts. $handles = false == $handles ? $this->queue : (array) $handles; $handles = $this->all_deps( $handles ); $this->_print_scripts( $handles ); return $this->printed; } /** * Internally used helper function for printing script tags * * @param array handles Hierarchical array of scripts to be printed * @see WP_Scripts::all_deps() */ function _print_scripts( $handles ) { global $wp_db_version; foreach( array_keys($handles) as $handle ) { if ( !$handles[$handle] ) return; elseif ( is_array($handles[$handle]) ) $this->_print_scripts( $handles[$handle] ); if ( !in_array($handle, $this->printed) && isset($this->scripts[$handle]) ) { if ( $this->scripts[$handle]->src ) { // Else it defines a group. $ver = $this->scripts[$handle]->ver ? $this->scripts[$handle]->ver : $wp_db_version; if ( isset($this->args[$handle]) ) $ver .= '&' . $this->args[$handle]; $src = 0 == strpos($this->scripts[$handle]->src, 'http://') ? $this->scripts[$handle]->src : get_option( 'siteurl' ) . $this->scripts[$handle]->src; $src = $this->scripts[$handle]->src; if (!preg_match('|^https?://|', $src)) { $src = get_option('siteurl') . $src; } $src = add_query_arg('ver', $ver, $src); $src = clean_url(apply_filters( 'script_loader_src', $src )); echo "\n"; $this->print_scripts_l10n( $handle ); } $this->printed[] = $handle; } } } function print_scripts_l10n( $handle ) { if ( empty($this->scripts[$handle]->l10n_object) || empty($this->scripts[$handle]->l10n) || !is_array($this->scripts[$handle]->l10n) ) return; $object_name = $this->scripts[$handle]->l10n_object; echo "\n"; } /** * Determines dependencies of scripts * * Recursively builds hierarchical array of script dependencies. Does NOT catch infinite loops. * * @param mixed handles Accepts (string) script name or (array of strings) script names * @param bool recursion Used internally when function calls itself * @return array Hierarchical array of dependencies */ function all_deps( $handles, $recursion = false ) { if ( ! $handles = (array) $handles ) return array(); $return = array(); foreach ( $handles as $handle ) { $handle = explode('?', $handle); if ( isset($handle[1]) ) $this->args[$handle[0]] = $handle[1]; $handle = $handle[0]; if ( is_null($return[$handle]) ) // Prime the return array with $handles $return[$handle] = true; if ( $this->scripts[$handle]->deps ) { if ( false != $return[$handle] && array_diff($this->scripts[$handle]->deps, array_keys($this->scripts)) ) $return[$handle] = false; // Script required deps which don't exist else $return[$handle] = $this->all_deps( $this->scripts[$handle]->deps, true ); // Build the hierarchy } if ( $recursion && false == $return[$handle] ) return false; // Cut the branch } return $return; } /** * Adds script * * Adds the script only if no script of that name already exists * * @param string handle Script name * @param string src Script url * @param array deps (optional) Array of script names on which this script depends * @param string ver (optional) Script version (used for cache busting) * @return array Hierarchical array of dependencies */ function add( $handle, $src, $deps = array(), $ver = false ) { if ( isset($this->scripts[$handle]) ) return false; $this->scripts[$handle] = new _WP_Script( $handle, $src, $deps, $ver ); return true; } /** * Localizes a script * * Localizes only if script has already been added * * @param string handle Script name * @param string object_name Name of JS object to hold l10n info * @param array l10n Array of JS var name => localized string * @return bool Successful localization */ function localize( $handle, $object_name, $l10n ) { if ( !isset($this->scripts[$handle]) ) return false; return $this->scripts[$handle]->localize( $object_name, $l10n ); } function remove( $handles ) { foreach ( (array) $handles as $handle ) unset($this->scripts[$handle]); } function enqueue( $handles ) { foreach ( (array) $handles as $handle ) { $handle = explode('?', $handle); if ( !in_array($handle[0], $this->queue) && isset($this->scripts[$handle[0]]) ) { $this->queue[] = $handle[0]; if ( isset($handle[1]) ) $this->args[$handle[0]] = $handle[1]; } } } function dequeue( $handles ) { foreach ( (array) $handles as $handle ) unset( $this->queue[$handle] ); } function query( $handle, $list = 'scripts' ) { // scripts, queue, or printed switch ( $list ) : case 'scripts': if ( isset($this->scripts[$handle]) ) return $this->scripts[$handle]; break; default: if ( in_array($handle, $this->$list) ) return true; break; endswitch; return false; } } class _WP_Script { var $handle; var $src; var $deps = array(); var $ver = false; var $l10n_object = ''; var $l10n = array(); function _WP_Script() { @list($this->handle, $this->src, $this->deps, $this->ver) = func_get_args(); if ( !is_array($this->deps) ) $this->deps = array(); if ( !$this->ver ) $this->ver = false; } function localize( $object_name, $l10n ) { if ( !$object_name || !is_array($l10n) ) return false; $this->l10n_object = $object_name; $this->l10n = $l10n; return true; } } /** * Prints script tags in document head * * Called by admin-header.php and by wp_head hook. Since it is called by wp_head on every page load, * the function does not instantiate the WP_Scripts object unless script names are explicitly passed. * Does make use of already instantiated $wp_scripts if present. * Use provided wp_print_scripts hook to register/enqueue new scripts. * * @see WP_Scripts::print_scripts() */ function wp_print_scripts( $handles = false ) { do_action( 'wp_print_scripts' ); if ( '' == $handles ) // for wp_head $handles = false; global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) { if ( !$handles ) return array(); // No need to instantiate if nothing's there. else $wp_scripts = new WP_Scripts(); } return $wp_scripts->print_scripts( $handles ); } function wp_register_script( $handle, $src, $deps = array(), $ver = false ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); $wp_scripts->add( $handle, $src, $deps, $ver ); } /** * Localizes a script * * Localizes only if script has already been added * * @see WP_Script::localize() */ function wp_localize_script( $handle, $object_name, $l10n ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) return false; return $wp_scripts->localize( $handle, $object_name, $l10n ); } function wp_deregister_script( $handle ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); $wp_scripts->remove( $handle ); } /** * Equeues script * * Registers the script if src provided (does NOT overwrite) and enqueues. * * @see WP_Script::add(), WP_Script::enqueue() */ function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false ) { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); if ( $src ) { $_handle = explode('?', $handle); $wp_scripts->add( $_handle[0], $src, $deps, $ver ); } $wp_scripts->enqueue( $handle ); } ?> 9wordpress/wp-includes/.svn/text-base/streams.php.svn-base. This file is part of PHP-gettext. PHP-gettext 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. PHP-gettext 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 PHP-gettext; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // Simple class to wrap file streams, string streams, etc. // seek is essential, and it should be byte stream class StreamReader { // should return a string [FIXME: perhaps return array of bytes?] function read($bytes) { return false; } // should return new position function seekto($position) { return false; } // returns current position function currentpos() { return false; } // returns length of entire stream (limit for seekto()s) function length() { return false; } } class StringReader { var $_pos; var $_str; function StringReader($str='') { $this->_str = $str; $this->_pos = 0; } function read($bytes) { $data = substr($this->_str, $this->_pos, $bytes); $this->_pos += $bytes; if (strlen($this->_str)<$this->_pos) $this->_pos = strlen($this->_str); return $data; } function seekto($pos) { $this->_pos = $pos; if (strlen($this->_str)<$this->_pos) $this->_pos = strlen($this->_str); return $this->_pos; } function currentpos() { return $this->_pos; } function length() { return strlen($this->_str); } } class FileReader { var $_pos; var $_fd; var $_length; function FileReader($filename) { if (file_exists($filename)) { $this->_length=filesize($filename); $this->_pos = 0; $this->_fd = fopen($filename,'rb'); if (!$this->_fd) { $this->error = 3; // Cannot read file, probably permissions return false; } } else { $this->error = 2; // File doesn't exist return false; } } function read($bytes) { if ($bytes) { fseek($this->_fd, $this->_pos); // PHP 5.1.1 does not read more than 8192 bytes in one fread() // the discussions at PHP Bugs suggest it's the intended behaviour while ($bytes > 0) { $chunk = fread($this->_fd, $bytes); $data .= $chunk; $bytes -= strlen($chunk); } $this->_pos = ftell($this->_fd); return $data; } else return ''; } function seekto($pos) { fseek($this->_fd, $pos); $this->_pos = ftell($this->_fd); return $this->_pos; } function currentpos() { return $this->_pos; } function length() { return $this->_length; } function close() { fclose($this->_fd); } } // Preloads entire file in memory first, then creates a StringReader // over it (it assumes knowledge of StringReader internals) class CachedFileReader extends StringReader { function CachedFileReader($filename) { if (file_exists($filename)) { $length=filesize($filename); $fd = fopen($filename,'rb'); if (!$fd) { $this->error = 3; // Cannot read file, probably permissions return false; } $this->_str = fread($fd, $length); fclose($fd); } else { $this->error = 2; // File doesn't exist return false; } } } ?>Awordpress/wp-includes/.svn/text-base/template-loader.php.svn-base)7wordpress/wp-includes/.svn/text-base/theme.php.svn-basetext_direction) && file_exists("$dir/{$wp_locale->text_direction}.css") ) $stylesheet_uri = "$stylesheet_dir_uri/{$wp_locale->text_direction}.css"; else $stylesheet_uri = ''; return apply_filters('locale_stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri); } function get_template() { return apply_filters('template', get_option('template')); } function get_template_directory() { $template = get_template(); $template_dir = get_theme_root() . "/$template"; return apply_filters('template_directory', $template_dir, $template); } function get_template_directory_uri() { $template = get_template(); $template_dir_uri = get_theme_root_uri() . "/$template"; return apply_filters('template_directory_uri', $template_dir_uri, $template); } function get_theme_data( $theme_file ) { $theme_data = implode( '', file( $theme_file ) ); $theme_data = str_replace ( '\r', '\n', $theme_data ); preg_match( '|Theme Name:(.*)|i', $theme_data, $theme_name ); preg_match( '|Theme URI:(.*)|i', $theme_data, $theme_uri ); preg_match( '|Description:(.*)|i', $theme_data, $description ); preg_match( '|Author:(.*)|i', $theme_data, $author_name ); preg_match( '|Author URI:(.*)|i', $theme_data, $author_uri ); preg_match( '|Template:(.*)|i', $theme_data, $template ); if ( preg_match( '|Version:(.*)|i', $theme_data, $version ) ) $version = trim( $version[1] ); else $version =''; if ( preg_match('|Status:(.*)|i', $theme_data, $status) ) $status = trim($status[1]); else $status = 'publish'; $description = wptexturize( trim( $description[1] ) ); $name = $theme_name[1]; $name = trim( $name ); $theme = $name; $theme_uri = trim( $theme_uri[1] ); $template = trim( $template[1] ); if ( '' == $author_uri[1] ) { $author = trim( $author_name[1] ); } else { $author = '' . trim( $author_name[1] ) . ''; } return array( 'Name' => $name, 'Title' => $theme, 'URI' => $theme_uri, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template, 'Status' => $status ); } function get_themes() { global $wp_themes, $wp_broken_themes; if ( isset($wp_themes) ) return $wp_themes; $themes = array(); $wp_broken_themes = array(); $theme_root = get_theme_root(); $theme_loc = str_replace(ABSPATH, '', $theme_root); // Files in wp-content/themes directory and one subdir down $themes_dir = @ dir($theme_root); if ( !$themes_dir ) return false; while ( ($theme_dir = $themes_dir->read()) != false ) { if ( is_dir($theme_root . '/' . $theme_dir) && is_readable($theme_root . '/' . $theme_dir) ) { if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' ) continue; $stylish_dir = @ dir($theme_root . '/' . $theme_dir); $found_stylesheet = false; while ( ($theme_file = $stylish_dir->read()) != false ) { if ( $theme_file == 'style.css' ) { $theme_files[] = $theme_dir . '/' . $theme_file; $found_stylesheet = true; break; } } if ( !$found_stylesheet ) { // look for themes in that dir $subdir = "$theme_root/$theme_dir"; $subdir_name = $theme_dir; $theme_subdir = @dir( $subdir ); while ( ($theme_dir = $theme_subdir->read()) != false ) { if ( is_dir( $subdir . '/' . $theme_dir) && is_readable($subdir . '/' . $theme_dir) ) { if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' ) continue; $stylish_dir = @ dir($subdir . '/' . $theme_dir); $found_stylesheet = false; while ( ($theme_file = $stylish_dir->read()) != false ) { if ( $theme_file == 'style.css' ) { $theme_files[] = $subdir_name . '/' . $theme_dir . '/' . $theme_file; $found_stylesheet = true; break; } } } } $wp_broken_themes[$theme_dir] = array('Name' => $theme_dir, 'Title' => $theme_dir, 'Description' => __('Stylesheet is missing.')); } } } if ( !$themes_dir || !$theme_files ) return $themes; sort($theme_files); foreach ( (array) $theme_files as $theme_file ) { if ( !is_readable("$theme_root/$theme_file") ) { $wp_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.')); continue; } $theme_data = get_theme_data("$theme_root/$theme_file"); $name = $theme_data['Name']; $title = $theme_data['Title']; $description = wptexturize($theme_data['Description']); $version = $theme_data['Version']; $author = $theme_data['Author']; $template = $theme_data['Template']; $stylesheet = dirname($theme_file); $screenshot = false; foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) { if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) { $screenshot = "screenshot.$ext"; break; } } if ( empty($name) ) { $name = dirname($theme_file); $title = $name; } if ( empty($template) ) { if ( file_exists(dirname("$theme_root/$theme_file/index.php")) ) $template = dirname($theme_file); else continue; } $template = trim($template); if ( !file_exists("$theme_root/$template/index.php") ) { $parent_dir = dirname(dirname($theme_file)); if ( file_exists("$theme_root/$parent_dir/$template/index.php") ) { $template = "$parent_dir/$template"; } else { $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.')); continue; } } $stylesheet_files = array(); $stylesheet_dir = @ dir("$theme_root/$stylesheet"); if ( $stylesheet_dir ) { while ( ($file = $stylesheet_dir->read()) != false ) { if ( !preg_match('|^\.+$|', $file) && preg_match('|\.css$|', $file) ) $stylesheet_files[] = "$theme_loc/$stylesheet/$file"; } } $template_files = array(); $template_dir = @ dir("$theme_root/$template"); if ( $template_dir ) { while(($file = $template_dir->read()) != false) { if ( !preg_match('|^\.+$|', $file) && preg_match('|\.php$|', $file) ) $template_files[] = "$theme_loc/$template/$file"; } } $template_dir = dirname($template_files[0]); $stylesheet_dir = dirname($stylesheet_files[0]); if ( empty($template_dir) ) $template_dir = '/'; if ( empty($stylesheet_dir) ) $stylesheet_dir = '/'; // Check for theme name collision. This occurs if a theme is copied to // a new theme directory and the theme header is not updated. Whichever // theme is first keeps the name. Subsequent themes get a suffix applied. // The Default and Classic themes always trump their pretenders. if ( isset($themes[$name]) ) { if ( ('WordPress Default' == $name || 'WordPress Classic' == $name) && ('default' == $stylesheet || 'classic' == $stylesheet) ) { // If another theme has claimed to be one of our default themes, move // them aside. $suffix = $themes[$name]['Stylesheet']; $new_name = "$name/$suffix"; $themes[$new_name] = $themes[$name]; $themes[$new_name]['Name'] = $new_name; } else { $name = "$name/$stylesheet"; } } $themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template, 'Stylesheet' => $stylesheet, 'Template Files' => $template_files, 'Stylesheet Files' => $stylesheet_files, 'Template Dir' => $template_dir, 'Stylesheet Dir' => $stylesheet_dir, 'Status' => $theme_data['Status'], 'Screenshot' => $screenshot); } // Resolve theme dependencies. $theme_names = array_keys($themes); foreach ( (array) $theme_names as $theme_name ) { $themes[$theme_name]['Parent Theme'] = ''; if ( $themes[$theme_name]['Stylesheet'] != $themes[$theme_name]['Template'] ) { foreach ( (array) $theme_names as $parent_theme_name ) { if ( ($themes[$parent_theme_name]['Stylesheet'] == $themes[$parent_theme_name]['Template']) && ($themes[$parent_theme_name]['Template'] == $themes[$theme_name]['Template']) ) { $themes[$theme_name]['Parent Theme'] = $themes[$parent_theme_name]['Name']; break; } } } } $wp_themes = $themes; return $themes; } function get_theme($theme) { $themes = get_themes(); if ( array_key_exists($theme, $themes) ) return $themes[$theme]; return NULL; } function get_current_theme() { $themes = get_themes(); $theme_names = array_keys($themes); $current_template = get_option('template'); $current_stylesheet = get_option('stylesheet'); $current_theme = 'WordPress Default'; if ( $themes ) { foreach ( (array) $theme_names as $theme_name ) { if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet && $themes[$theme_name]['Template'] == $current_template ) { $current_theme = $themes[$theme_name]['Name']; break; } } } return $current_theme; } function get_theme_root() { return apply_filters('theme_root', ABSPATH . "wp-content/themes"); } function get_theme_root_uri() { return apply_filters('theme_root_uri', get_option('siteurl') . "/wp-content/themes", get_option('siteurl')); } function get_query_template($type) { $template = ''; if ( file_exists(TEMPLATEPATH . "/{$type}.php") ) $template = TEMPLATEPATH . "/{$type}.php"; return apply_filters("{$type}_template", $template); } function get_404_template() { return get_query_template('404'); } function get_archive_template() { return get_query_template('archive'); } function get_author_template() { return get_query_template('author'); } function get_category_template() { $template = ''; if ( file_exists(TEMPLATEPATH . "/category-" . get_query_var('cat') . '.php') ) $template = TEMPLATEPATH . "/category-" . get_query_var('cat') . '.php'; elseif ( file_exists(TEMPLATEPATH . "/category.php") ) $template = TEMPLATEPATH . "/category.php"; return apply_filters('category_template', $template); } function get_date_template() { return get_query_template('date'); } function get_home_template() { $template = ''; if ( file_exists(TEMPLATEPATH . "/home.php") ) $template = TEMPLATEPATH . "/home.php"; elseif ( file_exists(TEMPLATEPATH . "/index.php") ) $template = TEMPLATEPATH . "/index.php"; return apply_filters('home_template', $template); } function get_page_template() { global $wp_query; $id = (int) $wp_query->post->ID; $template = get_post_meta($id, '_wp_page_template', true); if ( 'default' == $template ) $template = ''; if ( !empty($template) && file_exists(TEMPLATEPATH . "/$template") ) $template = TEMPLATEPATH . "/$template"; elseif ( file_exists(TEMPLATEPATH . "/page.php") ) $template = TEMPLATEPATH . "/page.php"; else $template = ''; return apply_filters('page_template', $template); } function get_paged_template() { return get_query_template('paged'); } function get_search_template() { return get_query_template('search'); } function get_single_template() { return get_query_template('single'); } function get_attachment_template() { global $posts; $type = explode('/', $posts[0]->post_mime_type); if ( $template = get_query_template($type[0]) ) return $template; elseif ( $template = get_query_template($type[1]) ) return $template; elseif ( $template = get_query_template("$type[0]_$type[1]") ) return $template; else return get_query_template('attachment'); } function get_comments_popup_template() { if ( file_exists( TEMPLATEPATH . '/comments-popup.php') ) $template = TEMPLATEPATH . '/comments-popup.php'; else $template = get_theme_root() . '/default/comments-popup.php'; return apply_filters('comments_popup_template', $template); } function load_template($_template_file) { global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment; if ( is_array($wp_query->query_vars) ) extract($wp_query->query_vars, EXTR_SKIP); require_once($_template_file); } function locale_stylesheet() { $stylesheet = get_locale_stylesheet_uri(); if ( empty($stylesheet) ) return; echo ''; } function validate_current_theme() { // Don't validate during an install/upgrade. if ( defined('WP_INSTALLING') ) return true; if ( get_template() != 'default' && !file_exists(get_template_directory() . '/index.php') ) { update_option('template', 'default'); update_option('stylesheet', 'default'); do_action('switch_theme', 'Default'); return false; } if ( get_stylesheet() != 'default' && !file_exists(get_template_directory() . '/style.css') ) { update_option('template', 'default'); update_option('stylesheet', 'default'); do_action('switch_theme', 'Default'); return false; } return true; } function get_theme_mod($name, $default = false) { $theme = get_current_theme(); $mods = get_option("mods_$theme"); if ( isset($mods[$name]) ) return apply_filters( "theme_mod_$name", $mods[$name] ); return apply_filters( "theme_mod_$name", sprintf($default, get_template_directory_uri()) ); } function set_theme_mod($name, $value) { $theme = get_current_theme(); $mods = get_option("mods_$theme"); $mods[$name] = $value; update_option("mods_$theme", $mods); wp_cache_delete("mods_$theme", 'options'); } function remove_theme_mod( $name ) { $theme = get_current_theme(); $mods = get_option("mods_$theme"); if ( !isset($mods[$name]) ) return; unset($mods[$name]); if ( empty($mods) ) return remove_theme_mods(); update_option("mods_$theme", $mods); wp_cache_delete("mods_$theme", 'options'); } function remove_theme_mods() { $theme = get_current_theme(); delete_option("mods_$theme"); } function get_header_textcolor() { return get_theme_mod('header_textcolor', HEADER_TEXTCOLOR); } function header_textcolor() { echo get_header_textcolor(); } function get_header_image() { return get_theme_mod('header_image', HEADER_IMAGE); } function header_image() { echo get_header_image(); } function add_custom_image_header($header_callback, $admin_header_callback) { if ( ! empty($header_callback) ) add_action('wp_head', $header_callback); if ( ! is_admin() ) return; require_once(ABSPATH . 'wp-admin/custom-header.php'); $GLOBALS['custom_image_header'] =& new Custom_Image_Header($admin_header_callback); add_action('admin_menu', array(&$GLOBALS['custom_image_header'], 'init')); } ?> 6wordpress/wp-includes/.svn/text-base/user.php.svn-baseescape($_COOKIE[USER_COOKIE]); return $wpdb->get_var("SELECT $field FROM $wpdb->users WHERE user_login = '$user'"); } function get_usernumposts($userid) { global $wpdb; $userid = (int) $userid; return $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = " . $userid . " AND post_type = 'post' AND " . get_private_posts_cap_sql('post')); } // TODO: xmlrpc only. Maybe move to xmlrpc.php. function user_pass_ok($user_login,$user_pass) { global $cache_userdata; if ( empty($cache_userdata[$user_login]) ) { $userdata = get_userdatabylogin($user_login); } else { $userdata = $cache_userdata[$user_login]; } return (md5($user_pass) == $userdata->user_pass); } // // User option functions // function get_user_option( $option, $user = 0 ) { global $wpdb; if ( empty($user) ) $user = wp_get_current_user(); else $user = get_userdata($user); if ( isset( $user->{$wpdb->prefix . $option} ) ) // Blog specific return $user->{$wpdb->prefix . $option}; elseif ( isset( $user->{$option} ) ) // User specific and cross-blog return $user->{$option}; else // Blog global return get_option( $option ); } function update_user_option( $user_id, $option_name, $newvalue, $global = false ) { global $wpdb; if ( !$global ) $option_name = $wpdb->prefix . $option_name; return update_usermeta( $user_id, $option_name, $newvalue ); } // Get users with capabilities for the current blog. // For setups that use the multi-blog feature. function get_users_of_blog( $id = '' ) { global $wpdb, $blog_id; if ( empty($id) ) $id = (int) $blog_id; $users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE " . $wpdb->users . ".ID = " . $wpdb->usermeta . ".user_id AND meta_key = '" . $wpdb->prefix . "capabilities' ORDER BY {$wpdb->usermeta}.user_id" ); return $users; } // // User meta functions // function delete_usermeta( $user_id, $meta_key, $meta_value = '' ) { global $wpdb; if ( !is_numeric( $user_id ) ) return false; $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); if ( is_array($meta_value) || is_object($meta_value) ) $meta_value = serialize($meta_value); $meta_value = trim( $meta_value ); if ( ! empty($meta_value) ) $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key' AND meta_value = '$meta_value'"); else $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); $user = get_userdata($user_id); wp_cache_delete($user_id, 'users'); wp_cache_delete($user->user_login, 'userlogins'); return true; } function get_usermeta( $user_id, $meta_key = '') { global $wpdb; $user_id = (int) $user_id; if ( !empty($meta_key) ) { $meta_key = preg_replace('|[^a-z0-9_.]|i', '', $meta_key); $metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); } else { $metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user_id); } if ( empty($metas) ) { if ( empty($meta_key) ) return array(); else return ''; } foreach ($metas as $index => $meta) { @ $value = unserialize($meta->meta_value); if ( $value == FALSE ) $value = $meta->meta_value; $values[] = $value; } if ( count($values) == 1 ) return $values[0]; else return $values; } function update_usermeta( $user_id, $meta_key, $meta_value ) { global $wpdb; if ( !is_numeric( $user_id ) ) { return false; } $meta_key = preg_replace('|[^a-z0-9_.]|i', '', $meta_key); // FIXME: usermeta data is assumed to be already escaped if ( is_string($meta_value) ) $meta_value = stripslashes($meta_value); $meta_value = maybe_serialize($meta_value); $meta_value = $wpdb->escape($meta_value); if (empty($meta_value)) { return delete_usermeta($user_id, $meta_key); } $cur = $wpdb->get_row("SELECT * FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); if ( !$cur ) { $wpdb->query("INSERT INTO $wpdb->usermeta ( user_id, meta_key, meta_value ) VALUES (" . $user_id . ", '$meta_key', '$meta_value' )"); } else if ( $cur->meta_value != $meta_value ) { $wpdb->query("UPDATE $wpdb->usermeta SET meta_value = '$meta_value' WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); } else { return false; } $user = get_userdata($user_id); wp_cache_delete($user_id, 'users'); wp_cache_delete($user->user_login, 'userlogins'); return true; } // // Private helper functions // // Setup global user vars. Used by set_current_user() for back compat. function setup_userdata($user_id = 0) { global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_pass_md5, $user_identity; if ( 0 == $user_id ) $user = wp_get_current_user(); else $user = new WP_User($user_id); if ( 0 == $user->ID ) return; $userdata = $user->data; $user_login = $user->user_login; $user_level = (int) $user->user_level; $user_ID = (int) $user->ID; $user_email = $user->user_email; $user_url = $user->user_url; $user_pass_md5 = md5($user->user_pass); $user_identity = $user->display_name; } ?> 6wordpress/wp-includes/.svn/text-base/vars.php.svn-base89wordpress/wp-includes/.svn/text-base/version.php.svn-base 9wordpress/wp-includes/.svn/text-base/widgets.php.svn-base 1 ) { $_args['name'] = isset($args['name']) ? $args['name'] : sprintf(__('Sidebar %d'), $i); } else { $_args['name'] = isset($args['name']) ? $args['name'] : __('Sidebar'); } $_args['id'] = isset($args['id']) ? $args['id'] : "sidebar-$i"; register_sidebar($_args); ++$i; } } function register_sidebar($args = array()) { global $wp_registered_sidebars; if ( is_string($args) ) parse_str($args, $args); $i = count($wp_registered_sidebars) + 1; $defaults = array( 'name' => sprintf(__('Sidebar %d'), $i ), 'id' => "sidebar-$i", 'before_widget' => '
  • ', 'after_widget' => "
  • \n", 'before_title' => '

    ', 'after_title' => "

    \n", ); $sidebar = array_merge($defaults, $args); $wp_registered_sidebars[$sidebar['id']] = $sidebar; return $sidebar['id']; } function unregister_sidebar( $name ) { global $wp_registered_sidebars; if ( isset( $wp_registered_sidebars[$name] ) ) unset( $wp_registered_sidebars[$name] ); } function register_sidebar_widget($name, $output_callback, $classname = '') { // Compat if ( is_array($name) ) { if ( count($name) == 3 ) $name = sprintf($name[0], $name[2]); else $name = $name[0]; } $id = sanitize_title($name); $options = array(); if ( !empty($classname) && is_string($classname) ) $options['classname'] = $classname; $params = array_slice(func_get_args(), 2); $args = array($id, $name, $output_callback, $options); if ( !empty($params) ) $args = array_merge($args, $params); call_user_func_array('wp_register_sidebar_widget', $args); } function wp_register_sidebar_widget($id, $name, $output_callback, $options = array()) { global $wp_registered_widgets, $wp_register_widget_defaults; $id = sanitize_title($id); if ( empty($output_callback) ) { unset($wp_registered_widgets[$id]); return; } $defaults = array('classname' => $output_callback); $options = wp_parse_args($options, $defaults); $widget = array( 'name' => $name, 'id' => $id, 'callback' => $output_callback, 'params' => array_slice(func_get_args(), 4) ); $widget = array_merge($widget, $options); if ( is_callable($output_callback) && ( !isset($wp_registered_widgets[$id]) || !$wp_register_widget_defaults) ) $wp_registered_widgets[$id] = $widget; } function unregister_sidebar_widget($id) { return wp_unregister_sidebar_widget($id); } function wp_unregister_sidebar_widget($id) { wp_register_sidebar_widget($id, '', ''); wp_unregister_widget_control($id); } function register_widget_control($name, $control_callback, $width = '', $height = '') { // Compat if ( is_array($name) ) { if ( count($name) == 3 ) $name = sprintf($name[0], $name[2]); else $name = $name[0]; } $id = sanitize_title($name); $options = array(); if ( !empty($width) ) $options['width'] = $width; if ( !empty($height) ) $options['height'] = $height; $params = array_slice(func_get_args(), 4); $args = array($id, $name, $control_callback, $options); if ( !empty($params) ) $args = array_merge($args, $params); call_user_func_array('wp_register_widget_control', $args); } function wp_register_widget_control($id, $name, $control_callback, $options = array()) { global $wp_registered_widget_controls, $wp_register_widget_defaults; $id = sanitize_title($id); if ( empty($control_callback) ) { unset($wp_registered_widget_controls[$id]); return; } if ( isset($wp_registered_widget_controls[$id]) && $wp_register_widget_defaults ) return; $defaults = array('width' => 300, 'height' => 200); $options = wp_parse_args($options, $defaults); $options['width'] = (int) $options['width']; $options['height'] = (int) $options['height']; $options['width'] = $options['width'] > 90 ? $options['width'] + 60 : 360; $options['height'] = $options['height'] > 60 ? $options['height'] + 40 : 240; $widget = array( 'name' => $name, 'id' => $id, 'callback' => $control_callback, 'params' => array_slice(func_get_args(), 4) ); $widget = array_merge($widget, $options); $wp_registered_widget_controls[$id] = $widget; } function unregister_widget_control($id) { return wp_unregister_widget_control($id); } function wp_unregister_widget_control($id) { return wp_register_widget_control($id, '', ''); } function dynamic_sidebar($index = 1) { global $wp_registered_sidebars, $wp_registered_widgets; if ( is_int($index) ) { $index = "sidebar-$index"; } else { $index = sanitize_title($index); foreach ( $wp_registered_sidebars as $key => $value ) { if ( sanitize_title($value['name']) == $index ) { $index = $key; break; } } } $sidebars_widgets = wp_get_sidebars_widgets(); if ( empty($wp_registered_sidebars[$index]) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]) ) return false; $sidebar = $wp_registered_sidebars[$index]; $did_one = false; foreach ( $sidebars_widgets[$index] as $id ) { $callback = $wp_registered_widgets[$id]['callback']; $params = array_merge(array($sidebar), (array) $wp_registered_widgets[$id]['params']); // Substitute HTML id and class attributes into before_widget $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $wp_registered_widgets[$id]['classname']); if ( is_callable($callback) ) { call_user_func_array($callback, $params); $did_one = true; } } return $did_one; } function is_active_widget($callback) { global $wp_registered_widgets; $sidebars_widgets = wp_get_sidebars_widgets(false); if ( is_array($sidebars_widgets) ) foreach ( $sidebars_widgets as $sidebar => $widgets ) if ( is_array($widgets) ) foreach ( $widgets as $widget ) if ( $wp_registered_widgets[$widget]['callback'] == $callback ) return true; return false; } function is_dynamic_sidebar() { global $wp_registered_widgets, $wp_registered_sidebars; $sidebars_widgets = get_option('sidebars_widgets'); foreach ( $wp_registered_sidebars as $index => $sidebar ) { if ( count($sidebars_widgets[$index]) ) { foreach ( $sidebars_widgets[$index] as $widget ) if ( array_key_exists($widget, $wp_registered_widgets) ) return true; } } return false; } /* Internal Functions */ function wp_get_sidebars_widgets($update = true) { global $wp_registered_widgets, $wp_registered_sidebars; $sidebars_widgets = get_option('sidebars_widgets'); $_sidebars_widgets = array(); if ( !isset($sidebars_widgets['array_version']) ) $sidebars_widgets['array_version'] = 1; switch ( $sidebars_widgets['array_version'] ) { case 1 : foreach ( $sidebars_widgets as $index => $sidebar ) if ( is_array($sidebar) ) foreach ( $sidebar as $i => $name ) { $id = strtolower($name); if ( isset($wp_registered_widgets[$id]) ) { $_sidebars_widgets[$index][$i] = $id; continue; } $id = sanitize_title($name); if ( isset($wp_registered_widgets[$id]) ) { $_sidebars_widgets[$index][$i] = $id; continue; } unset($_sidebars_widgets[$index][$i]); } $_sidebars_widgets['array_version'] = 2; $sidebars_widgets = $_sidebars_widgets; unset($_sidebars_widgets); case 2 : $sidebars = array_keys( $wp_registered_sidebars ); if ( !empty( $sidebars ) ) { // Move the known-good ones first foreach ( $sidebars as $id ) { if ( array_key_exists( $id, $sidebars_widgets ) ) { $_sidebars_widgets[$id] = $sidebars_widgets[$id]; unset($sidebars_widgets[$id], $sidebars[$id]); } } // Assign to each unmatched registered sidebar the first available orphan unset( $sidebars_widgets[ 'array_version' ] ); while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) ) $_sidebars_widgets[ $sidebar ] = $widgets; $_sidebars_widgets['array_version'] = 3; $sidebars_widgets = $_sidebars_widgets; unset($_sidebars_widgets); } if ( $update ) update_option('sidebars_widgets', $sidebars_widgets); } unset($sidebars_widgets['array_version']); return $sidebars_widgets; } function wp_set_sidebars_widgets( $sidebars_widgets ) { update_option( 'sidebars_widgets', $sidebars_widgets ); } function wp_get_widget_defaults() { global $wp_registered_sidebars; $defaults = array(); foreach ( $wp_registered_sidebars as $index => $sidebar ) $defaults[$index] = array(); return $defaults; } /* Default Widgets */ function wp_widget_pages( $args ) { extract( $args ); $options = get_option( 'widget_pages' ); $title = empty( $options['title'] ) ? __( 'Pages' ) : $options['title']; $sortby = empty( $options['sortby'] ) ? 'menu_order' : $options['sortby']; $exclude = empty( $options['exclude'] ) ? '' : $options['exclude']; if ( $sortby == 'menu_order' ) { $sortby = 'menu_order, post_title'; } $out = wp_list_pages( array('title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude) ); if ( !empty( $out ) ) { ?>


    $before_title, 'title_after' => $after_title, 'category_before' => $before_widget, 'category_after' => $after_widget, 'show_images' => true, 'class' => 'linkcat widget' )); } } function wp_widget_search($args) { extract($args); ?>

    '; get_calendar(); echo ''; echo $after_widget; } function wp_widget_calendar_control() { $options = $newoptions = get_option('widget_calendar'); if ( $_POST["calendar-submit"] ) { $newoptions['title'] = strip_tags(stripslashes($_POST["calendar-title"])); } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_calendar', $options); } $title = attribute_escape($options['title']); ?>

    " name="text-submit-" value="1" /> 9 ) $number = 9; if ( $number < 1 ) $number = 1; $newoptions['number'] = $number; } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_text', $options); wp_widget_text_register($options['number']); } } function wp_widget_text_page() { $options = $newoptions = get_option('widget_text'); ?>

    9 ) $number = 9; $dims = array('width' => 460, 'height' => 350); $class = array('classname' => 'widget_text'); for ($i = 1; $i <= 9; $i++) { $name = sprintf(__('Text %d'), $i); $id = "text-$i"; // Never never never translate an id wp_register_sidebar_widget($id, $name, $i <= $number ? 'wp_widget_text' : /* unregister */ '', $class, $i); wp_register_widget_control($id, $name, $i <= $number ? 'wp_widget_text_control' : /* unregister */ '', $dims, $i); } add_action('sidebar_admin_setup', 'wp_widget_text_setup'); add_action('sidebar_admin_page', 'wp_widget_text_page'); } function wp_widget_categories($args) { extract($args); $options = get_option('widget_categories'); $c = $options['count'] ? '1' : '0'; $h = $options['hierarchical'] ? '1' : '0'; $d = $options['dropdown'] ? '1' : '0'; $title = empty($options['title']) ? __('Categories') : $options['title']; echo $before_widget; echo $before_title . $title . $after_title; $cat_args = "orderby=name&show_count={$c}&hierarchical={$h}"; if($d) { wp_dropdown_categories($cat_args . '&show_option_none= ' . __('Select Category')); ?>

    15 ) $number = 15; $r = new WP_Query("showposts=$number&what_to_show=posts&nopaging=0"); if ($r->have_posts()) : ?>
      have_posts()) : $r->the_post(); ?>

    15 ) $number = 15; if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) { $comments = $wpdb->get_results("SELECT comment_author, comment_author_url, comment_ID, comment_post_ID FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC"); // LIMIT $number wp_cache_add( 'recent_comments', $comments, 'widget' ); } ?>

    320, 'height' => 90); $class = array('classname' => 'widget_recent_comments'); wp_register_sidebar_widget('recent-comments', __('Recent Comments'), 'wp_widget_recent_comments', $class); wp_register_widget_control('recent-comments', __('Recent Comments'), 'wp_widget_recent_comments_control', $dims); if ( is_active_widget('wp_widget_recent_comments') ) add_action('wp_head', 'wp_widget_recent_comments_style'); } function wp_widget_rss($args, $number = 1) { require_once(ABSPATH . WPINC . '/rss.php'); extract($args, EXTR_SKIP); $options = get_option('widget_rss'); if ( isset($options['error']) && $options['error'] ) return; $num_items = (int) $options[$number]['items']; $show_summary = $options[$number]['show_summary']; if ( empty($num_items) || $num_items < 1 || $num_items > 10 ) $num_items = 10; $url = $options[$number]['url']; while ( strstr($url, 'http') != $url ) $url = substr($url, 1); if ( empty($url) ) return; $rss = fetch_rss($url); $link = clean_url(strip_tags($rss->channel['link'])); while ( strstr($link, 'http') != $link ) $link = substr($link, 1); $desc = attribute_escape(strip_tags(html_entity_decode($rss->channel['description'], ENT_QUOTES))); $title = $options[$number]['title']; if ( empty($title) ) $title = htmlentities(strip_tags($rss->channel['title'])); if ( empty($title) ) $title = $desc; if ( empty($title) ) $title = __('Unknown Feed'); $url = clean_url(strip_tags($url)); if ( file_exists(dirname(__FILE__) . '/rss.png') ) $icon = str_replace(ABSPATH, get_option('siteurl').'/', dirname(__FILE__)) . '/rss.png'; else $icon = get_option('siteurl').'/wp-includes/images/rss.png'; $title = "RSS $title"; ?>
      items ) ) { $rss->items = array_slice($rss->items, 0, $num_items); foreach ($rss->items as $item ) { while ( strstr($item['link'], 'http') != $item['link'] ) $item['link'] = substr($item['link'], 1); $link = clean_url(strip_tags($item['link'])); $title = attribute_escape(strip_tags($item['title'])); if ( empty($title) ) $title = __('Untitled'); $desc = ''; if ( $show_summary ) { $summary = '
      ' . $item['description'] . '
      '; } else { if ( isset( $item['description'] ) && is_string( $item['description'] ) ) $desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['description'], ENT_QUOTES)))); $summary = ''; } echo "
    • $title$summary
    • "; } } else { echo '
    • ' . __( 'An error has occurred; the feed is probably down. Try again later.' ) . '
    • '; } ?>

    " name="rss-url-" type="text" value="" />

    " name="rss-title-" type="text" value="" />

    " name="rss-submit-" value="1" /> 9 ) $number = 9; if ( $number < 1 ) $number = 1; $newoptions['number'] = $number; } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_rss', $options); wp_widget_rss_register($options['number']); } } function wp_widget_rss_page() { $options = $newoptions = get_option('widget_rss'); ?>

    9 ) $number = 9; $dims = array('width' => 410, 'height' => 200); $class = array('classname' => 'widget_rss'); for ($i = 1; $i <= 9; $i++) { $name = sprintf(__('RSS %d'), $i); $id = "rss-$i"; // Never never never translate an id wp_register_sidebar_widget($id, $name, $i <= $number ? 'wp_widget_rss' : /* unregister */ '', $class, $i); wp_register_widget_control($id, $name, $i <= $number ? 'wp_widget_rss_control' : /* unregister */ '', $dims, $i); } add_action('sidebar_admin_setup', 'wp_widget_rss_setup'); add_action('sidebar_admin_page', 'wp_widget_rss_page'); } function wp_widgets_init() { global $wp_register_widget_defaults; $wp_register_widget_defaults = true; $dims90 = array('height' => 90, 'width' => 300); $dims100 = array('height' => 100, 'width' => 300); $dims150 = array('height' => 150, 'width' => 300); $class = array('classname' => 'widget_pages'); wp_register_sidebar_widget('pages', __('Pages'), 'wp_widget_pages', $class); wp_register_widget_control('pages', __('Pages'), 'wp_widget_pages_control', $dims150); $class['classname'] = 'widget_calendar'; wp_register_sidebar_widget('calendar', __('Calendar'), 'wp_widget_calendar', $class); wp_register_widget_control('calendar', __('Calendar'), 'wp_widget_calendar_control', $dims90); $class['classname'] = 'widget_archives'; wp_register_sidebar_widget('archives', __('Archives'), 'wp_widget_archives', $class); wp_register_widget_control('archives', __('Archives'), 'wp_widget_archives_control', $dims100); $class['classname'] = 'widget_links'; wp_register_sidebar_widget('links', __('Links'), 'wp_widget_links', $class); $class['classname'] = 'widget_meta'; wp_register_sidebar_widget('meta', __('Meta'), 'wp_widget_meta', $class); wp_register_widget_control('meta', __('Meta'), 'wp_widget_meta_control', $dims90); $class['classname'] = 'widget_search'; wp_register_sidebar_widget('search', __('Search'), 'wp_widget_search', $class); $class['classname'] = 'widget_categories'; wp_register_sidebar_widget('categories', __('Categories'), 'wp_widget_categories', $class); wp_register_widget_control('categories', __('Categories'), 'wp_widget_categories_control', $dims150); $class['classname'] = 'widget_recent_entries'; wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $class); wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control', $dims90); wp_widget_text_register(); wp_widget_rss_register(); wp_widget_recent_comments_register(); $wp_register_widget_defaults = false; do_action('widgets_init'); } add_action('init', 'wp_widgets_init', 1); ?> =wordpress/wp-includes/.svn/text-base/wp-db-mysql.php.svn-basedbh = @mysql_connect($dbhost, $dbuser, $dbpassword); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } $this->select($dbname); } // ================================================================== // Select a DB (if another one needs to be selected) function select($db) { if (!@mysql_select_db($db, $this->dbh)) { $this->bail("

    Can’t select database

    We were able to connect to the database server (which means your username and password is okay) but not able to select the $db database.

    • Are you sure it exists?
    • On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?

    If you don't know how to setup a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

    "); } } // ==================================================================== // Format a string correctly for safe insert under all PHP conditions function escape($string) { $string = addslashes( $string ); // Disable rest for now, causing problems if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' ) return mysql_escape_string( $string ); else return mysql_real_escape_string( $string, $this->dbh ); } // ==================================================================== // Get error message function get_error() { return mysql_error(); } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; } function hide_errors() { $this->show_errors = false; } // ================================================================== // Kill cached query results function flush() { $this->last_result = null; $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query) { $this->result = @mysql_query($query, $this->dbh); return $this->result; } function get_tables() { $arr = array(); if($result = @mysql_query("SHOW TABLES", $this->dbh)) while($row = mysql_fetch_row($result)) { $arr[] = $row[0]; } else return null; return $arr; } // ================================================================== // Basic Query - see docs for more detail function get_affected_rows() { return @mysql_affected_rows(); } // ================================================================== // Basic Query - see docs for more detail function get_num_fields() { return @mysql_num_fields($this->result); } // ================================================================== // Basic Query - see docs for more detail function get_id($table, $id_field) { return @mysql_insert_id($this->dbh); } // ================================================================== // Basic Query - see docs for more detail function fetch_field() { return @mysql_fetch_field($this->result); } // ================================================================== // Basic Query - see docs for more detail function fetch_object() { return @mysql_fetch_object($this->result); } // ================================================================== // Basic Query - see docs for more detail function free_result() { return @mysql_free_result($this->result); } function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header( 'Content-Type: text/html; charset=utf-8'); echo << WordPress › Error

    WordPress

    HEAD; echo $message; echo ""; die(); } } ?> name=$name; } } class wpdbodbc { var $show_errors = true; var $num_queries = 0; var $last_query; var $last_error_flag = 0; var $col_info; var $queries; // Our tables var $posts; var $users; var $categories; var $post2cat; var $comments; var $links; var $linkcategories; var $options; var $optiontypes; var $optionvalues; var $optiongroups; var $optiongroup_options; var $postmeta; var $inserted_id; // ================================================================== // DB Constructor - connects to the server and selects a database function wpdbodbc($dbuser, $dbpassword, $dbname, $dbhost) { $this->dbh = @odbc_connect(DSN, $dbuser, $dbpassword); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } } // ==================================================================== // Format a string correctly for safe insert under all PHP conditions function escape($string) { // $string = addslashes( $string ); // Disable rest for now, causing problems if (get_magic_quotes_gpc()) $string = stripslashes($string); return str_replace("'", "''", $string); } function decode($string) { return str_replace('\"', '"', $string); } // ==================================================================== // Get error message function get_error() { if($this->last_error_flag > 0) return odbc_errormsg(); else return ""; } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; } function hide_errors() { $this->show_errors = false; } // ================================================================== // Kill cached query results function flush() { $this->last_result = null; $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query) { if ( preg_match("/^\\s*(select) /i",$query) ) { $pattern = "/\((comment_date)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((comment_date_gmt)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_date)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_date_gmt)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_modified)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_modified_gmt)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $order = ""; if($pos=strpos($query,"GROUP")) { $order = substr($query,$pos,strlen($query)-$pos); $query = substr($query,0,$pos); } else if($pos=strpos($query,"ORDER")) { $order = substr($query,$pos,strlen($query)-$pos); $query = substr($query,0,$pos); } $pattern = "/'(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\'/i"; $replacement = "CAST('\$1-\$2-\$3 \$4:\$5:\$6' as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(comment_date )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(comment_date_gmt )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(link_updated )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_date )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_date_gmt )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_modified )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_modified_gmt )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(user_registered )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $query .= $order; } if($this->result = @odbc_exec($this->dbh, $query)) { $this->last_error_flag = 0; return $this->result; } else { $this->last_error_flag = 1; return $this->result; } } function get_tables() { $arr = array(); if($result = @odbc_tables($this->dbh)) while($row = $this->odbc_fetch_array($result)) { $arr[] = $row["TABLE_NAME"]; } else return null; return $arr; } // ================================================================== // Basic Query - see docs for more detail function get_affected_rows() { return @odbc_num_rows($this->result); } function odbc_fetch_array($res) { // make sure to pass back the false if we are out of rows if(!odbc_fetch_row($res)) return false; $row=array(); // populate the row array $numfields=@odbc_num_fields($res); for($i=1; $i<=$numfields; $i++) { //odbc starts its indice at 1 but since I am // trying to emulate the functionality of *_fetch_array // for other dbs (ie mysql) I'm going to decrement my // my numeric indice by 1. This might not be what // you are after in which case get rid of the -1 $row[odbc_field_name($res,$i)]=$row[$i-1]=odbc_result($res,$i); } return $row; } // ================================================================== // Basic Query - see docs for more detail function get_num_fields() { return @odbc_num_fields($this->result); } // ================================================================== // Basic Query - see docs for more detail function get_id($table, $id_field) { if($result = @odbc_exec($this->dbh,"SELECT MAX($id_field) as id FROM $table")) //"SELECT LAST_INSERT_ID() as id")) if($row = $this->odbc_fetch_array($result)) return $row["id"]; else return -1; else return -1; } // ================================================================== // Basic Query - see docs for more detail function fetch_field() { $obj = new ODBCObj(odbc_field_name($this->result,1)); return $obj; } // ================================================================== // Basic Query - see docs for more detail function fetch_object() { $obj = (object)null; if ( @odbc_fetch_row( $this->result ) ) { $num = @odbc_num_fields($this->result); for ($i = 1; $i <= $num; $i++) { $len = @odbc_field_len($this->result, $i); if ( $len >= MAX_LONGREAD_LENGTH) { $val = false; do { $temp = @odbc_result($this->result, $i); if ($temp != null) $val .= $this->decode($temp); } while ($temp); } else { $val = @odbc_result($this->result, $i); } $col = @odbc_field_name($this->result, $i); $obj->$col = $val; } } else return NULL; return $obj; } // ================================================================== // Basic Query - see docs for more detail function free_result() { return odbc_free_result($this->result); } function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header( 'Content-Type: text/html; charset=utf-8'); echo << WordPress › Error

    WordPress

    HEAD; echo $message; echo ""; die(); } } ?> 8wordpress/wp-includes/.svn/text-base/wp-db.php_.svn-base-#__construct($dbuser, $dbpassword, $dbname, $dbhost); } function __construct($dbuser, $dbpassword, $dbname, $dbhost) { register_shutdown_function(array(&$this, "__destruct")); if ( defined('DB_CHARSET') ) $this->charset = DB_CHARSET; if ( defined('DB_COLLATE') ) $this->collate = DB_COLLATE; $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } if ( !empty($this->charset) && version_compare(mysql_get_server_info(), '4.1.0', '>=') ) $this->query("SET NAMES '$this->charset'"); $this->select($dbname); } function __destruct() { return true; } /** * Selects a database using the current class's $this->dbh * @param string $db name */ function select($db) { if (!@mysql_select_db($db, $this->dbh)) { $this->bail("

    Can’t select database

    We were able to connect to the database server (which means your username and password is okay) but not able to select the $db database.

    • Are you sure it exists?
    • On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?

    If you don't know how to setup a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

    "); } } /** * Escapes content for insertion into the database, for security * * @param string $string * @return string query safe string */ function escape($string) { return addslashes( $string ); // Disable rest for now, causing problems if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' ) return mysql_escape_string( $string ); else return mysql_real_escape_string( $string, $this->dbh ); } // ================================================================== // Print SQL/DB error. function print_error($str = '') { global $EZSQL_ERROR; if (!$str) $str = mysql_error($this->dbh); $EZSQL_ERROR[] = array ('query' => $this->last_query, 'error_str' => $str); $str = htmlspecialchars($str, ENT_QUOTES); $query = htmlspecialchars($this->last_query, ENT_QUOTES); // Is error output turned on or not.. if ( $this->show_errors ) { // If there is an error then take note of it print "

    WordPress database error: [$str]
    $query

    "; } else { return false; } } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; } function hide_errors() { $this->show_errors = false; } // ================================================================== // Kill cached query results function flush() { $this->last_result = array(); $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query) { // filter the query, if filters are available // NOTE: some queries are made before the plugins have been loaded, and thus cannot be filtered with this method if ( function_exists('apply_filters') ) $query = apply_filters('query', $query); // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = @mysql_query($query, $this->dbh); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( mysql_error($this->dbh) ) { $this->print_error(); return false; } if ( preg_match("/^\\s*(insert|delete|update|replace) /i",$query) ) { $this->rows_affected = mysql_affected_rows($this->dbh); // Take note of the insert_id if ( preg_match("/^\\s*(insert|replace) /i",$query) ) { $this->insert_id = mysql_insert_id($this->dbh); } // Return number of rows affected $return_val = $this->rows_affected; } else { $i = 0; while ($i < @mysql_num_fields($this->result)) { $this->col_info[$i] = @mysql_fetch_field($this->result); $i++; } $num_rows = 0; while ( $row = @mysql_fetch_object($this->result) ) { $this->last_result[$num_rows] = $row; $num_rows++; } @mysql_free_result($this->result); // Log number of rows the query returned $this->num_rows = $num_rows; // Return number of rows selected $return_val = $this->num_rows; } return $return_val; } /** * Get one variable from the database * @param string $query (can be null as well, for caching, see codex) * @param int $x = 0 row num to return * @param int $y = 0 col num to return * @return mixed results */ function get_var($query=null, $x = 0, $y = 0) { $this->func_call = "\$db->get_var(\"$query\",$x,$y)"; if ( $query ) $this->query($query); // Extract var out of cached results based x,y vals if ( $this->last_result[$y] ) { $values = array_values(get_object_vars($this->last_result[$y])); } // If there is a value return it else return null return (isset($values[$x]) && $values[$x]!=='') ? $values[$x] : null; } /** * Get one row from the database * @param string $query * @param string $output ARRAY_A | ARRAY_N | OBJECT * @param int $y row num to return * @return mixed results */ function get_row($query = null, $output = OBJECT, $y = 0) { $this->func_call = "\$db->get_row(\"$query\",$output,$y)"; if ( $query ) $this->query($query); if ( !isset($this->last_result[$y]) ) return null; if ( $output == OBJECT ) { return $this->last_result[$y] ? $this->last_result[$y] : null; } elseif ( $output == ARRAY_A ) { return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null; } elseif ( $output == ARRAY_N ) { return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null; } else { $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"); } } /** * Gets one column from the database * @param string $query (can be null as well, for caching, see codex) * @param int $x col num to return * @return array results */ function get_col($query = null , $x = 0) { if ( $query ) $this->query($query); // Extract the column values for ( $i=0; $i < count($this->last_result); $i++ ) { $new_array[$i] = $this->get_var(null, $x, $i); } return $new_array; } /** * Return an entire result set from the database * @param string $query (can also be null to pull from the cache) * @param string $output ARRAY_A | ARRAY_N | OBJECT * @return mixed results */ function get_results($query = null, $output = OBJECT) { $this->func_call = "\$db->get_results(\"$query\", $output)"; if ( $query ) $this->query($query); // Send back array of objects. Each row is an object if ( $output == OBJECT ) { return $this->last_result; } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { if ( $this->last_result ) { $i = 0; foreach( $this->last_result as $row ) { $new_array[$i] = (array) $row; if ( $output == ARRAY_N ) { $new_array[$i] = array_values($new_array[$i]); } $i++; } return $new_array; } else { return null; } } } /** * Grabs column metadata from the last query * @param string $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill * @param int $col_offset 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type * @return mixed results */ function get_col_info($info_type = 'name', $col_offset = -1) { if ( $this->col_info ) { if ( $col_offset == -1 ) { $i = 0; foreach($this->col_info as $col ) { $new_array[$i] = $col->{$info_type}; $i++; } return $new_array; } else { return $this->col_info[$col_offset]->{$info_type}; } } } /** * Starts the timer, for debugging purposes */ function timer_start() { $mtime = microtime(); $mtime = explode(' ', $mtime); $this->time_start = $mtime[1] + $mtime[0]; return true; } /** * Stops the debugging timer * @return int total time spent on the query, in milliseconds */ function timer_stop() { $mtime = microtime(); $mtime = explode(' ', $mtime); $time_end = $mtime[1] + $mtime[0]; $time_total = $time_end - $this->time_start; return $time_total; } /** * Wraps fatal errors in a nice header and footer and dies. * @param string $message */ function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header('Content-Type: text/html; charset=utf-8'); if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false) $admin_dir = ''; else $admin_dir = 'wp-admin/'; ?> WordPress › Error

    WordPress

    7wordpress/wp-includes/.svn/text-base/wp-db.php.svn-base/=dbh = new $class_name($dbuser, $dbpassword, $dbname, $dbhost); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } } // ==================================================================== // Format a string correctly for safe insert under all PHP conditions function check_version() { } function escape($string) { if($this->dbh) $string = $this->dbh->escape($string); return $string; } // ================================================================== // Print SQL/DB error. function print_error($str = '') { global $EZSQL_ERROR; if (!$str) $str = $this->dbh->get_error(); $EZSQL_ERROR[] = array ('query' => $this->last_query, 'error_str' => $str); $str = htmlspecialchars($str, ENT_QUOTES); $query = htmlspecialchars($this->last_query, ENT_QUOTES); // Is error output turned on or not.. if ( $this->show_errors ) { // If there is an error then take note of it print "

    WordPress database error: [$str]
    $query

    "; } else { return false; } } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; $this->dbh->show_errors(); } function hide_errors() { $this->show_errors = false; $this->dbh->hide_errors(); } // ================================================================== // Kill cached query results function flush() { $this->last_result = null; $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function insert($query, $table='', $id_field = '') { // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = $this->dbh->query($query); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( $this->dbh->get_error() ) { $this->print_error(); return false; } $this->rows_affected = $this->dbh->get_affected_rows(); // Take note of the insert_id if ( preg_match("/^\\s*(insert) /i",$query) ) { $this->insert_id = $this->dbh->get_id($table,$id_field); } // Return number of rows affected return $this->rows_affected; } // ================================================================== // Basic Query - see docs for more detail function select($query, $row_from = 0, $row_count = 0) { // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = $this->dbh->query($query); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( $this->dbh->get_error() ) { $this->print_error(); return false; } $i = 0; while ($i < $this->dbh->get_num_fields()) { $this->col_info[$i] = $this->dbh->fetch_field(); $i++; } $num_rows = 0; while ( $row = $this->dbh->fetch_object() ) { $this->last_result[$num_rows] = $row; $num_rows++; } $this->dbh->free_result(); // Log number of rows the query returned $this->num_rows = $num_rows; // Return number of rows selected return $this->num_rows; } // ================================================================== // Basic Query - see docs for more detail function query($query, $table='', $id_field = '', $row_from = 0, $row_to = 0) { // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = $this->dbh->query($query); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( $this->dbh->get_error() ) { $this->print_error(); return false; } if ( preg_match("/^\\s*(insert|delete|update|replace) /i",$query) ) { $this->rows_affected = $this->dbh->get_affected_rows(); // Take note of the insert_id if (( preg_match("/^\\s*(insert) /i",$query) ) && ($table!='') && ($id_field!='') ) { $this->insert_id = $this->dbh->get_id($table,$id_field); } // Return number of rows affected $return_val = $this->rows_affected; } else { $i = 0; while ($i < $this->dbh->get_num_fields()) { $this->col_info[$i] = $this->dbh->fetch_field(); $i++; } $num_rows = 0; while ( $row = $this->dbh->fetch_object() ) { $this->last_result[$num_rows] = $row; $num_rows++; } $this->dbh->free_result(); // Log number of rows the query returned $this->num_rows = $num_rows; // Return number of rows selected $return_val = $this->num_rows; } return $return_val; } // ================================================================== // Basic Query - see docs for more detail function get_tables() { return $this->dbh->get_tables(); } // ================================================================== // Get one variable from the DB - see docs for more detail function get_var($query=null, $x = 0, $y = 0) { $this->func_call = "\$db->get_var(\"$query\",$x,$y)"; if ( $query ) $this->result=$this->query($query); // Extract var out of cached results based x,y vals if ( $this->last_result[$y] ) { $values = array_values(get_object_vars($this->last_result[$y])); } // If there is a value return it else return null return (isset($values[$x]) && $values[$x]!='') ? $values[$x] : null; } // ================================================================== // Get one row from the DB - see docs for more detail function get_row($query = null, $output = OBJECT, $y = 0) { $this->func_call = "\$db->get_row(\"$query\",$output,$y)"; if ( $query ) $this->query($query); if ( $output == OBJECT ) { return $this->last_result[$y] ? $this->last_result[$y] : null; } elseif ( $output == ARRAY_A ) { return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null; } elseif ( $output == ARRAY_N ) { return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null; } else { $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"); } } // ================================================================== // Function to get 1 column from the cached result set based in X index // se docs for usage and info function get_col($query = null , $x = 0) { if ( $query ) $this->query($query); // Extract the column values for ( $i=0; $i < count($this->last_result); $i++ ) { $new_array[$i] = $this->get_var(null, $x, $i); } return $new_array; } // ================================================================== // Return the the query as a result set - see docs for more details function get_results($query = null, $output = OBJECT) { $this->func_call = "\$db->get_results(\"$query\", $output)"; if ( $query ) $this->query($query); // Send back array of objects. Each row is an object if ( $output == OBJECT ) { return $this->last_result; } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { if ( $this->last_result ) { $i = 0; foreach( $this->last_result as $row ) { $new_array[$i] = (array) $row; if ( $output == ARRAY_N ) { $new_array[$i] = array_values($new_array[$i]); } $i++; } return $new_array; } else { return null; } } } // ================================================================== // Function to get column meta data info pertaining to the last query // see docs for more info and usage function get_col_info($info_type = 'name', $col_offset = -1) { if ( $this->col_info ) { if ( $col_offset == -1 ) { $i = 0; foreach($this->col_info as $col ) { $new_array[$i] = $col->{$info_type}; $i++; } return $new_array; } else { return $this->col_info[$col_offset]->{$info_type}; } } } function timer_start() { $mtime = microtime(); $mtime = explode(' ', $mtime); $this->time_start = $mtime[1] + $mtime[0]; return true; } function timer_stop($precision = 3) { $mtime = microtime(); $mtime = explode(' ', $mtime); $time_end = $mtime[1] + $mtime[0]; $time_total = $time_end - $this->time_start; return $time_total; } function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header( 'Content-Type: text/html; charset=utf-8'); echo << WordPress › Error

    WordPress

    HEAD; echo $message; echo ""; die(); } } $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); ?>)wordpress/wp-includes/template-loader.php)wordpress/wp-includes/theme.phptext_direction) && file_exists("$dir/{$wp_locale->text_direction}.css") ) $stylesheet_uri = "$stylesheet_dir_uri/{$wp_locale->text_direction}.css"; else $stylesheet_uri = ''; return apply_filters('locale_stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri); } function get_template() { return apply_filters('template', get_option('template')); } function get_template_directory() { $template = get_template(); $template_dir = get_theme_root() . "/$template"; return apply_filters('template_directory', $template_dir, $template); } function get_template_directory_uri() { $template = get_template(); $template_dir_uri = get_theme_root_uri() . "/$template"; return apply_filters('template_directory_uri', $template_dir_uri, $template); } function get_theme_data( $theme_file ) { $theme_data = implode( '', file( $theme_file ) ); $theme_data = str_replace ( '\r', '\n', $theme_data ); preg_match( '|Theme Name:(.*)|i', $theme_data, $theme_name ); preg_match( '|Theme URI:(.*)|i', $theme_data, $theme_uri ); preg_match( '|Description:(.*)|i', $theme_data, $description ); preg_match( '|Author:(.*)|i', $theme_data, $author_name ); preg_match( '|Author URI:(.*)|i', $theme_data, $author_uri ); preg_match( '|Template:(.*)|i', $theme_data, $template ); if ( preg_match( '|Version:(.*)|i', $theme_data, $version ) ) $version = trim( $version[1] ); else $version =''; if ( preg_match('|Status:(.*)|i', $theme_data, $status) ) $status = trim($status[1]); else $status = 'publish'; $description = wptexturize( trim( $description[1] ) ); $name = $theme_name[1]; $name = trim( $name ); $theme = $name; $theme_uri = trim( $theme_uri[1] ); $template = trim( $template[1] ); if ( '' == $author_uri[1] ) { $author = trim( $author_name[1] ); } else { $author = '' . trim( $author_name[1] ) . ''; } return array( 'Name' => $name, 'Title' => $theme, 'URI' => $theme_uri, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template, 'Status' => $status ); } function get_themes() { global $wp_themes, $wp_broken_themes; if ( isset($wp_themes) ) return $wp_themes; $themes = array(); $wp_broken_themes = array(); $theme_root = get_theme_root(); $theme_loc = str_replace(ABSPATH, '', $theme_root); // Files in wp-content/themes directory and one subdir down $themes_dir = @ dir($theme_root); if ( !$themes_dir ) return false; while ( ($theme_dir = $themes_dir->read()) != false ) { if ( is_dir($theme_root . '/' . $theme_dir) && is_readable($theme_root . '/' . $theme_dir) ) { if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' ) continue; $stylish_dir = @ dir($theme_root . '/' . $theme_dir); $found_stylesheet = false; while ( ($theme_file = $stylish_dir->read()) != false ) { if ( $theme_file == 'style.css' ) { $theme_files[] = $theme_dir . '/' . $theme_file; $found_stylesheet = true; break; } } if ( !$found_stylesheet ) { // look for themes in that dir $subdir = "$theme_root/$theme_dir"; $subdir_name = $theme_dir; $theme_subdir = @dir( $subdir ); while ( ($theme_dir = $theme_subdir->read()) != false ) { if ( is_dir( $subdir . '/' . $theme_dir) && is_readable($subdir . '/' . $theme_dir) ) { if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' ) continue; $stylish_dir = @ dir($subdir . '/' . $theme_dir); $found_stylesheet = false; while ( ($theme_file = $stylish_dir->read()) != false ) { if ( $theme_file == 'style.css' ) { $theme_files[] = $subdir_name . '/' . $theme_dir . '/' . $theme_file; $found_stylesheet = true; break; } } } } $wp_broken_themes[$theme_dir] = array('Name' => $theme_dir, 'Title' => $theme_dir, 'Description' => __('Stylesheet is missing.')); } } } if ( !$themes_dir || !$theme_files ) return $themes; sort($theme_files); foreach ( (array) $theme_files as $theme_file ) { if ( !is_readable("$theme_root/$theme_file") ) { $wp_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.')); continue; } $theme_data = get_theme_data("$theme_root/$theme_file"); $name = $theme_data['Name']; $title = $theme_data['Title']; $description = wptexturize($theme_data['Description']); $version = $theme_data['Version']; $author = $theme_data['Author']; $template = $theme_data['Template']; $stylesheet = dirname($theme_file); $screenshot = false; foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) { if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) { $screenshot = "screenshot.$ext"; break; } } if ( empty($name) ) { $name = dirname($theme_file); $title = $name; } if ( empty($template) ) { if ( file_exists(dirname("$theme_root/$theme_file/index.php")) ) $template = dirname($theme_file); else continue; } $template = trim($template); if ( !file_exists("$theme_root/$template/index.php") ) { $parent_dir = dirname(dirname($theme_file)); if ( file_exists("$theme_root/$parent_dir/$template/index.php") ) { $template = "$parent_dir/$template"; } else { $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.')); continue; } } $stylesheet_files = array(); $stylesheet_dir = @ dir("$theme_root/$stylesheet"); if ( $stylesheet_dir ) { while ( ($file = $stylesheet_dir->read()) != false ) { if ( !preg_match('|^\.+$|', $file) && preg_match('|\.css$|', $file) ) $stylesheet_files[] = "$theme_loc/$stylesheet/$file"; } } $template_files = array(); $template_dir = @ dir("$theme_root/$template"); if ( $template_dir ) { while(($file = $template_dir->read()) != false) { if ( !preg_match('|^\.+$|', $file) && preg_match('|\.php$|', $file) ) $template_files[] = "$theme_loc/$template/$file"; } } $template_dir = dirname($template_files[0]); $stylesheet_dir = dirname($stylesheet_files[0]); if ( empty($template_dir) ) $template_dir = '/'; if ( empty($stylesheet_dir) ) $stylesheet_dir = '/'; // Check for theme name collision. This occurs if a theme is copied to // a new theme directory and the theme header is not updated. Whichever // theme is first keeps the name. Subsequent themes get a suffix applied. // The Default and Classic themes always trump their pretenders. if ( isset($themes[$name]) ) { if ( ('WordPress Default' == $name || 'WordPress Classic' == $name) && ('default' == $stylesheet || 'classic' == $stylesheet) ) { // If another theme has claimed to be one of our default themes, move // them aside. $suffix = $themes[$name]['Stylesheet']; $new_name = "$name/$suffix"; $themes[$new_name] = $themes[$name]; $themes[$new_name]['Name'] = $new_name; } else { $name = "$name/$stylesheet"; } } $themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template, 'Stylesheet' => $stylesheet, 'Template Files' => $template_files, 'Stylesheet Files' => $stylesheet_files, 'Template Dir' => $template_dir, 'Stylesheet Dir' => $stylesheet_dir, 'Status' => $theme_data['Status'], 'Screenshot' => $screenshot); } // Resolve theme dependencies. $theme_names = array_keys($themes); foreach ( (array) $theme_names as $theme_name ) { $themes[$theme_name]['Parent Theme'] = ''; if ( $themes[$theme_name]['Stylesheet'] != $themes[$theme_name]['Template'] ) { foreach ( (array) $theme_names as $parent_theme_name ) { if ( ($themes[$parent_theme_name]['Stylesheet'] == $themes[$parent_theme_name]['Template']) && ($themes[$parent_theme_name]['Template'] == $themes[$theme_name]['Template']) ) { $themes[$theme_name]['Parent Theme'] = $themes[$parent_theme_name]['Name']; break; } } } } $wp_themes = $themes; return $themes; } function get_theme($theme) { $themes = get_themes(); if ( array_key_exists($theme, $themes) ) return $themes[$theme]; return NULL; } function get_current_theme() { $themes = get_themes(); $theme_names = array_keys($themes); $current_template = get_option('template'); $current_stylesheet = get_option('stylesheet'); $current_theme = 'WordPress Default'; if ( $themes ) { foreach ( (array) $theme_names as $theme_name ) { if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet && $themes[$theme_name]['Template'] == $current_template ) { $current_theme = $themes[$theme_name]['Name']; break; } } } return $current_theme; } function get_theme_root() { return apply_filters('theme_root', ABSPATH . "wp-content/themes"); } function get_theme_root_uri() { return apply_filters('theme_root_uri', get_option('siteurl') . "/wp-content/themes", get_option('siteurl')); } function get_query_template($type) { $template = ''; if ( file_exists(TEMPLATEPATH . "/{$type}.php") ) $template = TEMPLATEPATH . "/{$type}.php"; return apply_filters("{$type}_template", $template); } function get_404_template() { return get_query_template('404'); } function get_archive_template() { return get_query_template('archive'); } function get_author_template() { return get_query_template('author'); } function get_category_template() { $template = ''; if ( file_exists(TEMPLATEPATH . "/category-" . get_query_var('cat') . '.php') ) $template = TEMPLATEPATH . "/category-" . get_query_var('cat') . '.php'; elseif ( file_exists(TEMPLATEPATH . "/category.php") ) $template = TEMPLATEPATH . "/category.php"; return apply_filters('category_template', $template); } function get_date_template() { return get_query_template('date'); } function get_home_template() { $template = ''; if ( file_exists(TEMPLATEPATH . "/home.php") ) $template = TEMPLATEPATH . "/home.php"; elseif ( file_exists(TEMPLATEPATH . "/index.php") ) $template = TEMPLATEPATH . "/index.php"; return apply_filters('home_template', $template); } function get_page_template() { global $wp_query; $id = (int) $wp_query->post->ID; $template = get_post_meta($id, '_wp_page_template', true); if ( 'default' == $template ) $template = ''; if ( !empty($template) && file_exists(TEMPLATEPATH . "/$template") ) $template = TEMPLATEPATH . "/$template"; elseif ( file_exists(TEMPLATEPATH . "/page.php") ) $template = TEMPLATEPATH . "/page.php"; else $template = ''; return apply_filters('page_template', $template); } function get_paged_template() { return get_query_template('paged'); } function get_search_template() { return get_query_template('search'); } function get_single_template() { return get_query_template('single'); } function get_attachment_template() { global $posts; $type = explode('/', $posts[0]->post_mime_type); if ( $template = get_query_template($type[0]) ) return $template; elseif ( $template = get_query_template($type[1]) ) return $template; elseif ( $template = get_query_template("$type[0]_$type[1]") ) return $template; else return get_query_template('attachment'); } function get_comments_popup_template() { if ( file_exists( TEMPLATEPATH . '/comments-popup.php') ) $template = TEMPLATEPATH . '/comments-popup.php'; else $template = get_theme_root() . '/default/comments-popup.php'; return apply_filters('comments_popup_template', $template); } function load_template($_template_file) { global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment; if ( is_array($wp_query->query_vars) ) extract($wp_query->query_vars, EXTR_SKIP); require_once($_template_file); } function locale_stylesheet() { $stylesheet = get_locale_stylesheet_uri(); if ( empty($stylesheet) ) return; echo ''; } function validate_current_theme() { // Don't validate during an install/upgrade. if ( defined('WP_INSTALLING') ) return true; if ( get_template() != 'default' && !file_exists(get_template_directory() . '/index.php') ) { update_option('template', 'default'); update_option('stylesheet', 'default'); do_action('switch_theme', 'Default'); return false; } if ( get_stylesheet() != 'default' && !file_exists(get_template_directory() . '/style.css') ) { update_option('template', 'default'); update_option('stylesheet', 'default'); do_action('switch_theme', 'Default'); return false; } return true; } function get_theme_mod($name, $default = false) { $theme = get_current_theme(); $mods = get_option("mods_$theme"); if ( isset($mods[$name]) ) return apply_filters( "theme_mod_$name", $mods[$name] ); return apply_filters( "theme_mod_$name", sprintf($default, get_template_directory_uri()) ); } function set_theme_mod($name, $value) { $theme = get_current_theme(); $mods = get_option("mods_$theme"); $mods[$name] = $value; update_option("mods_$theme", $mods); wp_cache_delete("mods_$theme", 'options'); } function remove_theme_mod( $name ) { $theme = get_current_theme(); $mods = get_option("mods_$theme"); if ( !isset($mods[$name]) ) return; unset($mods[$name]); if ( empty($mods) ) return remove_theme_mods(); update_option("mods_$theme", $mods); wp_cache_delete("mods_$theme", 'options'); } function remove_theme_mods() { $theme = get_current_theme(); delete_option("mods_$theme"); } function get_header_textcolor() { return get_theme_mod('header_textcolor', HEADER_TEXTCOLOR); } function header_textcolor() { echo get_header_textcolor(); } function get_header_image() { return get_theme_mod('header_image', HEADER_IMAGE); } function header_image() { echo get_header_image(); } function add_custom_image_header($header_callback, $admin_header_callback) { if ( ! empty($header_callback) ) add_action('wp_head', $header_callback); if ( ! is_admin() ) return; require_once(ABSPATH . 'wp-admin/custom-header.php'); $GLOBALS['custom_image_header'] =& new Custom_Image_Header($admin_header_callback); add_action('admin_menu', array(&$GLOBALS['custom_image_header'], 'init')); } ?> wordpress/wp-includes/user.phpescape($_COOKIE[USER_COOKIE]); return $wpdb->get_var("SELECT $field FROM $wpdb->users WHERE user_login = '$user'"); } function get_usernumposts($userid) { global $wpdb; $userid = (int) $userid; return $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = " . $userid . " AND post_type = 'post' AND " . get_private_posts_cap_sql('post')); } // TODO: xmlrpc only. Maybe move to xmlrpc.php. function user_pass_ok($user_login,$user_pass) { global $cache_userdata; if ( empty($cache_userdata[$user_login]) ) { $userdata = get_userdatabylogin($user_login); } else { $userdata = $cache_userdata[$user_login]; } return (md5($user_pass) == $userdata->user_pass); } // // User option functions // function get_user_option( $option, $user = 0 ) { global $wpdb; if ( empty($user) ) $user = wp_get_current_user(); else $user = get_userdata($user); if ( isset( $user->{$wpdb->prefix . $option} ) ) // Blog specific return $user->{$wpdb->prefix . $option}; elseif ( isset( $user->{$option} ) ) // User specific and cross-blog return $user->{$option}; else // Blog global return get_option( $option ); } function update_user_option( $user_id, $option_name, $newvalue, $global = false ) { global $wpdb; if ( !$global ) $option_name = $wpdb->prefix . $option_name; return update_usermeta( $user_id, $option_name, $newvalue ); } // Get users with capabilities for the current blog. // For setups that use the multi-blog feature. function get_users_of_blog( $id = '' ) { global $wpdb, $blog_id; if ( empty($id) ) $id = (int) $blog_id; $users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE " . $wpdb->users . ".ID = " . $wpdb->usermeta . ".user_id AND meta_key = '" . $wpdb->prefix . "capabilities' ORDER BY {$wpdb->usermeta}.user_id" ); return $users; } // // User meta functions // function delete_usermeta( $user_id, $meta_key, $meta_value = '' ) { global $wpdb; if ( !is_numeric( $user_id ) ) return false; $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); if ( is_array($meta_value) || is_object($meta_value) ) $meta_value = serialize($meta_value); $meta_value = trim( $meta_value ); if ( ! empty($meta_value) ) $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key' AND meta_value = '$meta_value'"); else $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); $user = get_userdata($user_id); wp_cache_delete($user_id, 'users'); wp_cache_delete($user->user_login, 'userlogins'); return true; } function get_usermeta( $user_id, $meta_key = '') { global $wpdb; $user_id = (int) $user_id; if ( !empty($meta_key) ) { $meta_key = preg_replace('|[^a-z0-9_.]|i', '', $meta_key); $metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); } else { $metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = " . $user_id); } if ( empty($metas) ) { if ( empty($meta_key) ) return array(); else return ''; } foreach ($metas as $index => $meta) { @ $value = unserialize($meta->meta_value); if ( $value == FALSE ) $value = $meta->meta_value; $values[] = $value; } if ( count($values) == 1 ) return $values[0]; else return $values; } function update_usermeta( $user_id, $meta_key, $meta_value ) { global $wpdb; if ( !is_numeric( $user_id ) ) { return false; } $meta_key = preg_replace('|[^a-z0-9_.]|i', '', $meta_key); // FIXME: usermeta data is assumed to be already escaped if ( is_string($meta_value) ) $meta_value = stripslashes($meta_value); $meta_value = maybe_serialize($meta_value); $meta_value = $wpdb->escape($meta_value); if (empty($meta_value)) { return delete_usermeta($user_id, $meta_key); } $cur = $wpdb->get_row("SELECT * FROM $wpdb->usermeta WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); if ( !$cur ) { $wpdb->query("INSERT INTO $wpdb->usermeta ( user_id, meta_key, meta_value ) VALUES (" . $user_id . ", '$meta_key', '$meta_value' )"); } else if ( $cur->meta_value != $meta_value ) { $wpdb->query("UPDATE $wpdb->usermeta SET meta_value = '$meta_value' WHERE user_id = " . $user_id . " AND meta_key = '$meta_key'"); } else { return false; } $user = get_userdata($user_id); wp_cache_delete($user_id, 'users'); wp_cache_delete($user->user_login, 'userlogins'); return true; } // // Private helper functions // // Setup global user vars. Used by set_current_user() for back compat. function setup_userdata($user_id = 0) { global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_pass_md5, $user_identity; if ( 0 == $user_id ) $user = wp_get_current_user(); else $user = new WP_User($user_id); if ( 0 == $user->ID ) return; $userdata = $user->data; $user_login = $user->user_login; $user_level = (int) $user->user_level; $user_ID = (int) $user->ID; $user_email = $user->user_email; $user_url = $user->user_url; $user_pass_md5 = md5($user->user_pass); $user_identity = $user->display_name; } ?> wordpress/wp-includes/vars.php8!wordpress/wp-includes/version.php !wordpress/wp-includes/widgets.php 1 ) { $_args['name'] = isset($args['name']) ? $args['name'] : sprintf(__('Sidebar %d'), $i); } else { $_args['name'] = isset($args['name']) ? $args['name'] : __('Sidebar'); } $_args['id'] = isset($args['id']) ? $args['id'] : "sidebar-$i"; register_sidebar($_args); ++$i; } } function register_sidebar($args = array()) { global $wp_registered_sidebars; if ( is_string($args) ) parse_str($args, $args); $i = count($wp_registered_sidebars) + 1; $defaults = array( 'name' => sprintf(__('Sidebar %d'), $i ), 'id' => "sidebar-$i", 'before_widget' => '
  • ', 'after_widget' => "
  • \n", 'before_title' => '

    ', 'after_title' => "

    \n", ); $sidebar = array_merge($defaults, $args); $wp_registered_sidebars[$sidebar['id']] = $sidebar; return $sidebar['id']; } function unregister_sidebar( $name ) { global $wp_registered_sidebars; if ( isset( $wp_registered_sidebars[$name] ) ) unset( $wp_registered_sidebars[$name] ); } function register_sidebar_widget($name, $output_callback, $classname = '') { // Compat if ( is_array($name) ) { if ( count($name) == 3 ) $name = sprintf($name[0], $name[2]); else $name = $name[0]; } $id = sanitize_title($name); $options = array(); if ( !empty($classname) && is_string($classname) ) $options['classname'] = $classname; $params = array_slice(func_get_args(), 2); $args = array($id, $name, $output_callback, $options); if ( !empty($params) ) $args = array_merge($args, $params); call_user_func_array('wp_register_sidebar_widget', $args); } function wp_register_sidebar_widget($id, $name, $output_callback, $options = array()) { global $wp_registered_widgets, $wp_register_widget_defaults; $id = sanitize_title($id); if ( empty($output_callback) ) { unset($wp_registered_widgets[$id]); return; } $defaults = array('classname' => $output_callback); $options = wp_parse_args($options, $defaults); $widget = array( 'name' => $name, 'id' => $id, 'callback' => $output_callback, 'params' => array_slice(func_get_args(), 4) ); $widget = array_merge($widget, $options); if ( is_callable($output_callback) && ( !isset($wp_registered_widgets[$id]) || !$wp_register_widget_defaults) ) $wp_registered_widgets[$id] = $widget; } function unregister_sidebar_widget($id) { return wp_unregister_sidebar_widget($id); } function wp_unregister_sidebar_widget($id) { wp_register_sidebar_widget($id, '', ''); wp_unregister_widget_control($id); } function register_widget_control($name, $control_callback, $width = '', $height = '') { // Compat if ( is_array($name) ) { if ( count($name) == 3 ) $name = sprintf($name[0], $name[2]); else $name = $name[0]; } $id = sanitize_title($name); $options = array(); if ( !empty($width) ) $options['width'] = $width; if ( !empty($height) ) $options['height'] = $height; $params = array_slice(func_get_args(), 4); $args = array($id, $name, $control_callback, $options); if ( !empty($params) ) $args = array_merge($args, $params); call_user_func_array('wp_register_widget_control', $args); } function wp_register_widget_control($id, $name, $control_callback, $options = array()) { global $wp_registered_widget_controls, $wp_register_widget_defaults; $id = sanitize_title($id); if ( empty($control_callback) ) { unset($wp_registered_widget_controls[$id]); return; } if ( isset($wp_registered_widget_controls[$id]) && $wp_register_widget_defaults ) return; $defaults = array('width' => 300, 'height' => 200); $options = wp_parse_args($options, $defaults); $options['width'] = (int) $options['width']; $options['height'] = (int) $options['height']; $options['width'] = $options['width'] > 90 ? $options['width'] + 60 : 360; $options['height'] = $options['height'] > 60 ? $options['height'] + 40 : 240; $widget = array( 'name' => $name, 'id' => $id, 'callback' => $control_callback, 'params' => array_slice(func_get_args(), 4) ); $widget = array_merge($widget, $options); $wp_registered_widget_controls[$id] = $widget; } function unregister_widget_control($id) { return wp_unregister_widget_control($id); } function wp_unregister_widget_control($id) { return wp_register_widget_control($id, '', ''); } function dynamic_sidebar($index = 1) { global $wp_registered_sidebars, $wp_registered_widgets; if ( is_int($index) ) { $index = "sidebar-$index"; } else { $index = sanitize_title($index); foreach ( $wp_registered_sidebars as $key => $value ) { if ( sanitize_title($value['name']) == $index ) { $index = $key; break; } } } $sidebars_widgets = wp_get_sidebars_widgets(); if ( empty($wp_registered_sidebars[$index]) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]) ) return false; $sidebar = $wp_registered_sidebars[$index]; $did_one = false; foreach ( $sidebars_widgets[$index] as $id ) { $callback = $wp_registered_widgets[$id]['callback']; $params = array_merge(array($sidebar), (array) $wp_registered_widgets[$id]['params']); // Substitute HTML id and class attributes into before_widget $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $wp_registered_widgets[$id]['classname']); if ( is_callable($callback) ) { call_user_func_array($callback, $params); $did_one = true; } } return $did_one; } function is_active_widget($callback) { global $wp_registered_widgets; $sidebars_widgets = wp_get_sidebars_widgets(false); if ( is_array($sidebars_widgets) ) foreach ( $sidebars_widgets as $sidebar => $widgets ) if ( is_array($widgets) ) foreach ( $widgets as $widget ) if ( $wp_registered_widgets[$widget]['callback'] == $callback ) return true; return false; } function is_dynamic_sidebar() { global $wp_registered_widgets, $wp_registered_sidebars; $sidebars_widgets = get_option('sidebars_widgets'); foreach ( $wp_registered_sidebars as $index => $sidebar ) { if ( count($sidebars_widgets[$index]) ) { foreach ( $sidebars_widgets[$index] as $widget ) if ( array_key_exists($widget, $wp_registered_widgets) ) return true; } } return false; } /* Internal Functions */ function wp_get_sidebars_widgets($update = true) { global $wp_registered_widgets, $wp_registered_sidebars; $sidebars_widgets = get_option('sidebars_widgets'); $_sidebars_widgets = array(); if ( !isset($sidebars_widgets['array_version']) ) $sidebars_widgets['array_version'] = 1; switch ( $sidebars_widgets['array_version'] ) { case 1 : foreach ( $sidebars_widgets as $index => $sidebar ) if ( is_array($sidebar) ) foreach ( $sidebar as $i => $name ) { $id = strtolower($name); if ( isset($wp_registered_widgets[$id]) ) { $_sidebars_widgets[$index][$i] = $id; continue; } $id = sanitize_title($name); if ( isset($wp_registered_widgets[$id]) ) { $_sidebars_widgets[$index][$i] = $id; continue; } unset($_sidebars_widgets[$index][$i]); } $_sidebars_widgets['array_version'] = 2; $sidebars_widgets = $_sidebars_widgets; unset($_sidebars_widgets); case 2 : $sidebars = array_keys( $wp_registered_sidebars ); if ( !empty( $sidebars ) ) { // Move the known-good ones first foreach ( $sidebars as $id ) { if ( array_key_exists( $id, $sidebars_widgets ) ) { $_sidebars_widgets[$id] = $sidebars_widgets[$id]; unset($sidebars_widgets[$id], $sidebars[$id]); } } // Assign to each unmatched registered sidebar the first available orphan unset( $sidebars_widgets[ 'array_version' ] ); while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) ) $_sidebars_widgets[ $sidebar ] = $widgets; $_sidebars_widgets['array_version'] = 3; $sidebars_widgets = $_sidebars_widgets; unset($_sidebars_widgets); } if ( $update ) update_option('sidebars_widgets', $sidebars_widgets); } unset($sidebars_widgets['array_version']); return $sidebars_widgets; } function wp_set_sidebars_widgets( $sidebars_widgets ) { update_option( 'sidebars_widgets', $sidebars_widgets ); } function wp_get_widget_defaults() { global $wp_registered_sidebars; $defaults = array(); foreach ( $wp_registered_sidebars as $index => $sidebar ) $defaults[$index] = array(); return $defaults; } /* Default Widgets */ function wp_widget_pages( $args ) { extract( $args ); $options = get_option( 'widget_pages' ); $title = empty( $options['title'] ) ? __( 'Pages' ) : $options['title']; $sortby = empty( $options['sortby'] ) ? 'menu_order' : $options['sortby']; $exclude = empty( $options['exclude'] ) ? '' : $options['exclude']; if ( $sortby == 'menu_order' ) { $sortby = 'menu_order, post_title'; } $out = wp_list_pages( array('title_li' => '', 'echo' => 0, 'sort_column' => $sortby, 'exclude' => $exclude) ); if ( !empty( $out ) ) { ?>


    $before_title, 'title_after' => $after_title, 'category_before' => $before_widget, 'category_after' => $after_widget, 'show_images' => true, 'class' => 'linkcat widget' )); } } function wp_widget_search($args) { extract($args); ?>

    '; get_calendar(); echo ''; echo $after_widget; } function wp_widget_calendar_control() { $options = $newoptions = get_option('widget_calendar'); if ( $_POST["calendar-submit"] ) { $newoptions['title'] = strip_tags(stripslashes($_POST["calendar-title"])); } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_calendar', $options); } $title = attribute_escape($options['title']); ?>

    " name="text-submit-" value="1" /> 9 ) $number = 9; if ( $number < 1 ) $number = 1; $newoptions['number'] = $number; } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_text', $options); wp_widget_text_register($options['number']); } } function wp_widget_text_page() { $options = $newoptions = get_option('widget_text'); ?>

    9 ) $number = 9; $dims = array('width' => 460, 'height' => 350); $class = array('classname' => 'widget_text'); for ($i = 1; $i <= 9; $i++) { $name = sprintf(__('Text %d'), $i); $id = "text-$i"; // Never never never translate an id wp_register_sidebar_widget($id, $name, $i <= $number ? 'wp_widget_text' : /* unregister */ '', $class, $i); wp_register_widget_control($id, $name, $i <= $number ? 'wp_widget_text_control' : /* unregister */ '', $dims, $i); } add_action('sidebar_admin_setup', 'wp_widget_text_setup'); add_action('sidebar_admin_page', 'wp_widget_text_page'); } function wp_widget_categories($args) { extract($args); $options = get_option('widget_categories'); $c = $options['count'] ? '1' : '0'; $h = $options['hierarchical'] ? '1' : '0'; $d = $options['dropdown'] ? '1' : '0'; $title = empty($options['title']) ? __('Categories') : $options['title']; echo $before_widget; echo $before_title . $title . $after_title; $cat_args = "orderby=name&show_count={$c}&hierarchical={$h}"; if($d) { wp_dropdown_categories($cat_args . '&show_option_none= ' . __('Select Category')); ?>

    15 ) $number = 15; $r = new WP_Query("showposts=$number&what_to_show=posts&nopaging=0"); if ($r->have_posts()) : ?>
      have_posts()) : $r->the_post(); ?>

    15 ) $number = 15; if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) { $comments = $wpdb->get_results("SELECT comment_author, comment_author_url, comment_ID, comment_post_ID FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC"); // LIMIT $number wp_cache_add( 'recent_comments', $comments, 'widget' ); } ?>

    320, 'height' => 90); $class = array('classname' => 'widget_recent_comments'); wp_register_sidebar_widget('recent-comments', __('Recent Comments'), 'wp_widget_recent_comments', $class); wp_register_widget_control('recent-comments', __('Recent Comments'), 'wp_widget_recent_comments_control', $dims); if ( is_active_widget('wp_widget_recent_comments') ) add_action('wp_head', 'wp_widget_recent_comments_style'); } function wp_widget_rss($args, $number = 1) { require_once(ABSPATH . WPINC . '/rss.php'); extract($args, EXTR_SKIP); $options = get_option('widget_rss'); if ( isset($options['error']) && $options['error'] ) return; $num_items = (int) $options[$number]['items']; $show_summary = $options[$number]['show_summary']; if ( empty($num_items) || $num_items < 1 || $num_items > 10 ) $num_items = 10; $url = $options[$number]['url']; while ( strstr($url, 'http') != $url ) $url = substr($url, 1); if ( empty($url) ) return; $rss = fetch_rss($url); $link = clean_url(strip_tags($rss->channel['link'])); while ( strstr($link, 'http') != $link ) $link = substr($link, 1); $desc = attribute_escape(strip_tags(html_entity_decode($rss->channel['description'], ENT_QUOTES))); $title = $options[$number]['title']; if ( empty($title) ) $title = htmlentities(strip_tags($rss->channel['title'])); if ( empty($title) ) $title = $desc; if ( empty($title) ) $title = __('Unknown Feed'); $url = clean_url(strip_tags($url)); if ( file_exists(dirname(__FILE__) . '/rss.png') ) $icon = str_replace(ABSPATH, get_option('siteurl').'/', dirname(__FILE__)) . '/rss.png'; else $icon = get_option('siteurl').'/wp-includes/images/rss.png'; $title = "RSS $title"; ?>
      items ) ) { $rss->items = array_slice($rss->items, 0, $num_items); foreach ($rss->items as $item ) { while ( strstr($item['link'], 'http') != $item['link'] ) $item['link'] = substr($item['link'], 1); $link = clean_url(strip_tags($item['link'])); $title = attribute_escape(strip_tags($item['title'])); if ( empty($title) ) $title = __('Untitled'); $desc = ''; if ( $show_summary ) { $summary = '
      ' . $item['description'] . '
      '; } else { if ( isset( $item['description'] ) && is_string( $item['description'] ) ) $desc = str_replace(array("\n", "\r"), ' ', attribute_escape(strip_tags(html_entity_decode($item['description'], ENT_QUOTES)))); $summary = ''; } echo "
    • $title$summary
    • "; } } else { echo '
    • ' . __( 'An error has occurred; the feed is probably down. Try again later.' ) . '
    • '; } ?>

    " name="rss-url-" type="text" value="" />

    " name="rss-title-" type="text" value="" />

    " name="rss-submit-" value="1" /> 9 ) $number = 9; if ( $number < 1 ) $number = 1; $newoptions['number'] = $number; } if ( $options != $newoptions ) { $options = $newoptions; update_option('widget_rss', $options); wp_widget_rss_register($options['number']); } } function wp_widget_rss_page() { $options = $newoptions = get_option('widget_rss'); ?>

    9 ) $number = 9; $dims = array('width' => 410, 'height' => 200); $class = array('classname' => 'widget_rss'); for ($i = 1; $i <= 9; $i++) { $name = sprintf(__('RSS %d'), $i); $id = "rss-$i"; // Never never never translate an id wp_register_sidebar_widget($id, $name, $i <= $number ? 'wp_widget_rss' : /* unregister */ '', $class, $i); wp_register_widget_control($id, $name, $i <= $number ? 'wp_widget_rss_control' : /* unregister */ '', $dims, $i); } add_action('sidebar_admin_setup', 'wp_widget_rss_setup'); add_action('sidebar_admin_page', 'wp_widget_rss_page'); } function wp_widgets_init() { global $wp_register_widget_defaults; $wp_register_widget_defaults = true; $dims90 = array('height' => 90, 'width' => 300); $dims100 = array('height' => 100, 'width' => 300); $dims150 = array('height' => 150, 'width' => 300); $class = array('classname' => 'widget_pages'); wp_register_sidebar_widget('pages', __('Pages'), 'wp_widget_pages', $class); wp_register_widget_control('pages', __('Pages'), 'wp_widget_pages_control', $dims150); $class['classname'] = 'widget_calendar'; wp_register_sidebar_widget('calendar', __('Calendar'), 'wp_widget_calendar', $class); wp_register_widget_control('calendar', __('Calendar'), 'wp_widget_calendar_control', $dims90); $class['classname'] = 'widget_archives'; wp_register_sidebar_widget('archives', __('Archives'), 'wp_widget_archives', $class); wp_register_widget_control('archives', __('Archives'), 'wp_widget_archives_control', $dims100); $class['classname'] = 'widget_links'; wp_register_sidebar_widget('links', __('Links'), 'wp_widget_links', $class); $class['classname'] = 'widget_meta'; wp_register_sidebar_widget('meta', __('Meta'), 'wp_widget_meta', $class); wp_register_widget_control('meta', __('Meta'), 'wp_widget_meta_control', $dims90); $class['classname'] = 'widget_search'; wp_register_sidebar_widget('search', __('Search'), 'wp_widget_search', $class); $class['classname'] = 'widget_categories'; wp_register_sidebar_widget('categories', __('Categories'), 'wp_widget_categories', $class); wp_register_widget_control('categories', __('Categories'), 'wp_widget_categories_control', $dims150); $class['classname'] = 'widget_recent_entries'; wp_register_sidebar_widget('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries', $class); wp_register_widget_control('recent-posts', __('Recent Posts'), 'wp_widget_recent_entries_control', $dims90); wp_widget_text_register(); wp_widget_rss_register(); wp_widget_recent_comments_register(); $wp_register_widget_defaults = false; do_action('widgets_init'); } add_action('init', 'wp_widgets_init', 1); ?> %wordpress/wp-includes/wp-db-mysql.phpdbh = @mysql_connect($dbhost, $dbuser, $dbpassword); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } $this->select($dbname); } // ================================================================== // Select a DB (if another one needs to be selected) function select($db) { if (!@mysql_select_db($db, $this->dbh)) { $this->bail("

    Can’t select database

    We were able to connect to the database server (which means your username and password is okay) but not able to select the $db database.

    • Are you sure it exists?
    • On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?

    If you don't know how to setup a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

    "); } } // ==================================================================== // Format a string correctly for safe insert under all PHP conditions function escape($string) { $string = addslashes( $string ); // Disable rest for now, causing problems if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' ) return mysql_escape_string( $string ); else return mysql_real_escape_string( $string, $this->dbh ); } // ==================================================================== // Get error message function get_error() { return mysql_error(); } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; } function hide_errors() { $this->show_errors = false; } // ================================================================== // Kill cached query results function flush() { $this->last_result = null; $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query) { $this->result = @mysql_query($query, $this->dbh); return $this->result; } function get_tables() { $arr = array(); if($result = @mysql_query("SHOW TABLES", $this->dbh)) while($row = mysql_fetch_row($result)) { $arr[] = $row[0]; } else return null; return $arr; } // ================================================================== // Basic Query - see docs for more detail function get_affected_rows() { return @mysql_affected_rows(); } // ================================================================== // Basic Query - see docs for more detail function get_num_fields() { return @mysql_num_fields($this->result); } // ================================================================== // Basic Query - see docs for more detail function get_id($table, $id_field) { return @mysql_insert_id($this->dbh); } // ================================================================== // Basic Query - see docs for more detail function fetch_field() { return @mysql_fetch_field($this->result); } // ================================================================== // Basic Query - see docs for more detail function fetch_object() { return @mysql_fetch_object($this->result); } // ================================================================== // Basic Query - see docs for more detail function free_result() { return @mysql_free_result($this->result); } function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header( 'Content-Type: text/html; charset=utf-8'); echo << WordPress › Error

    WordPress

    HEAD; echo $message; echo ""; die(); } } ?> $wordpress/wp-includes/wp-db-odbc.php&name=$name; } } class wpdbodbc { var $show_errors = true; var $num_queries = 0; var $last_query; var $last_error_flag = 0; var $col_info; var $queries; // Our tables var $posts; var $users; var $categories; var $post2cat; var $comments; var $links; var $linkcategories; var $options; var $optiontypes; var $optionvalues; var $optiongroups; var $optiongroup_options; var $postmeta; var $inserted_id; // ================================================================== // DB Constructor - connects to the server and selects a database function wpdbodbc($dbuser, $dbpassword, $dbname, $dbhost) { $this->dbh = @odbc_connect(DSN, $dbuser, $dbpassword); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } } // ==================================================================== // Format a string correctly for safe insert under all PHP conditions function escape($string) { // $string = addslashes( $string ); // Disable rest for now, causing problems if (get_magic_quotes_gpc()) $string = stripslashes($string); return str_replace("'", "''", $string); } function decode($string) { return str_replace('\"', '"', $string); } // ==================================================================== // Get error message function get_error() { if($this->last_error_flag > 0) return odbc_errormsg(); else return ""; } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; } function hide_errors() { $this->show_errors = false; } // ================================================================== // Kill cached query results function flush() { $this->last_result = null; $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query) { if ( preg_match("/^\\s*(select) /i",$query) ) { $pattern = "/\((comment_date)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((comment_date_gmt)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_date)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_date_gmt)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_modified)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/\((post_modified_gmt)\)/i"; $replacement = "(CAST(\$1 as datetime))"; $query=preg_replace($pattern, $replacement, $query); $order = ""; if($pos=strpos($query,"GROUP")) { $order = substr($query,$pos,strlen($query)-$pos); $query = substr($query,0,$pos); } else if($pos=strpos($query,"ORDER")) { $order = substr($query,$pos,strlen($query)-$pos); $query = substr($query,0,$pos); } $pattern = "/'(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\'/i"; $replacement = "CAST('\$1-\$2-\$3 \$4:\$5:\$6' as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(comment_date )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(comment_date_gmt )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(link_updated )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_date )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_date_gmt )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_modified )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(post_modified_gmt )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $pattern = "/(user_registered )/i"; $replacement = "CAST(\$1 as datetime)"; $query=preg_replace($pattern, $replacement, $query); $query .= $order; } if($this->result = @odbc_exec($this->dbh, $query)) { $this->last_error_flag = 0; return $this->result; } else { $this->last_error_flag = 1; return $this->result; } } function get_tables() { $arr = array(); if($result = @odbc_tables($this->dbh)) while($row = $this->odbc_fetch_array($result)) { $arr[] = $row["TABLE_NAME"]; } else return null; return $arr; } // ================================================================== // Basic Query - see docs for more detail function get_affected_rows() { return @odbc_num_rows($this->result); } function odbc_fetch_array($res) { // make sure to pass back the false if we are out of rows if(!odbc_fetch_row($res)) return false; $row=array(); // populate the row array $numfields=@odbc_num_fields($res); for($i=1; $i<=$numfields; $i++) { //odbc starts its indice at 1 but since I am // trying to emulate the functionality of *_fetch_array // for other dbs (ie mysql) I'm going to decrement my // my numeric indice by 1. This might not be what // you are after in which case get rid of the -1 $row[odbc_field_name($res,$i)]=$row[$i-1]=odbc_result($res,$i); } return $row; } // ================================================================== // Basic Query - see docs for more detail function get_num_fields() { return @odbc_num_fields($this->result); } // ================================================================== // Basic Query - see docs for more detail function get_id($table, $id_field) { if($result = @odbc_exec($this->dbh,"SELECT MAX($id_field) as id FROM $table")) //"SELECT LAST_INSERT_ID() as id")) if($row = $this->odbc_fetch_array($result)) return $row["id"]; else return -1; else return -1; } // ================================================================== // Basic Query - see docs for more detail function fetch_field() { $obj = new ODBCObj(odbc_field_name($this->result,1)); return $obj; } // ================================================================== // Basic Query - see docs for more detail function fetch_object() { $obj = (object)null; if ( @odbc_fetch_row( $this->result ) ) { $num = @odbc_num_fields($this->result); for ($i = 1; $i <= $num; $i++) { $len = @odbc_field_len($this->result, $i); if ( $len >= MAX_LONGREAD_LENGTH) { $val = false; do { $temp = @odbc_result($this->result, $i); if ($temp != null) $val .= $this->decode($temp); } while ($temp); } else { $val = @odbc_result($this->result, $i); } $col = @odbc_field_name($this->result, $i); $obj->$col = $val; } } else return NULL; return $obj; } // ================================================================== // Basic Query - see docs for more detail function free_result() { return odbc_free_result($this->result); } function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header( 'Content-Type: text/html; charset=utf-8'); echo << WordPress › Error

    WordPress

    HEAD; echo $message; echo ""; die(); } } ?> wordpress/wp-includes/wp-db.php/=dbh = new $class_name($dbuser, $dbpassword, $dbname, $dbhost); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } } // ==================================================================== // Format a string correctly for safe insert under all PHP conditions function check_version() { } function escape($string) { if($this->dbh) $string = $this->dbh->escape($string); return $string; } // ================================================================== // Print SQL/DB error. function print_error($str = '') { global $EZSQL_ERROR; if (!$str) $str = $this->dbh->get_error(); $EZSQL_ERROR[] = array ('query' => $this->last_query, 'error_str' => $str); $str = htmlspecialchars($str, ENT_QUOTES); $query = htmlspecialchars($this->last_query, ENT_QUOTES); // Is error output turned on or not.. if ( $this->show_errors ) { // If there is an error then take note of it print "

    WordPress database error: [$str]
    $query

    "; } else { return false; } } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; $this->dbh->show_errors(); } function hide_errors() { $this->show_errors = false; $this->dbh->hide_errors(); } // ================================================================== // Kill cached query results function flush() { $this->last_result = null; $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function insert($query, $table='', $id_field = '') { // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = $this->dbh->query($query); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( $this->dbh->get_error() ) { $this->print_error(); return false; } $this->rows_affected = $this->dbh->get_affected_rows(); // Take note of the insert_id if ( preg_match("/^\\s*(insert) /i",$query) ) { $this->insert_id = $this->dbh->get_id($table,$id_field); } // Return number of rows affected return $this->rows_affected; } // ================================================================== // Basic Query - see docs for more detail function select($query, $row_from = 0, $row_count = 0) { // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = $this->dbh->query($query); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( $this->dbh->get_error() ) { $this->print_error(); return false; } $i = 0; while ($i < $this->dbh->get_num_fields()) { $this->col_info[$i] = $this->dbh->fetch_field(); $i++; } $num_rows = 0; while ( $row = $this->dbh->fetch_object() ) { $this->last_result[$num_rows] = $row; $num_rows++; } $this->dbh->free_result(); // Log number of rows the query returned $this->num_rows = $num_rows; // Return number of rows selected return $this->num_rows; } // ================================================================== // Basic Query - see docs for more detail function query($query, $table='', $id_field = '', $row_from = 0, $row_to = 0) { // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = $this->dbh->query($query); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( $this->dbh->get_error() ) { $this->print_error(); return false; } if ( preg_match("/^\\s*(insert|delete|update|replace) /i",$query) ) { $this->rows_affected = $this->dbh->get_affected_rows(); // Take note of the insert_id if (( preg_match("/^\\s*(insert) /i",$query) ) && ($table!='') && ($id_field!='') ) { $this->insert_id = $this->dbh->get_id($table,$id_field); } // Return number of rows affected $return_val = $this->rows_affected; } else { $i = 0; while ($i < $this->dbh->get_num_fields()) { $this->col_info[$i] = $this->dbh->fetch_field(); $i++; } $num_rows = 0; while ( $row = $this->dbh->fetch_object() ) { $this->last_result[$num_rows] = $row; $num_rows++; } $this->dbh->free_result(); // Log number of rows the query returned $this->num_rows = $num_rows; // Return number of rows selected $return_val = $this->num_rows; } return $return_val; } // ================================================================== // Basic Query - see docs for more detail function get_tables() { return $this->dbh->get_tables(); } // ================================================================== // Get one variable from the DB - see docs for more detail function get_var($query=null, $x = 0, $y = 0) { $this->func_call = "\$db->get_var(\"$query\",$x,$y)"; if ( $query ) $this->result=$this->query($query); // Extract var out of cached results based x,y vals if ( $this->last_result[$y] ) { $values = array_values(get_object_vars($this->last_result[$y])); } // If there is a value return it else return null return (isset($values[$x]) && $values[$x]!='') ? $values[$x] : null; } // ================================================================== // Get one row from the DB - see docs for more detail function get_row($query = null, $output = OBJECT, $y = 0) { $this->func_call = "\$db->get_row(\"$query\",$output,$y)"; if ( $query ) $this->query($query); if ( $output == OBJECT ) { return $this->last_result[$y] ? $this->last_result[$y] : null; } elseif ( $output == ARRAY_A ) { return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null; } elseif ( $output == ARRAY_N ) { return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null; } else { $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"); } } // ================================================================== // Function to get 1 column from the cached result set based in X index // se docs for usage and info function get_col($query = null , $x = 0) { if ( $query ) $this->query($query); // Extract the column values for ( $i=0; $i < count($this->last_result); $i++ ) { $new_array[$i] = $this->get_var(null, $x, $i); } return $new_array; } // ================================================================== // Return the the query as a result set - see docs for more details function get_results($query = null, $output = OBJECT) { $this->func_call = "\$db->get_results(\"$query\", $output)"; if ( $query ) $this->query($query); // Send back array of objects. Each row is an object if ( $output == OBJECT ) { return $this->last_result; } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { if ( $this->last_result ) { $i = 0; foreach( $this->last_result as $row ) { $new_array[$i] = (array) $row; if ( $output == ARRAY_N ) { $new_array[$i] = array_values($new_array[$i]); } $i++; } return $new_array; } else { return null; } } } // ================================================================== // Function to get column meta data info pertaining to the last query // see docs for more info and usage function get_col_info($info_type = 'name', $col_offset = -1) { if ( $this->col_info ) { if ( $col_offset == -1 ) { $i = 0; foreach($this->col_info as $col ) { $new_array[$i] = $col->{$info_type}; $i++; } return $new_array; } else { return $this->col_info[$col_offset]->{$info_type}; } } } function timer_start() { $mtime = microtime(); $mtime = explode(' ', $mtime); $this->time_start = $mtime[1] + $mtime[0]; return true; } function timer_stop($precision = 3) { $mtime = microtime(); $mtime = explode(' ', $mtime); $time_end = $mtime[1] + $mtime[0]; $time_total = $time_end - $this->time_start; return $time_total; } function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header( 'Content-Type: text/html; charset=utf-8'); echo << WordPress › Error

    WordPress

    HEAD; echo $message; echo ""; die(); } } $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); ?> wordpress/wp-includes/wp-db.php_-#__construct($dbuser, $dbpassword, $dbname, $dbhost); } function __construct($dbuser, $dbpassword, $dbname, $dbhost) { register_shutdown_function(array(&$this, "__destruct")); if ( defined('DB_CHARSET') ) $this->charset = DB_CHARSET; if ( defined('DB_COLLATE') ) $this->collate = DB_COLLATE; $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); if (!$this->dbh) { $this->bail("

    Error establishing a database connection

    This either means that the username and password information in your wp-config.php file is incorrect or we can't contact the database server at $dbhost. This could mean your host's database server is down.

    • Are you sure you have the correct username and password?
    • Are you sure that you have typed the correct hostname?
    • Are you sure that the database server is running?

    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

    "); } if ( !empty($this->charset) && version_compare(mysql_get_server_info(), '4.1.0', '>=') ) $this->query("SET NAMES '$this->charset'"); $this->select($dbname); } function __destruct() { return true; } /** * Selects a database using the current class's $this->dbh * @param string $db name */ function select($db) { if (!@mysql_select_db($db, $this->dbh)) { $this->bail("

    Can’t select database

    We were able to connect to the database server (which means your username and password is okay) but not able to select the $db database.

    • Are you sure it exists?
    • On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?

    If you don't know how to setup a database you should contact your host. If all else fails you may find help at the WordPress Support Forums.

    "); } } /** * Escapes content for insertion into the database, for security * * @param string $string * @return string query safe string */ function escape($string) { return addslashes( $string ); // Disable rest for now, causing problems if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' ) return mysql_escape_string( $string ); else return mysql_real_escape_string( $string, $this->dbh ); } // ================================================================== // Print SQL/DB error. function print_error($str = '') { global $EZSQL_ERROR; if (!$str) $str = mysql_error($this->dbh); $EZSQL_ERROR[] = array ('query' => $this->last_query, 'error_str' => $str); $str = htmlspecialchars($str, ENT_QUOTES); $query = htmlspecialchars($this->last_query, ENT_QUOTES); // Is error output turned on or not.. if ( $this->show_errors ) { // If there is an error then take note of it print "

    WordPress database error: [$str]
    $query

    "; } else { return false; } } // ================================================================== // Turn error handling on or off.. function show_errors() { $this->show_errors = true; } function hide_errors() { $this->show_errors = false; } // ================================================================== // Kill cached query results function flush() { $this->last_result = array(); $this->col_info = null; $this->last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query) { // filter the query, if filters are available // NOTE: some queries are made before the plugins have been loaded, and thus cannot be filtered with this method if ( function_exists('apply_filters') ) $query = apply_filters('query', $query); // initialise return $return_val = 0; $this->flush(); // Log how the function was called $this->func_call = "\$db->query(\"$query\")"; // Keep track of the last query for debug.. $this->last_query = $query; // Perform the query via std mysql_query function.. if (SAVEQUERIES) $this->timer_start(); $this->result = @mysql_query($query, $this->dbh); ++$this->num_queries; if (SAVEQUERIES) $this->queries[] = array( $query, $this->timer_stop() ); // If there is an error then take note of it.. if ( mysql_error($this->dbh) ) { $this->print_error(); return false; } if ( preg_match("/^\\s*(insert|delete|update|replace) /i",$query) ) { $this->rows_affected = mysql_affected_rows($this->dbh); // Take note of the insert_id if ( preg_match("/^\\s*(insert|replace) /i",$query) ) { $this->insert_id = mysql_insert_id($this->dbh); } // Return number of rows affected $return_val = $this->rows_affected; } else { $i = 0; while ($i < @mysql_num_fields($this->result)) { $this->col_info[$i] = @mysql_fetch_field($this->result); $i++; } $num_rows = 0; while ( $row = @mysql_fetch_object($this->result) ) { $this->last_result[$num_rows] = $row; $num_rows++; } @mysql_free_result($this->result); // Log number of rows the query returned $this->num_rows = $num_rows; // Return number of rows selected $return_val = $this->num_rows; } return $return_val; } /** * Get one variable from the database * @param string $query (can be null as well, for caching, see codex) * @param int $x = 0 row num to return * @param int $y = 0 col num to return * @return mixed results */ function get_var($query=null, $x = 0, $y = 0) { $this->func_call = "\$db->get_var(\"$query\",$x,$y)"; if ( $query ) $this->query($query); // Extract var out of cached results based x,y vals if ( $this->last_result[$y] ) { $values = array_values(get_object_vars($this->last_result[$y])); } // If there is a value return it else return null return (isset($values[$x]) && $values[$x]!=='') ? $values[$x] : null; } /** * Get one row from the database * @param string $query * @param string $output ARRAY_A | ARRAY_N | OBJECT * @param int $y row num to return * @return mixed results */ function get_row($query = null, $output = OBJECT, $y = 0) { $this->func_call = "\$db->get_row(\"$query\",$output,$y)"; if ( $query ) $this->query($query); if ( !isset($this->last_result[$y]) ) return null; if ( $output == OBJECT ) { return $this->last_result[$y] ? $this->last_result[$y] : null; } elseif ( $output == ARRAY_A ) { return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null; } elseif ( $output == ARRAY_N ) { return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null; } else { $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"); } } /** * Gets one column from the database * @param string $query (can be null as well, for caching, see codex) * @param int $x col num to return * @return array results */ function get_col($query = null , $x = 0) { if ( $query ) $this->query($query); // Extract the column values for ( $i=0; $i < count($this->last_result); $i++ ) { $new_array[$i] = $this->get_var(null, $x, $i); } return $new_array; } /** * Return an entire result set from the database * @param string $query (can also be null to pull from the cache) * @param string $output ARRAY_A | ARRAY_N | OBJECT * @return mixed results */ function get_results($query = null, $output = OBJECT) { $this->func_call = "\$db->get_results(\"$query\", $output)"; if ( $query ) $this->query($query); // Send back array of objects. Each row is an object if ( $output == OBJECT ) { return $this->last_result; } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { if ( $this->last_result ) { $i = 0; foreach( $this->last_result as $row ) { $new_array[$i] = (array) $row; if ( $output == ARRAY_N ) { $new_array[$i] = array_values($new_array[$i]); } $i++; } return $new_array; } else { return null; } } } /** * Grabs column metadata from the last query * @param string $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill * @param int $col_offset 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type * @return mixed results */ function get_col_info($info_type = 'name', $col_offset = -1) { if ( $this->col_info ) { if ( $col_offset == -1 ) { $i = 0; foreach($this->col_info as $col ) { $new_array[$i] = $col->{$info_type}; $i++; } return $new_array; } else { return $this->col_info[$col_offset]->{$info_type}; } } } /** * Starts the timer, for debugging purposes */ function timer_start() { $mtime = microtime(); $mtime = explode(' ', $mtime); $this->time_start = $mtime[1] + $mtime[0]; return true; } /** * Stops the debugging timer * @return int total time spent on the query, in milliseconds */ function timer_stop() { $mtime = microtime(); $mtime = explode(' ', $mtime); $time_end = $mtime[1] + $mtime[0]; $time_total = $time_end - $this->time_start; return $time_total; } /** * Wraps fatal errors in a nice header and footer and dies. * @param string $message */ function bail($message) { // Just wraps errors in a nice header and footer if ( !$this->show_errors ) return false; header('Content-Type: text/html; charset=utf-8'); if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false) $admin_dir = ''; else $admin_dir = 'wp-admin/'; ?> WordPress › Error

    WordPress

    wordpress/wp-links-opml.php\n"; ?> Links for <?php echo attribute_escape(get_bloginfo('name').$cat_name); ?> GMT cat_name); ?> cat_ID}"); foreach ((array) $bookmarks as $bookmark) { $title = attribute_escape(apply_filters('link_title', $bookmark->link_name)); ?> wordpress/wp-login.php> > <?php bloginfo('name'); ?> › <?php echo $title; ?> text_direction) ) : ?>

    \n"; $errors = $newerrors; } echo '
    ' . apply_filters('login_errors', $errors) . "
    \n"; } } // End of login_header() switch ($action) { case 'logout' : wp_clearcookie(); do_action('wp_logout'); $redirect_to = 'wp-login.php?loggedout=true'; if ( isset( $_REQUEST['redirect_to'] ) ) $redirect_to = $_REQUEST['redirect_to']; wp_redirect($redirect_to); exit(); break; case 'lostpassword' : case 'retrievepassword' : $user_login = ''; $user_pass = ''; if ( $_POST ) { if ( empty( $_POST['user_login'] ) ) $errors['user_login'] = __('ERROR: The username field is empty.'); if ( empty( $_POST['user_email'] ) ) $errors['user_email'] = __('ERROR: The e-mail field is empty.'); do_action('lostpassword_post'); if ( empty( $errors ) ) { $user_data = get_userdatabylogin(trim($_POST['user_login'])); // redefining user_login ensures we return the right case in the email $user_login = $user_data->user_login; $user_email = $user_data->user_email; if (!$user_email || $user_email != $_POST['user_email']) { $errors['invalidcombo'] = __('ERROR: Invalid username / e-mail combination.'); } else { do_action('retreive_password', $user_login); // Misspelled and deprecated do_action('retrieve_password', $user_login); // Generate something random for a password... md5'ing current time with a rand salt $key = substr( md5( uniqid( microtime() ) ), 0, 8); // Now insert the new pass md5'd into the db $wpdb->query("UPDATE $wpdb->users SET user_activation_key = '$key' WHERE user_login = '$user_login'"); $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n"; $message .= get_option('siteurl') . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= get_option('siteurl') . "/wp-login.php?action=rp&key=$key\r\n"; if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message)) { die('

    ' . __('The e-mail could not be sent.') . "
    \n" . __('Possible reason: your host may have disabled the mail() function...') . '

    '); } else { wp_redirect('wp-login.php?checkemail=confirm'); exit(); } } } } if ( 'invalidkey' == $_GET['error'] ) $errors['invalidkey'] = __('Sorry, that key does not appear to be valid.'); do_action('lost_password'); login_header(__('Lost Password'), '

    ' . __('Please enter your username and e-mail address. You will receive a new password via e-mail.') . '

    '); ?>

    get_row("SELECT * FROM $wpdb->users WHERE user_activation_key = '$key'"); if ( empty( $user ) ) { wp_redirect('wp-login.php?action=lostpassword&error=invalidkey'); exit(); } do_action('password_reset'); // Generate something random for a password... md5'ing current time with a rand salt $new_pass = substr( md5( uniqid( microtime() ) ), 0, 7); $wpdb->query("UPDATE $wpdb->users SET user_pass = MD5('$new_pass'), user_activation_key = '' WHERE user_login = '$user->user_login'"); wp_cache_delete($user->ID, 'users'); wp_cache_delete($user->user_login, 'userlogins'); $message = sprintf(__('Username: %s'), $user->user_login) . "\r\n"; $message .= sprintf(__('Password: %s'), $new_pass) . "\r\n"; $message .= get_option('siteurl') . "/wp-login.php\r\n"; if (FALSE == wp_mail($user->user_email, sprintf(__('[%s] Your new password'), get_option('blogname')), $message)) { die('

    ' . __('The e-mail could not be sent.') . "
    \n" . __('Possible reason: your host may have disabled the mail() function...') . '

    '); } else { // send a copy of password change notification to the admin // but check to see if it's the admin whose password we're changing, and skip this if ($user->user_email != get_option('admin_email')) { $message = sprintf(__('Password Lost and Changed for user: %s'), $user->user_login) . "\r\n"; wp_mail(get_option('admin_email'), sprintf(__('[%s] Password Lost/Changed'), get_option('blogname')), $message); } wp_redirect('wp-login.php?checkemail=newpass'); exit(); } break; case 'register' : if ( FALSE == get_option('users_can_register') ) { wp_redirect('wp-login.php?registration=disabled'); exit(); } if ( $_POST ) { require_once( ABSPATH . WPINC . '/registration.php'); $user_login = sanitize_user( $_POST['user_login'] ); $user_email = apply_filters( 'user_registration_email', $_POST['user_email'] ); // Check the username if ( $user_login == '' ) $errors['user_login'] = __('ERROR: Please enter a username.'); elseif ( !validate_username( $user_login ) ) { $errors['user_login'] = __('ERROR: This username is invalid. Please enter a valid username.'); $user_login = ''; } elseif ( username_exists( $user_login ) ) $errors['user_login'] = __('ERROR: This username is already registered, please choose another one.'); // Check the e-mail address if ($user_email == '') { $errors['user_email'] = __('ERROR: Please type your e-mail address.'); } elseif ( !is_email( $user_email ) ) { $errors['user_email'] = __('ERROR: The email address isn’t correct.'); $user_email = ''; } elseif ( email_exists( $user_email ) ) $errors['user_email'] = __('ERROR: This email is already registered, please choose another one.'); do_action('register_post'); $errors = apply_filters( 'registration_errors', $errors ); if ( empty( $errors ) ) { $user_pass = substr( md5( uniqid( microtime() ) ), 0, 7); $user_id = wp_create_user( $user_login, $user_pass, $user_email ); if ( !$user_id ) $errors['registerfail'] = sprintf(__('ERROR: Couldn’t register you... please contact the webmaster !'), get_option('admin_email')); else { wp_new_user_notification($user_id, $user_pass); wp_redirect('wp-login.php?checkemail=registered'); exit(); } } } login_header(__('Registration Form'), '

    ' . __('Register For This Site') . '

    '); ?>

    has_cap('edit_posts') && ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' ) ) $redirect_to = get_option('siteurl') . '/wp-admin/profile.php'; if ( wp_login($user_login, $user_pass, $using_cookie) ) { if ( !$using_cookie ) wp_setcookie($user_login, $user_pass, false, '', '', $rememberme); do_action('wp_login', $user_login); // printf (__FILE__ . "Point last ". $redirect_to."\n"); wp_redirect($redirect_to); exit(); } else { if ( $using_cookie ) $errors['expiredsession'] = __('Your session has expired.'); } } if ( $_POST && empty( $user_login ) ) $errors['user_login'] = __('ERROR: The username field is empty.'); if ( $_POST && empty( $user_pass ) ) $errors['user_pass'] = __('ERROR: The password field is empty.'); // Some parts of this script use the main login form to display a message if ( TRUE == $_GET['loggedout'] ) $errors['loggedout'] = __('Successfully logged you out.'); elseif ( 'disabled' == $_GET['registration'] ) $errors['registerdiabled'] = __('User registration is currently not allowed.'); elseif ( 'confirm' == $_GET['checkemail'] ) $errors['confirm'] = __('Check your e-mail for the confirmation link.'); elseif ( 'newpass' == $_GET['checkemail'] ) $errors['newpass'] = __('Check your e-mail for your new password.'); elseif ( 'registered' == $_GET['checkemail'] ) $errors['registered'] = __('Registration complete. Please check your e-mail.'); login_header(__('Login')); ?>

    wordpress/wp-mail.php4connect(get_option('mailserver_url'), get_option('mailserver_port'))) wp_die($pop3->ERROR); $count = $pop3->login(get_option('mailserver_login'), get_option('mailserver_pass')); if (0 == $count) wp_die(__('There doesn’t seem to be any new mail.')); for ($i=1; $i <= $count; $i++) : $message = $pop3->get($i); $content = ''; $content_type = ''; $content_transfer_encoding = ''; $boundary = ''; $bodysignal = 0; $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); foreach ($message as $line) : if (strlen($line) < 3) $bodysignal = 1; if ($bodysignal) { $content .= $line; } else { if (preg_match('/Content-Type: /i', $line)) { $content_type = trim($line); $content_type = substr($content_type, 14, strlen($content_type)-14); $content_type = explode(';', $content_type); $content_type = $content_type[0]; } if (preg_match('/Content-Transfer-Encoding: /i', $line)) { $content_transfer_encoding = trim($line); $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding)-14); $content_transfer_encoding = explode(';', $content_transfer_encoding); $content_transfer_encoding = $content_transfer_encoding[0]; } if (($content_type == 'multipart/alternative') && (preg_match('/boundary="/', $line)) && ($boundary == '')) { $boundary = trim($line); $boundary = explode('"', $boundary); $boundary = $boundary[1]; } if (preg_match('/Subject: /i', $line)) { $subject = trim($line); $subject = substr($subject, 9, strlen($subject)-9); $subject = wp_iso_descrambler($subject); // Captures any text in the subject before $phone_delim as the subject $subject = explode($phone_delim, $subject); $subject = $subject[0]; } // Set the author using the email address (To or Reply-To, the last used) // otherwise use the site admin if (preg_match('/From: /', $line) | preg_match('/Reply-To: /', $line)) { $author=trim($line); if ( ereg("([a-zA-Z0-9\_\-\.]+@[\a-zA-z0-9\_\-\.]+)", $author , $regs) ) { $author = $regs[1]; echo "Author = {$author}

    "; $author = $wpdb->escape($author); $result = $wpdb->get_row("SELECT ID FROM $wpdb->users WHERE user_email='$author' LIMIT 1"); if (!$result) $post_author = 1; else $post_author = $result->ID; } else $post_author = 1; } if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37' $ddate = trim($line); $ddate = str_replace('Date: ', '', $ddate); if (strpos($ddate, ',')) { $ddate = trim(substr($ddate, strpos($ddate, ',')+1, strlen($ddate))); } $date_arr = explode(' ', $ddate); $date_time = explode(':', $date_arr[3]); $ddate_H = $date_time[0]; $ddate_i = $date_time[1]; $ddate_s = $date_time[2]; $ddate_m = $date_arr[1]; $ddate_d = $date_arr[0]; $ddate_Y = $date_arr[2]; for ($j=0; $j<12; $j++) { if ($ddate_m == $dmonths[$j]) { $ddate_m = $j+1; } } $time_zn = intval($date_arr[4]) * 36; $ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y); $ddate_U = $ddate_U - $time_zn; $post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference); $post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U); } } endforeach; $subject = trim(str_replace(get_option('subjectprefix'), '', $subject)); if ($content_type == 'multipart/alternative') { $content = explode('--'.$boundary, $content); $content = $content[2]; $content = explode('Content-Transfer-Encoding: quoted-printable', $content); $content = strip_tags($content[1], '


    '); } $content = trim($content); if (stripos($content_transfer_encoding, "quoted-printable") != false) { $content = quoted_printable_decode($content); } // Captures any text in the body after $phone_delim as the body $content = explode($phone_delim, $content); $content[1] ? $content = $content[1] : $content = $content[0]; echo "

    Content-type: $content_type, Content-Transfer-Encoding: $content_transfer_encoding, boundary: $boundary

    \n"; echo "

    Raw content:

    ".$content.'

    '; $content = trim($content); $post_content = apply_filters('phone_content', $content); $post_title = xmlrpc_getposttitle($content); if ($post_title == '') $post_title = $subject; if (empty($post_categories)) $post_categories[] = get_option('default_email_category'); $post_category = $post_categories; // or maybe we should leave the choice to email drafts? propose a way $post_status = 'publish'; $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status'); $post_data = add_magic_quotes($post_data); $post_ID = wp_insert_post($post_data); if (!$post_ID) { // we couldn't post, for whatever reason. better move forward to the next email continue; } do_action('publish_phone', $post_ID); echo "\n

    Author: $post_author

    "; echo "\n

    Posted title: $post_title
    "; echo "\nPosted content:

    ".$content.'

    '; if(!$pop3->delete($i)) { echo '

    Oops '.$pop3->ERROR.'

    '; $pop3->reset(); exit; } else { echo "

    Mission complete, message $i deleted.

    "; } endfor; $pop3->quit(); ?> wordpress/wp-pass.php#wordpress/wp-rdf.phpwordpress/wp-register.phpwordpress/wp-rss2.phpwordpress/wp-rss.php}wordpress/wp-settings.php$X $v ) if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) { $GLOBALS[$k] = NULL; unset($GLOBALS[$k]); } } wp_unregister_GLOBALS(); unset( $wp_filter, $cache_userdata, $cache_lastcommentmodified, $cache_lastpostdate, $cache_settings, $category_cache, $cache_categories ); if ( ! isset($blog_id) ) $blog_id = 1; // Fix for IIS, which doesn't set REQUEST_URI if ( empty( $_SERVER['REQUEST_URI'] ) ) { $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME']; // Does this work under CGI? // Append the query string if it exists and isn't null if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; } } // Fix for PHP as CGI hosts that set SCRIPT_FILENAME to something ending in php.cgi for all requests if ( isset($_SERVER['SCRIPT_FILENAME']) && ( strpos($_SERVER['SCRIPT_FILENAME'], 'php.cgi') == strlen($_SERVER['SCRIPT_FILENAME']) - 7 ) ) $_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED']; // Fix for Dreamhost and other PHP as CGI hosts if (strpos($_SERVER['SCRIPT_NAME'], 'php.cgi') != false) unset($_SERVER['PATH_INFO']); // Fix empty PHP_SELF $PHP_SELF = $_SERVER['PHP_SELF']; if ( empty($PHP_SELF) ) $_SERVER['PHP_SELF'] = $PHP_SELF = preg_replace("/(\?.*)?$/",'',$_SERVER["REQUEST_URI"]); if ( !(phpversion() >= '4.2') ) die( 'Your server is running PHP version ' . phpversion() . ' but WordPress requires at least 4.2.' ); if ( !extension_loaded('mysql') && !extension_loaded('odbc') && !file_exists(ABSPATH . 'wp-content/db.php') ) die( 'Your PHP installation appears to be missing the MySQL which is required for WordPress.' ); function timer_start() { global $timestart; $mtime = explode(' ', microtime() ); $mtime = $mtime[1] + $mtime[0]; $timestart = $mtime; return true; } function timer_stop($display = 0, $precision = 3) { //if called like timer_stop(1), will echo $timetotal global $timestart, $timeend; $mtime = microtime(); $mtime = explode(' ',$mtime); $mtime = $mtime[1] + $mtime[0]; $timeend = $mtime; $timetotal = $timeend-$timestart; $r = number_format($timetotal, $precision); if ( $display ) echo $r; return $r; } timer_start(); // Change to E_ALL for development/debugging error_reporting(E_ALL ^ E_NOTICE); // For an advanced caching plugin to use, static because you would only want one if ( defined('WP_CACHE') ) @include ABSPATH . 'wp-content/advanced-cache.php'; define('WPINC', 'wp-includes'); if ( !defined('LANGDIR') ) { if ( file_exists(ABSPATH . 'wp-content/languages') && @is_dir(ABSPATH . 'wp-content/languages') ) define('LANGDIR', 'wp-content/languages'); // no leading slash, no trailing slash else define('LANGDIR', WPINC . '/languages'); // no leading slash, no trailing slash } if ( !defined('PLUGINDIR') ) define('PLUGINDIR', 'wp-content/plugins'); // no leading slash, no trailing slash if ( file_exists(ABSPATH . 'wp-content/db.php') ) require (ABSPATH . 'wp-content/db.php'); else require_once (ABSPATH . WPINC . '/wp-db.php'); // $table_prefix is deprecated as of 2.1 $wpdb->prefix = $table_prefix; if ( preg_match('|[^a-z0-9_.]|i', $wpdb->prefix) && !file_exists(ABSPATH . 'wp-content/db.php') ) die("ERROR: $table_prefix in wp-config.php can only contain numbers, letters, and underscores."); // Table names $wpdb->posts = $wpdb->prefix . 'posts'; $wpdb->users = $wpdb->prefix . 'users'; $wpdb->categories = $wpdb->prefix . 'categories'; $wpdb->post2cat = $wpdb->prefix . 'post2cat'; $wpdb->comments = $wpdb->prefix . 'comments'; $wpdb->link2cat = $wpdb->prefix . 'link2cat'; $wpdb->links = $wpdb->prefix . 'links'; $wpdb->options = $wpdb->prefix . 'options'; $wpdb->postmeta = $wpdb->prefix . 'postmeta'; $wpdb->usermeta = $wpdb->prefix . 'usermeta'; if ( defined('CUSTOM_USER_TABLE') ) $wpdb->users = CUSTOM_USER_TABLE; if ( defined('CUSTOM_USER_META_TABLE') ) $wpdb->usermeta = CUSTOM_USER_META_TABLE; if ( file_exists(ABSPATH . 'wp-content/object-cache.php') ) require (ABSPATH . 'wp-content/object-cache.php'); else require (ABSPATH . WPINC . '/cache.php'); wp_cache_init(); require (ABSPATH . WPINC . '/functions.php'); require (ABSPATH . WPINC . '/classes.php'); require (ABSPATH . WPINC . '/plugin.php'); require (ABSPATH . WPINC . '/default-filters.php'); include_once(ABSPATH . WPINC . '/streams.php'); include_once(ABSPATH . WPINC . '/gettext.php'); require_once (ABSPATH . WPINC . '/l10n.php'); if ( !is_blog_installed() && (strpos($_SERVER['PHP_SELF'], 'install.php') == false && !defined('WP_INSTALLING')) ) { if (strpos($_SERVER['PHP_SELF'], 'wp-admin') != false) $link = 'install.php'; else $link = 'wp-admin/install.php'; wp_die(sprintf("It doesn't look like you've installed WP yet. Try running install.php.", $link)); } require (ABSPATH . WPINC . '/formatting.php'); require (ABSPATH . WPINC . '/capabilities.php'); require (ABSPATH . WPINC . '/query.php'); require (ABSPATH . WPINC . '/theme.php'); require (ABSPATH . WPINC . '/user.php'); require (ABSPATH . WPINC . '/general-template.php'); require (ABSPATH . WPINC . '/link-template.php'); require (ABSPATH . WPINC . '/author-template.php'); require (ABSPATH . WPINC . '/post.php'); require (ABSPATH . WPINC . '/post-template.php'); require (ABSPATH . WPINC . '/category.php'); require (ABSPATH . WPINC . '/category-template.php'); require (ABSPATH . WPINC . '/comment.php'); require (ABSPATH . WPINC . '/comment-template.php'); require (ABSPATH . WPINC . '/rewrite.php'); require (ABSPATH . WPINC . '/feed.php'); require (ABSPATH . WPINC . '/bookmark.php'); require (ABSPATH . WPINC . '/bookmark-template.php'); require (ABSPATH . WPINC . '/kses.php'); require (ABSPATH . WPINC . '/cron.php'); require (ABSPATH . WPINC . '/version.php'); require (ABSPATH . WPINC . '/deprecated.php'); require (ABSPATH . WPINC . '/script-loader.php'); if (strpos($_SERVER['PHP_SELF'], 'install.php') == false) { // Used to guarantee unique hash cookies $cookiehash = md5(get_option('siteurl')); define('COOKIEHASH', $cookiehash); } if ( !defined('USER_COOKIE') ) define('USER_COOKIE', 'wordpressuser_'. COOKIEHASH); if ( !defined('PASS_COOKIE') ) define('PASS_COOKIE', 'wordpresspass_'. COOKIEHASH); if ( !defined('COOKIEPATH') ) define('COOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('home') . '/' ) ); if ( !defined('SITECOOKIEPATH') ) define('SITECOOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl') . '/' ) ); if ( !defined('COOKIE_DOMAIN') ) define('COOKIE_DOMAIN', false); require (ABSPATH . WPINC . '/vars.php'); // Check for hacks file if the option is enabled if (get_option('hack_file')) { if (file_exists(ABSPATH . '/my-hacks.php')) require(ABSPATH . '/my-hacks.php'); } if ( get_option('active_plugins') ) { $current_plugins = get_option('active_plugins'); if ( is_array($current_plugins) ) { foreach ($current_plugins as $plugin) { if ('' != $plugin && file_exists(ABSPATH . PLUGINDIR . '/' . $plugin)) include_once(ABSPATH . PLUGINDIR . '/' . $plugin); } } } require (ABSPATH . WPINC . '/pluggable.php'); if ( defined('WP_CACHE') && function_exists('wp_cache_postload') ) wp_cache_postload(); do_action('plugins_loaded'); // If already slashed, strip. if ( get_magic_quotes_gpc() ) { $_GET = stripslashes_deep($_GET ); $_POST = stripslashes_deep($_POST ); $_COOKIE = stripslashes_deep($_COOKIE); } // Escape with wpdb. $_GET = add_magic_quotes($_GET ); $_POST = add_magic_quotes($_POST ); $_COOKIE = add_magic_quotes($_COOKIE); $_SERVER = add_magic_quotes($_SERVER); do_action('sanitize_comment_cookies'); $wp_the_query =& new WP_Query(); $wp_query =& $wp_the_query; $wp_rewrite =& new WP_Rewrite(); $wp =& new WP(); validate_current_theme(); define('TEMPLATEPATH', get_template_directory()); define('STYLESHEETPATH', get_stylesheet_directory()); // Load the default text localization domain. load_default_textdomain(); $locale = get_locale(); $locale_file = ABSPATH . LANGDIR . "/$locale.php"; if ( is_readable($locale_file) ) require_once($locale_file); // Pull in locale data after loading text domain. require_once(ABSPATH . WPINC . '/locale.php'); $wp_locale =& new WP_Locale(); // Load functions for active theme. if ( TEMPLATEPATH != STYLESHEETPATH && file_exists(STYLESHEETPATH . '/functions.php') ) include(STYLESHEETPATH . '/functions.php'); if ( file_exists(TEMPLATEPATH . '/functions.php') ) include(TEMPLATEPATH . '/functions.php'); function shutdown_action_hook() { do_action('shutdown'); wp_cache_close(); } register_shutdown_function('shutdown_action_hook'); // Everything is loaded and initialized. do_action('init'); ?> wordpress/wp-trackback.php \n"; echo "\n"; echo "1\n"; echo "$error_message\n"; echo ""; die(); } else { echo '\n"; echo "\n"; echo "0\n"; echo ""; } } // trackback is done by a POST $request_array = 'HTTP_POST_VARS'; if ( !$_GET['tb_id'] ) { $tb_id = explode('/', $_SERVER['REQUEST_URI']); $tb_id = intval( $tb_id[ count($tb_id) - 1 ] ); } $tb_url = $_POST['url']; $charset = $_POST['charset']; // These three are stripslashed here so that they can be properly escaped after mb_convert_encoding() $title = stripslashes($_POST['title']); $excerpt = stripslashes($_POST['excerpt']); $blog_name = stripslashes($_POST['blog_name']); if ($charset) $charset = strtoupper( trim($charset) ); else $charset = 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS'; if ( function_exists('mb_convert_encoding') ) { // For international trackbacks $title = mb_convert_encoding($title, get_option('blog_charset'), $charset); $excerpt = mb_convert_encoding($excerpt, get_option('blog_charset'), $charset); $blog_name = mb_convert_encoding($blog_name, get_option('blog_charset'), $charset); } // Now that mb_convert_encoding() has been given a swing, we need to escape these three $title = $wpdb->escape($title); $excerpt = $wpdb->escape($excerpt); $blog_name = $wpdb->escape($blog_name); if ( is_single() || is_page() ) $tb_id = $posts[0]->ID; if ( !intval( $tb_id ) ) trackback_response(1, 'I really need an ID for this to work.'); if (empty($title) && empty($tb_url) && empty($blog_name)) { // If it doesn't look like a trackback at all... wp_redirect(get_permalink($tb_id)); exit; } if ( !empty($tb_url) && !empty($title) ) { header('Content-Type: text/xml; charset=' . get_option('blog_charset') ); $pingstatus = $wpdb->get_var("SELECT ping_status FROM $wpdb->posts WHERE ID = " . $tb_id); if ( 'open' != $pingstatus ) trackback_response(1, 'Sorry, trackbacks are closed for this item.'); $title = wp_specialchars( strip_tags( $title ) ); $excerpt = strip_tags($excerpt); if ( function_exists('mb_strcut') ) { // For international trackbacks $excerpt = mb_strcut($excerpt, 0, 252, get_option('blog_charset')) . '...'; $title = mb_strcut($title, 0, 250, get_option('blog_charset')) . '...'; } else { $excerpt = (strlen($excerpt) > 255) ? substr($excerpt, 0, 252) . '...' : $excerpt; $title = (strlen($title) > 250) ? substr($title, 0, 250) . '...' : $title; } $comment_post_ID = (int) $tb_id; $comment_author = $blog_name; $comment_author_email = ''; $comment_author_url = $tb_url; $comment_content = "$title\n\n$excerpt"; $comment_type = 'trackback'; $dupe = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $comment_post_ID . " AND comment_author_url = '$comment_author_url'"); if ( $dupe ) trackback_response(1, 'We already have a ping from that URL for this post.'); $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type'); wp_new_comment($commentdata); do_action('trackback_post', $wpdb->insert_id); trackback_response(0); } ?>wordpress/xmlrpc.phpG '; ?> WordPress http://wordpress.org/ methods = array( // WordPress API 'wp.getPage' => 'this:wp_getPage', 'wp.getPages' => 'this:wp_getPages', 'wp.newPage' => 'this:wp_newPage', 'wp.deletePage' => 'this:wp_deletePage', 'wp.editPage' => 'this:wp_editPage', 'wp.getPageList' => 'this:wp_getPageList', 'wp.getAuthors' => 'this:wp_getAuthors', 'wp.getCategories' => 'this:mw_getCategories', // Alias 'wp.newCategory' => 'this:wp_newCategory', 'wp.suggestCategories' => 'this:wp_suggestCategories', 'wp.uploadFile' => 'this:mw_newMediaObject', // Alias // Blogger API 'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs', 'blogger.getUserInfo' => 'this:blogger_getUserInfo', 'blogger.getPost' => 'this:blogger_getPost', 'blogger.getRecentPosts' => 'this:blogger_getRecentPosts', 'blogger.getTemplate' => 'this:blogger_getTemplate', 'blogger.setTemplate' => 'this:blogger_setTemplate', 'blogger.newPost' => 'this:blogger_newPost', 'blogger.editPost' => 'this:blogger_editPost', 'blogger.deletePost' => 'this:blogger_deletePost', // MetaWeblog API (with MT extensions to structs) 'metaWeblog.newPost' => 'this:mw_newPost', 'metaWeblog.editPost' => 'this:mw_editPost', 'metaWeblog.getPost' => 'this:mw_getPost', 'metaWeblog.getRecentPosts' => 'this:mw_getRecentPosts', 'metaWeblog.getCategories' => 'this:mw_getCategories', 'metaWeblog.newMediaObject' => 'this:mw_newMediaObject', // MetaWeblog API aliases for Blogger API // see http://www.xmlrpc.com/stories/storyReader$2460 'metaWeblog.deletePost' => 'this:blogger_deletePost', 'metaWeblog.getTemplate' => 'this:blogger_getTemplate', 'metaWeblog.setTemplate' => 'this:blogger_setTemplate', 'metaWeblog.getUsersBlogs' => 'this:blogger_getUsersBlogs', // MovableType API 'mt.getCategoryList' => 'this:mt_getCategoryList', 'mt.getRecentPostTitles' => 'this:mt_getRecentPostTitles', 'mt.getPostCategories' => 'this:mt_getPostCategories', 'mt.setPostCategories' => 'this:mt_setPostCategories', 'mt.supportedMethods' => 'this:mt_supportedMethods', 'mt.supportedTextFilters' => 'this:mt_supportedTextFilters', 'mt.getTrackbackPings' => 'this:mt_getTrackbackPings', 'mt.publishPost' => 'this:mt_publishPost', // PingBack 'pingback.ping' => 'this:pingback_ping', 'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks', 'demo.sayHello' => 'this:sayHello', 'demo.addTwoNumbers' => 'this:addTwoNumbers' ); $this->methods = apply_filters('xmlrpc_methods', $this->methods); $this->IXR_Server($this->methods); } function sayHello($args) { return 'Hello!'; } function addTwoNumbers($args) { $number1 = $args[0]; $number2 = $args[1]; return $number1 + $number2; } function login_pass_ok($user_login, $user_pass) { if (!user_pass_ok($user_login, $user_pass)) { $this->error = new IXR_Error(403, __('Bad login/pass combination.')); return false; } return true; } function escape(&$array) { global $wpdb; if(!is_array($array)) { return($wpdb->escape($array)); } else { foreach ( (array) $array as $k => $v ) { if (is_array($v)) { $this->escape($array[$k]); } else if (is_object($v)) { //skip } else { $array[$k] = $wpdb->escape($v); } } } } /** * WordPress XML-RPC API * wp_getPage */ function wp_getPage($args) { $this->escape($args); $blog_id = (int) $args[0]; $page_id = (int) $args[1]; $username = $args[2]; $password = $args[3]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Lookup page info. $page = get_page($page_id); // If we found the page then format the data. if($page->ID && ($page->post_type == "page")) { // Get all of the page content and link. $full_page = get_extended($page->post_content); $link = post_permalink($page->ID); // Get info the page parent if there is one. $parent_title = ""; if(!empty($page->post_parent)) { $parent = get_page($page->post_parent); $parent_title = $parent->post_title; } // Determine comment and ping settings. $allow_comments = ("open" == $page->comment_status) ? 1 : 0; $allow_pings = ("open" == $page->ping_status) ? 1 : 0; // Format page date. $page_date = mysql2date("Ymd\TH:i:s\Z", $page->post_date_gmt); // Pull the categories info together. $categories = array(); foreach(wp_get_post_categories($page->ID) as $cat_id) { $categories[] = get_cat_name($cat_id); } // Get the author info. $author = get_userdata($page->post_author); $page_struct = array( "dateCreated" => new IXR_Date($page_date), "userid" => $page->post_author, "page_id" => $page->ID, "page_status" => $page->post_status, "description" => $full_page["main"], "title" => $page->post_title, "link" => $link, "permaLink" => $link, "categories" => $categories, "excerpt" => $page->post_excerpt, "text_more" => $full_page["extended"], "mt_allow_comments" => $allow_comments, "mt_allow_pings" => $allow_pings, "wp_slug" => $page->post_name, "wp_password" => $page->post_password, "wp_author" => $author->display_name, "wp_page_parent_id" => $page->post_parent, "wp_page_parent_title" => $parent_title, "wp_page_order" => $page->menu_order, "wp_author_id" => $author->ID, "wp_author_display_name" => $author->display_name ); return($page_struct); } // If the page doesn't exist indicate that. else { return(new IXR_Error(404, __("Sorry, no such page."))); } } /** * WordPress XML-RPC API * wp_getPages */ function wp_getPages($args) { $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Lookup info on pages. $pages = get_pages(); $num_pages = count($pages); // If we have pages, put together their info. if($num_pages >= 1) { $pages_struct = array(); for($i = 0; $i < $num_pages; $i++) { $page = wp_xmlrpc_server::wp_getPage(array( $blog_id, $pages[$i]->ID, $username, $password )); $pages_struct[] = $page; } return($pages_struct); } // If no pages were found return an error. else { return(array()); } } /** * WordPress XML-RPC API * wp_newPage */ function wp_newPage($args) { // Items not escaped here will be escaped in newPost. $username = $this->escape($args[1]); $password = $this->escape($args[2]); $page = $args[3]; $publish = $args[4]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Set the user context and check if they are allowed // to add new pages. $user = set_current_user(0, $username); if(!current_user_can("publish_pages")) { return(new IXR_Error(401, __("Sorry, you can not add new pages."))); } // Mark this as content for a page. $args[3]["post_type"] = "page"; // Let mw_newPost do all of the heavy lifting. return($this->mw_newPost($args)); } /** * WordPress XML-RPC API * wp_deletePage */ function wp_deletePage($args) { $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; $page_id = (int) $args[3]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Get the current page based on the page_id and // make sure it is a page and not a post. $actual_page = wp_get_single_post($page_id, ARRAY_A); if( !$actual_page || ($actual_page["post_type"] != "page") ) { return(new IXR_Error(404, __("Sorry, no such page."))); } // Set the user context and make sure they can delete pages. set_current_user(0, $username); if(!current_user_can("delete_page", $page_id)) { return(new IXR_Error(401, __("Sorry, you do not have the right to delete this page."))); } // Attempt to delete the page. $result = wp_delete_post($page_id); if(!$result) { return(new IXR_Error(500, __("Failed to delete the page."))); } return(true); } /** * WordPress XML-RPC API * wp_editPage */ function wp_editPage($args) { // Items not escaped here will be escaped in editPost. $blog_id = (int) $args[0]; $page_id = (int) $this->escape($args[1]); $username = $this->escape($args[2]); $password = $this->escape($args[3]); $content = $args[4]; $publish = $args[5]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Get the page data and make sure it is a page. $actual_page = wp_get_single_post($page_id, ARRAY_A); if( !$actual_page || ($actual_page["post_type"] != "page") ) { return(new IXR_Error(404, __("Sorry, no such page."))); } // Set the user context and make sure they are allowed to edit pages. set_current_user(0, $username); if(!current_user_can("edit_page", $page_id)) { return(new IXR_Error(401, __("Sorry, you do not have the right to edit this page."))); } // Mark this as content for a page. $content["post_type"] = "page"; // Arrange args in the way mw_editPost understands. $args = array( $page_id, $username, $password, $content, $publish ); // Let mw_editPost do all of the heavy lifting. return($this->mw_editPost($args)); } /** * WordPress XML-RPC API * wp_getPageList */ function wp_getPageList($args) { global $wpdb; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Get list of pages ids and titles $page_list = $wpdb->get_results(" SELECT ID page_id, post_title page_title, post_parent page_parent_id, post_date_gmt FROM {$wpdb->posts} WHERE post_type = 'page' ORDER BY ID "); // The date needs to be formated properly. $num_pages = count($page_list); for($i = 0; $i < $num_pages; $i++) { $post_date = mysql2date("Ymd\TH:i:s\Z", $page_list[$i]->post_date_gmt); $page_list[$i]->dateCreated = new IXR_Date($post_date); unset($page_list[$i]->post_date_gmt); } return($page_list); } /** * WordPress XML-RPC API * wp_getAuthors */ function wp_getAuthors($args) { global $wpdb; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } return(get_users_of_blog()); } /** * WordPress XML-RPC API * wp_newCategory */ function wp_newCategory($args) { $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; $category = $args[3]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Set the user context and make sure they are // allowed to add a category. set_current_user(0, $username); if(!current_user_can("manage_categories", $page_id)) { return(new IXR_Error(401, __("Sorry, you do not have the right to add a category."))); } // We need this to make use of the wp_insert_category() // funciton. require_once(ABSPATH . "wp-admin/admin-db.php"); // If no slug was provided make it empty so that // WordPress will generate one. if(empty($category["slug"])) { $category["slug"] = ""; } // If no parent_id was provided make it empty // so that it will be a top level page (no parent). if ( !isset($category["parent_id"]) ) $category["parent_id"] = ""; // If no description was provided make it empty. if(empty($category["description"])) { $category["description"] = ""; } $new_category = array( "cat_name" => $category["name"], "category_nicename" => $category["slug"], "category_parent" => $category["parent_id"], "category_description" => $category["description"] ); $cat_id = wp_insert_category($new_category); if(!$cat_id) { return(new IXR_Error(500, __("Sorry, the new category failed."))); } return($cat_id); } /** * WordPress XML-RPC API * wp_suggestCategories */ function wp_suggestCategories($args) { global $wpdb; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; $category = $args[3]; $max_results = (int) $args[4]; if(!$this->login_pass_ok($username, $password)) { return($this->error); } // Only set a limit if one was provided. $limit = ""; if(!empty($max_results)) { $limit = "LIMIT {$max_results}"; } $category_suggestions = $wpdb->get_results(" SELECT cat_ID category_id, cat_name category_name FROM {$wpdb->categories} WHERE cat_name LIKE '{$category}%' "); return($category_suggestions); } /* Blogger API functions * specs on http://plant.blogger.com/api and http://groups.yahoo.com/group/bloggerDev/ */ /* blogger.getUsersBlogs will make more sense once we support multiple blogs */ function blogger_getUsersBlogs($args) { $this->escape($args); $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); $is_admin = current_user_can('level_8'); $struct = array( 'isAdmin' => $is_admin, 'url' => get_option('home') . '/', 'blogid' => '1', 'blogName' => get_option('blogname') ); return array($struct); } /* blogger.getUsersInfo gives your client some info about you, so you don't have to */ function blogger_getUserInfo($args) { $this->escape($args); $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $user_data = get_userdatabylogin($user_login); $struct = array( 'nickname' => $user_data->nickname, 'userid' => $user_data->ID, 'url' => $user_data->user_url, 'email' => $user_data->user_email, 'lastname' => $user_data->last_name, 'firstname' => $user_data->first_name ); return $struct; } /* blogger.getPost ...gets a post */ function blogger_getPost($args) { $this->escape($args); $post_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $user_data = get_userdatabylogin($user_login); $post_data = wp_get_single_post($post_ID, ARRAY_A); $categories = implode(',', wp_get_post_categories($post_ID)); $content = ''.stripslashes($post_data['post_title']).''; $content .= ''.$categories.''; $content .= stripslashes($post_data['post_content']); $struct = array( 'userid' => $post_data['post_author'], 'dateCreated' => new IXR_Date(mysql2date('Ymd\TH:i:s', $post_data['post_date'])), 'content' => $content, 'postid' => $post_data['ID'] ); return $struct; } /* blogger.getRecentPosts ...gets recent posts */ function blogger_getRecentPosts($args) { global $wpdb; $this->escape($args); $blog_ID = (int) $args[1]; /* though we don't use it yet */ $user_login = $args[2]; $user_pass = $args[3]; $num_posts = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $posts_list = wp_get_recent_posts($num_posts); if (!$posts_list) { $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); return $this->error; } foreach ($posts_list as $entry) { $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date']); $categories = implode(',', wp_get_post_categories($entry['ID'])); $content = ''.stripslashes($entry['post_title']).''; $content .= ''.$categories.''; $content .= stripslashes($entry['post_content']); $struct[] = array( 'userid' => $entry['post_author'], 'dateCreated' => new IXR_Date($post_date), 'content' => $content, 'postid' => $entry['ID'], ); } $recent_posts = array(); for ($j=0; $jescape($args); $blog_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $template = $args[4]; /* could be 'main' or 'archiveIndex', but we don't use it */ if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_themes') ) { return new IXR_Error(401, __('Sorry, this user can not edit the template.')); } /* warning: here we make the assumption that the weblog's URL is on the same server */ $filename = get_option('home') . '/'; $filename = preg_replace('#https?://.+?/#', $_SERVER['DOCUMENT_ROOT'].'/', $filename); $f = fopen($filename, 'r'); $content = fread($f, filesize($filename)); fclose($f); /* so it is actually editable with a windows/mac client */ // FIXME: (or delete me) do we really want to cater to bad clients at the expense of good ones by BEEPing up their line breaks? commented. $content = str_replace("\n", "\r\n", $content); return $content; } /* blogger.setTemplate updates the content of blog_filename */ function blogger_setTemplate($args) { $this->escape($args); $blog_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $content = $args[4]; $template = $args[5]; /* could be 'main' or 'archiveIndex', but we don't use it */ if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_themes') ) { return new IXR_Error(401, __('Sorry, this user can not edit the template.')); } /* warning: here we make the assumption that the weblog's URL is on the same server */ $filename = get_option('home') . '/'; $filename = preg_replace('#https?://.+?/#', $_SERVER['DOCUMENT_ROOT'].'/', $filename); if ($f = fopen($filename, 'w+')) { fwrite($f, $content); fclose($f); } else { return new IXR_Error(500, __('Either the file is not writable, or something wrong happened. The file has not been updated.')); } return true; } /* blogger.newPost ...creates a new post */ function blogger_newPost($args) { global $wpdb; $this->escape($args); $blog_ID = (int) $args[1]; /* though we don't use it yet */ $user_login = $args[2]; $user_pass = $args[3]; $content = $args[4]; $publish = $args[5]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $cap = ($publish) ? 'publish_posts' : 'edit_posts'; $user = set_current_user(0, $user_login); if ( !current_user_can($cap) ) return new IXR_Error(401, __('Sorry, you can not post on this weblog or category.')); $post_status = ($publish) ? 'publish' : 'draft'; $post_author = $user->ID; $post_title = xmlrpc_getposttitle($content); $post_category = xmlrpc_getpostcategory($content); $post_content = xmlrpc_removepostdata($content); $post_date = current_time('mysql'); $post_date_gmt = current_time('mysql', 1); $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status'); $post_ID = wp_insert_post($post_data); if (!$post_ID) { return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); } $this->attach_uploads( $post_ID, $post_content ); logIO('O', "Posted ! ID: $post_ID"); return $post_ID; } /* blogger.editPost ...edits a post */ function blogger_editPost($args) { global $wpdb; $this->escape($args); $post_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $content = $args[4]; $publish = $args[5]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $actual_post = wp_get_single_post($post_ID,ARRAY_A); if (!$actual_post) { return new IXR_Error(404, __('Sorry, no such post.')); } $this->escape($actual_post); set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you do not have the right to edit this post.')); extract($actual_post, EXTR_SKIP); if ( ('publish' == $post_status) && !current_user_can('publish_posts') ) return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.')); $post_title = xmlrpc_getposttitle($content); $post_category = xmlrpc_getpostcategory($content); $post_content = xmlrpc_removepostdata($content); $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt'); $result = wp_update_post($postdata); if (!$result) { return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be edited.')); } $this->attach_uploads( $ID, $post_content ); return true; } /* blogger.deletePost ...deletes a post */ function blogger_deletePost($args) { global $wpdb; $this->escape($args); $post_ID = (int) $args[1]; $user_login = $args[2]; $user_pass = $args[3]; $publish = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $actual_post = wp_get_single_post($post_ID,ARRAY_A); if (!$actual_post) { return new IXR_Error(404, __('Sorry, no such post.')); } set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you do not have the right to delete this post.')); $result = wp_delete_post($post_ID); if (!$result) { return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be deleted.')); } return true; } /* MetaWeblog API functions * specs on wherever Dave Winer wants them to be */ /* metaweblog.newPost creates a post */ function mw_newPost($args) { global $wpdb, $post_default_category; $this->escape($args); $blog_ID = (int) $args[0]; // we will support this in the near future $user_login = $args[1]; $user_pass = $args[2]; $content_struct = $args[3]; $publish = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $cap = ($publish) ? 'publish_posts' : 'edit_posts'; $user = set_current_user(0, $user_login); if ( !current_user_can($cap) ) return new IXR_Error(401, __('Sorry, you can not post on this weblog or category.')); // The post_type defaults to post, but could also be page. $post_type = "post"; if( !empty($content_struct["post_type"]) && ($content_struct["post_type"] == "page") ) { $post_type = "page"; } // Let WordPress generate the post_name (slug) unless // one has been provided. $post_name = ""; if(isset($content_struct["wp_slug"])) { $post_name = $content_struct["wp_slug"]; } // Only use a password if one was given. if(isset($content_struct["wp_password"])) { $post_password = $content_struct["wp_password"]; } // Only set a post parent if one was provided. if(isset($content_struct["wp_page_parent_id"])) { $post_parent = $content_struct["wp_page_parent_id"]; } // Only set the menu_order if it was provided. if(isset($content_struct["wp_page_order"])) { $menu_order = $content_struct["wp_page_order"]; } $post_author = $user->ID; // If an author id was provided then use it instead. if( isset($content_struct["wp_author_id"]) && ($user->ID != $content_struct["wp_author_id"]) ) { switch($post_type) { case "post": if(!current_user_can("edit_others_posts")) { return(new IXR_Error(401, "You are not allowed to " . "post as this user")); } break; case "page": if(!current_user_can("edit_others_pages")) { return(new IXR_Error(401, "You are not allowed to " . "create pages as this user")); } break; default: return(new IXR_Error(401, __("Invalid post type."))); break; } $post_author = $content_struct["wp_author_id"]; } $post_title = $content_struct['title']; $post_content = apply_filters( 'content_save_pre', $content_struct['description'] ); $post_status = $publish ? 'publish' : 'draft'; $post_excerpt = $content_struct['mt_excerpt']; $post_more = $content_struct['mt_text_more']; if(isset($content_struct["mt_allow_comments"])) { if(!is_numeric($content_struct["mt_allow_comments"])) { switch($content_struct["mt_allow_comments"]) { case "closed": $comment_status = "closed"; break; case "open": $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } else { switch((int) $content_struct["mt_allow_comments"]) { case 0: $comment_status = "closed"; break; case 1: $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } } else { $comment_status = get_option("default_comment_status"); } if(isset($content_struct["mt_allow_pings"])) { if(!is_numeric($content_struct["mt_allow_pings"])) { switch($content_struct["mt_allow_pings"]) { case "closed": $ping_status = "closed"; break; case "open": $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } else { switch((int) $content_struct["mt_allow_pings"]) { case 0: $ping_status = "closed"; break; case 1: $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } } else { $ping_status = get_option("default_ping_status"); } if ($post_more) { $post_content = $post_content . "\n\n" . $post_more; } $to_ping = $content_struct['mt_tb_ping_urls']; if ( is_array($to_ping) ) $to_ping = implode(' ', $to_ping); // Do some timestamp voodoo $dateCreatedd = $content_struct['dateCreated']; if (!empty($dateCreatedd)) { $dateCreated = $dateCreatedd->getIso(); $post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); $post_date_gmt = iso8601_to_datetime($dateCreated. "Z", GMT); } else { $post_date = current_time('mysql'); $post_date_gmt = current_time('mysql', 1); } $catnames = $content_struct['categories']; logIO('O', 'Post cats: ' . printr($catnames,true)); $post_category = array(); if (is_array($catnames)) { foreach ($catnames as $cat) { $post_category[] = get_cat_ID($cat); } } // We've got all the data -- post it: $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'to_ping', 'post_type', 'post_name', 'post_password', 'post_parent', 'menu_order'); $post_ID = wp_insert_post($postdata); if (!$post_ID) { return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); } $this->attach_uploads( $post_ID, $post_content ); logIO('O', "Posted ! ID: $post_ID"); return strval($post_ID); } function attach_uploads( $post_ID, $post_content ) { global $wpdb; // find any unattached files $attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '-1' AND post_type = 'attachment'" ); if( is_array( $attachments ) ) { foreach( $attachments as $file ) { if( strpos( $post_content, $file->guid ) != false ) { $wpdb->query( "UPDATE {$wpdb->posts} SET post_parent = " . $post_ID . " WHERE ID = " . $file->ID ); } } } } /* metaweblog.editPost ...edits a post */ function mw_editPost($args) { global $wpdb, $post_default_category; $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $content_struct = $args[3]; $publish = $args[4]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $user = set_current_user(0, $user_login); // The post_type defaults to post, but could also be page. $post_type = "post"; if( !empty($content_struct["post_type"]) && ($content_struct["post_type"] == "page") ) { $post_type = "page"; } // Edit page caps are checked in editPage. Just check post here. if ( ( 'post' == $post_type ) && !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you can not edit this post.')); $postdata = wp_get_single_post($post_ID, ARRAY_A); // If there is no post data for the give post id, stop // now and return an error. Other wise a new post will be // created (which was the old behavior). if(empty($postdata["ID"])) { return(new IXR_Error(404, __("Invalid post id."))); } $this->escape($postdata); extract($postdata, EXTR_SKIP); // Let WordPress manage slug if none was provided. $post_name = ""; if(isset($content_struct["wp_slug"])) { $post_name = $content_struct["wp_slug"]; } // Only use a password if one was given. if(isset($content_struct["wp_password"])) { $post_password = $content_struct["wp_password"]; } // Only set a post parent if one was given. if(isset($content_struct["wp_page_parent_id"])) { $post_parent = $content_struct["wp_page_parent_id"]; } // Only set the menu_order if it was given. if(isset($content_struct["wp_page_order"])) { $menu_order = $content_struct["wp_page_order"]; } $post_author = $postdata["post_author"]; // Only set the post_author if one is set. if( isset($content_struct["wp_author_id"]) && ($user->ID != $content_struct["wp_author_id"]) ) { switch($post_type) { case "post": if(!current_user_can("edit_others_posts")) { return(new IXR_Error(401, "You are not allowed to " . "change the post author as this user.")); } break; case "page": if(!current_user_can("edit_others_pages")) { return(new IXR_Error(401, "You are not allowed to " . "change the page author as this user.")); } break; default: return(new IXR_Error(401, __("Invalid post type."))); break; } $post_author = $content_struct["wp_author_id"]; } if(isset($content_struct["mt_allow_comments"])) { if(!is_numeric($content_struct["mt_allow_comments"])) { switch($content_struct["mt_allow_comments"]) { case "closed": $comment_status = "closed"; break; case "open": $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } else { switch((int) $content_struct["mt_allow_comments"]) { case 0: $comment_status = "closed"; break; case 1: $comment_status = "open"; break; default: $comment_status = get_option("default_comment_status"); break; } } } if(isset($content_struct["mt_allow_pings"])) { if(!is_numeric($content_struct["mt_allow_pings"])) { switch($content_struct["mt_allow_pings"]) { case "closed": $ping_status = "closed"; break; case "open": $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } else { switch((int) $content_struct["mt_allow_pings"]) { case 0: $ping_status = "closed"; break; case 1: $ping_status = "open"; break; default: $ping_status = get_option("default_ping_status"); break; } } } $post_title = $content_struct['title']; $post_content = apply_filters( 'content_save_pre', $content_struct['description'] ); $catnames = $content_struct['categories']; $post_category = array(); if (is_array($catnames)) { foreach ($catnames as $cat) { $post_category[] = get_cat_ID($cat); } } $post_excerpt = $content_struct['mt_excerpt']; $post_more = $content_struct['mt_text_more']; $post_status = $publish ? 'publish' : 'draft'; if ( ('publish' == $post_status) ) { if ( ( 'page' == $post_type ) && !current_user_can('publish_pages') ) return new IXR_Error(401, __('Sorry, you do not have the right to publish this page.')); else if ( !current_user_can('publish_posts') ) return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.')); } if ($post_more) { $post_content = $post_content . "\n\n" . $post_more; } $to_ping = $content_struct['mt_tb_ping_urls']; if ( is_array($to_ping) ) $to_ping = implode(' ', $to_ping); // Do some timestamp voodoo $dateCreatedd = $content_struct['dateCreated']; if (!empty($dateCreatedd)) { $dateCreated = $dateCreatedd->getIso(); $post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); $post_date_gmt = iso8601_to_datetime($dateCreated . "Z", GMT); } else { $post_date = $postdata['post_date']; $post_date_gmt = $postdata['post_date_gmt']; } // We've got all the data -- post it: $newpost = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'post_date', 'post_date_gmt', 'to_ping', 'post_name', 'post_password', 'post_parent', 'menu_order', 'post_author'); $result = wp_update_post($newpost); if (!$result) { return new IXR_Error(500, __('Sorry, your entry could not be edited. Something wrong happened.')); } $this->attach_uploads( $ID, $post_content ); logIO('O',"(MW) Edited ! ID: $post_ID"); return true; } /* metaweblog.getPost ...returns a post */ function mw_getPost($args) { global $wpdb; $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $postdata = wp_get_single_post($post_ID, ARRAY_A); if ($postdata['post_date'] != '') { $post_date = mysql2date('Ymd\TH:i:s\Z', $postdata['post_date_gmt']); $categories = array(); $catids = wp_get_post_categories($post_ID); foreach($catids as $catid) { $categories[] = get_cat_name($catid); } $post = get_extended($postdata['post_content']); $link = post_permalink($postdata['ID']); // Get the author info. $author = get_userdata($postdata['post_author']); $allow_comments = ('open' == $postdata['comment_status']) ? 1 : 0; $allow_pings = ('open' == $postdata['ping_status']) ? 1 : 0; $resp = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $postdata['post_author'], 'postid' => $postdata['ID'], 'description' => $post['main'], 'title' => $postdata['post_title'], 'link' => $link, 'permaLink' => $link, // commented out because no other tool seems to use this // 'content' => $entry['post_content'], 'categories' => $categories, 'mt_excerpt' => $postdata['post_excerpt'], 'mt_text_more' => $post['extended'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'wp_slug' => $postdata['post_name'], 'wp_password' => $postdata['post_password'], 'wp_author_id' => $author->ID, 'wp_author_display_name' => $author->display_name ); return $resp; } else { return new IXR_Error(404, __('Sorry, no such post.')); } } /* metaweblog.getRecentPosts ...returns recent posts */ function mw_getRecentPosts($args) { $this->escape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $num_posts = (int) $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $posts_list = wp_get_recent_posts($num_posts); if (!$posts_list) { $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); return $this->error; } foreach ($posts_list as $entry) { $post_date = mysql2date('Ymd\TH:i:s\Z', $entry['post_date_gmt']); $categories = array(); $catids = wp_get_post_categories($entry['ID']); foreach($catids as $catid) { $categories[] = get_cat_name($catid); } $post = get_extended($entry['post_content']); $link = post_permalink($entry['ID']); // Get the post author info. $author = get_userdata($entry['post_author']); $allow_comments = ('open' == $entry['comment_status']) ? 1 : 0; $allow_pings = ('open' == $entry['ping_status']) ? 1 : 0; $struct[] = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $entry['post_author'], 'postid' => $entry['ID'], 'description' => $post['main'], 'title' => $entry['post_title'], 'link' => $link, 'permaLink' => $link, // commented out because no other tool seems to use this // 'content' => $entry['post_content'], 'categories' => $categories, 'mt_excerpt' => $entry['post_excerpt'], 'mt_text_more' => $post['extended'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'wp_slug' => $entry['post_name'], 'wp_password' => $entry['post_password'], 'wp_author_id' => $author->ID, 'wp_author_display_name' => $author->display_name ); } $recent_posts = array(); for ($j=0; $jescape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $categories_struct = array(); // FIXME: can we avoid using direct SQL there? if ($cats = $wpdb->get_results("SELECT cat_ID,cat_name,category_parent FROM $wpdb->categories", ARRAY_A)) { foreach ($cats as $cat) { $struct['categoryId'] = $cat['cat_ID']; $struct['parentId'] = $cat['category_parent']; $struct['description'] = $cat['cat_name']; $struct['categoryName'] = $cat['cat_name']; $struct['htmlUrl'] = wp_specialchars(get_category_link($cat['cat_ID'])); $struct['rssUrl'] = wp_specialchars(get_category_rss_link(false, $cat['cat_ID'], $cat['cat_name'])); $categories_struct[] = $struct; } } return $categories_struct; } /* metaweblog.newMediaObject uploads a file, following your settings */ function mw_newMediaObject($args) { // adapted from a patch by Johann Richard // http://mycvs.org/archives/2004/06/30/file-upload-to-wordpress-in-ecto/ global $wpdb; $blog_ID = (int) $args[0]; $user_login = $wpdb->escape($args[1]); $user_pass = $wpdb->escape($args[2]); $data = $args[3]; $name = sanitize_file_name( $data['name'] ); $type = $data['type']; $bits = $data['bits']; logIO('O', '(MW) Received '.strlen($bits).' bytes'); if ( !$this->login_pass_ok($user_login, $user_pass) ) return $this->error; set_current_user(0, $user_login); if ( !current_user_can('upload_files') ) { logIO('O', '(MW) User does not have upload_files capability'); $this->error = new IXR_Error(401, __('You are not allowed to upload files to this site.')); return $this->error; } if ( $upload_err = apply_filters( "pre_upload_error", false ) ) return new IXR_Error(500, $upload_err); if(!empty($data["overwrite"]) && ($data["overwrite"] == true)) { // Get postmeta info on the object. $old_file = $wpdb->get_row(" SELECT ID FROM {$wpdb->posts} WHERE post_title = '{$name}' AND post_type = 'attachment' "); // Delete previous file. wp_delete_attachment($old_file->ID); // Make sure the new name is different by pre-pending the // previous post id. $filename = preg_replace("/^wpid\d+-/", "", $name); $name = "wpid{$old_file->ID}-{$filename}"; } $upload = wp_upload_bits($name, $type, $bits, $overwrite); if ( ! empty($upload['error']) ) { $errorString = 'Could not write file ' . $name . ' (' . $upload['error'] . ')'; logIO('O', '(MW) ' . $errorString); return new IXR_Error(500, $errorString); } // Construct the attachment array // attach to post_id -1 $post_id = -1; $attachment = array( 'post_title' => $name, 'post_content' => '', 'post_type' => 'attachment', 'post_parent' => $post_id, 'post_mime_type' => $type, 'guid' => $upload[ 'url' ] ); // Save the data $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id ); wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) ); return apply_filters( 'wp_handle_upload', array( 'file' => $name, 'url' => $upload[ 'url' ], 'type' => $type ) ); } /* MovableType API functions * specs on http://www.movabletype.org/docs/mtmanual_programmatic.html */ /* mt.getRecentPostTitles ...returns recent posts' titles */ function mt_getRecentPostTitles($args) { $this->escape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $num_posts = (int) $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $posts_list = wp_get_recent_posts($num_posts); if (!$posts_list) { $this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.')); return $this->error; } foreach ($posts_list as $entry) { $post_date = mysql2date('Ymd\TH:i:s\Z', $entry['post_date_gmt']); $struct[] = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $entry['post_author'], 'postid' => $entry['ID'], 'title' => $entry['post_title'], ); } $recent_posts = array(); for ($j=0; $jescape($args); $blog_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $categories_struct = array(); // FIXME: can we avoid using direct SQL there? if ($cats = $wpdb->get_results("SELECT cat_ID, cat_name FROM $wpdb->categories", ARRAY_A)) { foreach ($cats as $cat) { $struct['categoryId'] = $cat['cat_ID']; $struct['categoryName'] = $cat['cat_name']; $categories_struct[] = $struct; } } return $categories_struct; } /* mt.getPostCategories ...returns a post's categories */ function mt_getPostCategories($args) { $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } $categories = array(); $catids = wp_get_post_categories(intval($post_ID)); // first listed category will be the primary category $isPrimary = true; foreach($catids as $catid) { $categories[] = array( 'categoryName' => get_cat_name($catid), 'categoryId' => (string) $catid, 'isPrimary' => $isPrimary ); $isPrimary = false; } return $categories; } /* mt.setPostCategories ...sets a post's categories */ function mt_setPostCategories($args) { $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; $categories = $args[3]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you can not edit this post.')); foreach($categories as $cat) { $catids[] = $cat['categoryId']; } wp_set_post_categories($post_ID, $catids); return true; } /* mt.supportedMethods ...returns an array of methods supported by this server */ function mt_supportedMethods($args) { $supported_methods = array(); foreach($this->methods as $key=>$value) { $supported_methods[] = $key; } return $supported_methods; } /* mt.supportedTextFilters ...returns an empty array because we don't support per-post text filters yet */ function mt_supportedTextFilters($args) { return apply_filters('xmlrpc_text_filters', array()); } /* mt.getTrackbackPings ...returns trackbacks sent to a given post */ function mt_getTrackbackPings($args) { global $wpdb; $post_ID = intval($args); $actual_post = wp_get_single_post($post_ID, ARRAY_A); if (!$actual_post) { return new IXR_Error(404, __('Sorry, no such post.')); } $comments = $wpdb->get_results("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = " . $post_ID ); if (!$comments) { return array(); } $trackback_pings = array(); foreach($comments as $comment) { if ( 'trackback' == $comment->comment_type ) { $content = $comment->comment_content; $title = substr($content, 8, (strpos($content, '
    ') - 8)); $trackback_pings[] = array( 'pingTitle' => $title, 'pingURL' => $comment->comment_author_url, 'pingIP' => $comment->comment_author_IP ); } } return $trackback_pings; } /* mt.publishPost ...sets a post's publish status to 'publish' */ function mt_publishPost($args) { $this->escape($args); $post_ID = (int) $args[0]; $user_login = $args[1]; $user_pass = $args[2]; if (!$this->login_pass_ok($user_login, $user_pass)) { return $this->error; } set_current_user(0, $user_login); if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you can not edit this post.')); $postdata = wp_get_single_post($post_ID,ARRAY_A); $postdata['post_status'] = 'publish'; // retain old cats $cats = wp_get_post_categories($post_ID); $postdata['post_category'] = $cats; $this->escape($postdata); $result = wp_update_post($postdata); return $result; } /* PingBack functions * specs on www.hixie.ch/specs/pingback/pingback */ /* pingback.ping gets a pingback and registers it */ function pingback_ping($args) { global $wpdb, $wp_version; $this->escape($args); $pagelinkedfrom = $args[0]; $pagelinkedto = $args[1]; $title = ''; $pagelinkedfrom = str_replace('&', '&', $pagelinkedfrom); $pagelinkedto = preg_replace('#&([^amp\;])#is', '&$1', $pagelinkedto); $error_code = -1; // Check if the page linked to is in our site $pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_option('home'))); if( !$pos1 ) return new IXR_Error(0, __('Is there no link to us?')); // let's find which post is linked to // FIXME: does url_to_postid() cover all these cases already? // if so, then let's use it and drop the old code. $urltest = parse_url($pagelinkedto); if ($post_ID = url_to_postid($pagelinkedto)) { $way = 'url_to_postid()'; } elseif (preg_match('#p/[0-9]{1,}#', $urltest['path'], $match)) { // the path defines the post_ID (archives/p/XXXX) $blah = explode('/', $match[0]); $post_ID = (int) $blah[1]; $way = 'from the path'; } elseif (preg_match('#p=[0-9]{1,}#', $urltest['query'], $match)) { // the querystring defines the post_ID (?p=XXXX) $blah = explode('=', $match[0]); $post_ID = (int) $blah[1]; $way = 'from the querystring'; } elseif (isset($urltest['fragment'])) { // an #anchor is there, it's either... if (intval($urltest['fragment'])) { // ...an integer #XXXX (simpliest case) $post_ID = (int) $urltest['fragment']; $way = 'from the fragment (numeric)'; } elseif (preg_match('/post-[0-9]+/',$urltest['fragment'])) { // ...a post id in the form 'post-###' $post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']); $way = 'from the fragment (post-###)'; } elseif (is_string($urltest['fragment'])) { // ...or a string #title, a little more complicated $title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']); $sql = "SELECT ID FROM $wpdb->posts WHERE post_title RLIKE '$title'"; if (! ($post_ID = $wpdb->get_var($sql)) ) { // returning unknown error '0' is better than die()ing return new IXR_Error(0, ''); } $way = 'from the fragment (title)'; } } else { // TODO: Attempt to extract a post ID from the given URL return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); } $post_ID = (int) $post_ID; logIO("O","(PB) URL='$pagelinkedto' ID='$post_ID' Found='$way'"); $post = get_post($post_ID); if ( !$post ) // Post_ID not found return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); if ( $post_ID == url_to_postid($pagelinkedfrom) ) return new IXR_Error(0, __('The source URL and the target URL cannot both point to the same resource.')); // Check if pings are on if ( 'closed' == $post->ping_status ) return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); // Let's check that the remote site didn't already pingback this entry $result = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = " . $post_ID . " AND comment_author_url = '$pagelinkedfrom'"); if ( $wpdb->num_rows ) // We already have a Pingback from this URL return new IXR_Error(48, __('The pingback has already been registered.')); // very stupid, but gives time to the 'from' server to publish ! sleep(1); // Let's check the remote site $linea = wp_remote_fopen( $pagelinkedfrom ); if ( !$linea ) return new IXR_Error(16, __('The source URL does not exist.')); // Work around bug in strip_tags(): $linea = str_replace(']*>/", "\n\n", $linea ); preg_match('|([^<]*?)|is', $linea, $matchtitle); $title = $matchtitle[1]; if ( empty( $title ) ) return new IXR_Error(32, __('We cannot find a title on that page.')); $linea = strip_tags( $linea, '' ); // just keep the tag we need $p = explode( "\n\n", $linea ); $preg_target = preg_quote($pagelinkedto); foreach ( $p as $para ) { if ( strpos($para, $pagelinkedto) != false ) { // it exists, but is it a link? preg_match("|]+?".$preg_target."[^>]*>([^>]+?)|", $para, $context); // If the URL isn't in a link context, keep looking if ( empty($context) ) continue; // We're going to use this fake tag to mark the context in a bit // the marker is needed in case the link text appears more than once in the paragraph $excerpt = preg_replace('|\|', '', $para); // prevent really long link text if ( strlen($context[1]) > 100 ) $context[1] = substr($context[1], 0, 100) . '...'; $marker = ''.$context[1].''; // set up our marker $excerpt= str_replace($context[0], $marker, $excerpt); // swap out the link for our marker $excerpt = strip_tags($excerpt, ''); // strip all tags but our context marker $excerpt = trim($excerpt); $preg_marker = preg_quote($marker); $excerpt = preg_replace("|.*?\s(.{0,100}$preg_marker.{0,100})\s.*|s", '$1', $excerpt); $excerpt = strip_tags($excerpt); // YES, again, to remove the marker wrapper break; } } if ( empty($context) ) // Link to target not found return new IXR_Error(17, __('The source URL does not contain a link to the target URL, and so cannot be used as a source.')); $pagelinkedfrom = preg_replace('#&([^amp\;])#is', '&$1', $pagelinkedfrom); $context = '[...] ' . wp_specialchars( $excerpt ) . ' [...]'; $original_pagelinkedfrom = $pagelinkedfrom; $pagelinkedfrom = $wpdb->escape( $pagelinkedfrom ); $original_title = $title; $comment_post_ID = (int) $post_ID; $comment_author = $title; $this->escape($comment_author); $comment_author_url = $pagelinkedfrom; $comment_content = $context; $this->escape($comment_content); $comment_type = 'pingback'; $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_content', 'comment_type'); $comment_ID = wp_new_comment($commentdata); do_action('pingback_post', $comment_ID); return "Pingback from $pagelinkedfrom to $pagelinkedto registered. Keep the web talking! :-)"; } /* pingback.extensions.getPingbacks returns an array of URLs that pingbacked the given URL specs on http://www.aquarionics.com/misc/archives/blogite/0198.html */ function pingback_extensions_getPingbacks($args) { global $wpdb; $this->escape($args); $url = $args; $post_ID = url_to_postid($url); if (!$post_ID) { // We aren't sure that the resource is available and/or pingback enabled return new IXR_Error(33, 'The specified target URL cannot be used as a target. It either doesn\'t exist, or it is not a pingback-enabled resource.'); } $actual_post = wp_get_single_post($post_ID, ARRAY_A); if (!$actual_post) { // No such post = resource not found return new IXR_Error(32, __('The specified target URL does not exist.')); } $comments = $wpdb->get_results("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = " . $post_ID); if (!$comments) { return array(); } $pingbacks = array(); foreach($comments as $comment) { if ( 'pingback' == $comment->comment_type ) $pingbacks[] = $comment->comment_author_url; } return $pingbacks; } } $wp_xmlrpc_server = new wp_xmlrpc_server(); ?> MD5 2283cb974e850b8e1ea0a763d65ea948

    admins entries.'); ?>

    italics. For each of these names, you can either pick an author in your WordPress installation from the menu, or enter a name for the author in the textbox.'); ?>

    get_mt_authors(); echo '
      '; echo '
      '; wp_nonce_field('import-mt'); $j = -1; foreach ($authors as $author) { ++ $j; echo '
    1. '.__('Current author:').' '.$author.'
      '.sprintf(__('Create user %1$s or map to existing'), '
      '); $this->users_form($j); echo '
    2. '; } echo ''.'
      '; echo '
      '; echo '