Mercurial > hg > rr-repo
changeset 3:b28be78d8160
alpha1.0 version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:33:07 +0100 |
parents | b74b41bb73f0 |
children | ce11bbd8f642 d72257b2ddc2 |
files | .DS_Store sites/all/modules/libraries/CHANGELOG.txt sites/all/modules/libraries/LICENSE.txt sites/all/modules/libraries/README.txt sites/all/modules/libraries/libraries.api.php sites/all/modules/libraries/libraries.drush.inc sites/all/modules/libraries/libraries.info sites/all/modules/libraries/libraries.install sites/all/modules/libraries/libraries.module sites/all/modules/libraries/tests/example/README.txt sites/all/modules/libraries/tests/example/example_1.css sites/all/modules/libraries/tests/example/example_1.js sites/all/modules/libraries/tests/example/example_1.php sites/all/modules/libraries/tests/example/example_2.css sites/all/modules/libraries/tests/example/example_2.js sites/all/modules/libraries/tests/example/example_2.php sites/all/modules/libraries/tests/example/example_3.css sites/all/modules/libraries/tests/example/example_3.js sites/all/modules/libraries/tests/example/example_3.php sites/all/modules/libraries/tests/example/example_4.css sites/all/modules/libraries/tests/example/example_4.js sites/all/modules/libraries/tests/example/example_4.php sites/all/modules/libraries/tests/example/example_info_file.libraries.info sites/all/modules/libraries/tests/libraries.test sites/all/modules/libraries/tests/libraries_test.css sites/all/modules/libraries/tests/libraries_test.inc sites/all/modules/libraries/tests/libraries_test.info sites/all/modules/libraries/tests/libraries_test.js sites/all/modules/libraries/tests/libraries_test.module sites/all/modules/recaptcha/README.txt sites/all/modules/recaptcha/recaptcha.admin.inc sites/all/modules/recaptcha/recaptcha.info sites/all/modules/recaptcha/recaptcha.js sites/all/modules/recaptcha/recaptcha.module sites/all/modules/recaptcha/recaptcha_mailhide.info |
diffstat | 35 files changed, 299 insertions(+), 3094 deletions(-) [+] |
line wrap: on
line diff
--- a/sites/all/modules/libraries/CHANGELOG.txt Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/libraries/CHANGELOG.txt Thu Sep 19 10:33:07 2013 +0100 @@ -1,66 +1,4 @@ - -Libraries 7.x-2.1, 2013-03-09 ------------------------------ -#1937446 by Pol, tstoeckler: Add a 'pre-dependencies-load' callback group. -#1775668 by tstoeckler: Fix bogus assertion message in assertLibraryFiles(). -#1773640 by tstoeckler: Use drupal_get_path() to find the profile directory. -#1565426 by tstoeckler: Invoke hook_libraries_info() in enabled themes. - -Libraries 7.x-2.0, 2012-07-29 ------------------------------ -#1606018 by chemical: Tests fail if the module is downloaded from Drupal.org. -#1386250 by tstoeckler: Clarify module and library installation in README.txt. -#1578618 by iamEAP: Fixed Fatal cache flush failure on major version upgrades. -#1449346 by tstoeckler, sun: Clean-up libraries.test - - -Libraries 7.x-2.0-alpha2, 2011-12-15 ------------------------------------- -#1299076 by tstoeckler: Improve testing of JS, CSS, and PHP files. -#1347214 by rfay: Improve update function 7200. -#1323530 by tstoeckler: Document libraries_get_version() pattern matching. -#1325524 by sun, Rob Loach, tstoeckler: Statically cache libraries_detect(). -#1321372 by Rob Loach: Provide a 'post-load' callback group. -#1205854 by tstoeckler, sun: Test library caching. - - -Libraries 7.x-2.0-alpha1, 2011-10-01 ------------------------------------- -#1268342 by tstoeckler: Clean up drush libraries-list command. -#962214 by tstoeckler, sun: Add support for library dependencies. -#1224838 by sun, mjpa: Fix library path not being prepended to JS/CSS files. -#1023258 by tstoeckler: Make 'files' consistently keyed by filename. -#958162 by sun, tstoeckler: Add pre-detect callback group. -#958162 by sun, tstoeckler: Make tests debuggable and provide libraries_info_defaults(). -#961476 by tstoeckler: Changed libraries_get_path() to return FALSE by default. -#958162 by tstoeckler, sun, good_man: Allow to apply callbacks to libraries. -#1125904 by tstoeckler, boombatower: Fix drush libraries-list. -#1050076 by tstoeckler: Re-utilize libraries_detect() and remove libraries_detect_library(). -#466090 by tstoeckler: Add update function. -#466090 by tstoeckler: Allow cache to be flushed. -#466090 by tstoeckler, sun: Cache library information. -#1064008 by tstoeckler, bfroehle: Fix outdated API examples in libraries.api.php. -#1028744 by tstoeckler: Code clean-up. -#1023322 by tstoeckler, sun: Fixed libraries shouldn't be loaded multiple times. -#1024080 by hswong3i, tstoeckler: Fixed installation profile retrieval. -#995988 by good_man: Wrong default install profile. -#975498 by Gábor Hojtsy: Update JS/CSS-loading to new drupal_add_js/css() API. -#958162 by tsteoeckler, sun: Consistent variable naming. -#924130 by aaronbauman: Fixed libraries_get_path() should use drupal_static(). -#958162 by tstoeckler, sun: Code clean-up, tests revamp, more robust loading. -#919632 by tstoeckler, sun: Allow library information to be stored in info files. -by sun: Fixed testbot breaks upon directory name/info file name mismatch. -#864376 by tstoeckler, sun: Code-cleanup, allow hard-coded 'version'. -#939174 by sun, tstoeckler: Rename example.info to libraries_example.info. -by sun: Fixed testbot breaks upon .info file without .module file. -#542940 by tstoeckler, sun: Add libraries-list command. -#919632 by tstoeckler: Add example library info file for testing purposes. -#719896 by tstoeckler, sun: Documentation clean-up and tests improvement. -#542940 by sun: Added initial Drush integration file. -#719896 by tstoeckler, sun: Improved library detection and library loading. -#855050 by Gábor Hojtsy: Avoid call-time pass by reference in libraries_detect(). -#719896 by tstoeckler, sun: Added starting point for hook_libraries_info(). - +// $Id: CHANGELOG.txt,v 1.25.2.1 2011/01/27 02:31:41 sun Exp $ Libraries 7.x-1.x, xxxx-xx-xx -----------------------------
--- a/sites/all/modules/libraries/LICENSE.txt Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/libraries/LICENSE.txt Thu Sep 19 10:33:07 2013 +0100 @@ -1,339 +1,274 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 +GNU GENERAL PUBLIC LICENSE - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + Version 2, June 1991 - Preamble +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. - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. + Preamble - 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. +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. - 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. +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. - 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. +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. - 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. +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. - 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. +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. - 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. +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. - The precise terms and conditions for copying, distribution and -modification follow. +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. - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +The precise terms and conditions for copying, distribution and modification +follow. - 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". + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND + MODIFICATION -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. +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". - 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. +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. -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. +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. - 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: +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. - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. +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: - 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. +a) You must cause the modified files to carry prominent notices stating that +you changed the files and the date of any change. - 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.) +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. -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. +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.) -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. +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. +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: +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, +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, +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.) +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. +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. +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. +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. +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. +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 +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. +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. +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. +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. +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. +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. +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. +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 + 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. +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. +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR +AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR +ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE +LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, +SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE +PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR DATA BEING RENDERED INACCURATE OR LOSSES +SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE +PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN +IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF +THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. + END OF TERMS AND CONDITIONS
--- a/sites/all/modules/libraries/README.txt Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/libraries/README.txt Thu Sep 19 10:33:07 2013 +0100 @@ -1,3 +1,4 @@ +/* $Id: README.txt,v 1.2 2011/01/27 02:22:04 sun Exp $ */ -- SUMMARY -- @@ -17,9 +18,6 @@ -- INSTALLATION -- * Install as usual, see http://drupal.org/node/70151 for further information. - Note that installing external libraries is separate from installing this - module and should happen in the sites/all/libraries directory. See - http://drupal.org/node/1440066 for more information. -- CONTACT --
--- a/sites/all/modules/libraries/libraries.api.php Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,450 +0,0 @@ -<?php - -/** - * @file - * Documents API functions for Libraries module. - */ - -/** - * Return information about external libraries. - * - * @return - * An associative array whose keys are internal names of libraries and whose - * values are describing each library. Each key is the directory name below - * the 'libraries' directory, in which the library may be found. Each value is - * an associative array containing: - * - name: The official, human-readable name of the library. - * - vendor url: The URL of the homepage of the library. - * - download url: The URL of a web page on which the library can be obtained. - * - path: (optional) A relative path from the directory of the library to the - * actual library. Only required if the extracted download package contains - * the actual library files in a sub-directory. - * - library path: (optional) The absolute path to the library directory. This - * should not be declared normally, as it is automatically detected, to - * allow for multiple possible library locations. A valid use-case is an - * external library, in which case the full URL to the library should be - * specified here. - * - version: (optional) The version of the library. This should not be - * declared normally, as it is automatically detected (see 'version - * callback' below) to allow for version changes of libraries without code - * changes of implementing modules and to support different versions of a - * library simultaneously (though only one version can be installed per - * site). A valid use-case is an external library whose version cannot be - * determined programatically. - * - version callback: (optional) The name of a function that detects and - * returns the full version string of the library. The first argument is - * always $library, an array containing all library information as described - * here. There are two ways to declare the version callback's additional - * arguments, either as a single $options parameter or as multiple - * parameters, which correspond to the two ways to specify the argument - * values (see 'version arguments'). Defaults to libraries_get_version(). - * - version arguments: A list of arguments to pass to the version callback. - * Version arguments can be declared either as an associative array whose - * keys are the argument names or as an indexed array without specifying - * keys. If declared as an associative array, the arguments get passed to - * the version callback as a single $options parameter whose keys are the - * argument names (i.e. $options is identical to the specified array). If - * declared as an indexed array, the array values get passed to the version - * callback as seperate arguments in the order they were declared. The - * default version callback libraries_get_version() expects a single, - * associative array with named keys: - * - file: The filename to parse for the version, relative to the library - * path. For example: 'docs/changelog.txt'. - * - pattern: A string containing a regular expression (PCRE) to match the - * library version. For example: '@version\s+([0-9a-zA-Z\.-]+)@'. Note - * that the returned version is not the match of the entire pattern (i.e. - * '@version 1.2.3' in the above example) but the match of the first - * sub-pattern (i.e. '1.2.3' in the above example). - * - lines: (optional) The maximum number of lines to search the pattern in. - * Defaults to 20. - * - cols: (optional) The maximum number of characters per line to take into - * account. Defaults to 200. In case of minified or compressed files, this - * prevents reading the entire file into memory. - * - files: An associative array of library files to load. Supported keys are: - * - js: A list of JavaScript files to load, using the same syntax as Drupal - * core's hook_library(). - * - css: A list of CSS files to load, using the same syntax as Drupal - * core's hook_library(). - * - php: A list of PHP files to load. - * - dependencies: An array of libraries this library depends on. Similar to - * declaring module dependencies, the dependency declaration may contain - * information on the supported version. Examples of supported declarations: - * @code - * $libraries['dependencies'] = array( - * // Load the 'example' library, regardless of the version available: - * 'example', - * // Only load the 'example' library, if version 1.2 is available: - * 'example (1.2)', - * // Only load a version later than 1.3-beta2 of the 'example' library: - * 'example (>1.3-beta2)' - * // Only load a version equal to or later than 1.3-beta3: - * 'example (>=1.3-beta3)', - * // Only load a version earlier than 1.5: - * 'example (<1.5)', - * // Only load a version equal to or earlier than 1.4: - * 'example (<=1.4)', - * // Combinations of the above are allowed as well: - * 'example (>=1.3-beta2, <1.5)', - * ); - * @endcode - * - variants: (optional) An associative array of available library variants. - * For example, the top-level 'files' property may refer to a default - * variant that is compressed. If the library also ships with a minified and - * uncompressed/source variant, those can be defined here. Each key should - * describe the variant type, e.g. 'minified' or 'source'. Each value is an - * associative array of top-level properties that are entirely overridden by - * the variant, most often just 'files'. Additionally, each variant can - * contain following properties: - * - variant callback: (optional) The name of a function that detects the - * variant and returns TRUE or FALSE, depending on whether the variant is - * available or not. The first argument is always $library, an array - * containing all library information as described here. The second - * argument is always a string containing the variant name. There are two - * ways to declare the variant callback's additinal arguments, either as a - * single $options parameter or as multiple parameters, which correspond - * to the two ways to specify the argument values (see 'variant - * arguments'). If ommitted, the variant is expected to always be - * available. - * - variant arguments: A list of arguments to pass to the variant callback. - * Variant arguments can be declared either as an associative array whose - * keys are the argument names or as an indexed array without specifying - * keys. If declared as an associative array, the arguments get passed to - * the variant callback as a single $options parameter whose keys are the - * argument names (i.e. $options is identical to the specified array). If - * declared as an indexed array, the array values get passed to the - * variant callback as seperate arguments in the order they were declared. - * Variants can be version-specific (see 'versions'). - * - versions: (optional) An associative array of supported library versions. - * Naturally, libraries evolve over time and so do their APIs. In case a - * library changes between versions, different 'files' may need to be - * loaded, different 'variants' may become available, or Drupal modules need - * to load different integration files adapted to the new version. Each key - * is a version *string* (PHP does not support floats as keys). Each value - * is an associative array of top-level properties that are entirely - * overridden by the version. - * - integration files: (optional) An associative array whose keys are module - * names and whose values are sets of files to load for the module, using - * the same notion as the top-level 'files' property. Each specified file - * should contain the path to the file relative to the module it belongs to. - * - callbacks: An associative array whose keys are callback groups and whose - * values are arrays of callbacks to apply to the library in that group. - * Each callback receives the following arguments: - * - $library: An array of library information belonging to the top-level - * library, a specific version, a specific variant or a specific variant - * of a specific version. Because library information such as the 'files' - * property (see above) can be declared in all these different locations - * of the library array, but a callback may have to act on all these - * different parts of the library, it is called recursively for each - * library with a certain part of the libraries array passed as $library - * each time. - * - $version: If the $library array belongs to a certain version (see - * above), a string containing the version. This argument may be empty, so - * NULL should be specified as the default value. - * - $variant: If the $library array belongs to a certain variant (see - * above), a string containing the variant name. This argument may be - * empty, so NULL should be specified as the default value. - * Valid callback groups are: - * - info: Callbacks registered in this group are applied after the library - * information has been retrieved via hook_libraries_info() or info files. - * - pre-detect: Callbacks registered in this group are applied after the - * library path has been determined and before the version callback is - * invoked. At this point the following additional information is available: - * - $library['library path']: The path on the file system to the library. - * - post-detect: Callbacks registered in this group are applied after the - * library has been successfully detected. At this point the library - * contains the version-specific information, if specified, and following - * additional information is available: - * - $library['installed']: A boolean indicating whether the library is - * installed or not. - * - $library['version']: If it could be detected, a string containing the - * version of the library. - * - $library['variants'][$variant]['installed']: For each specified - * variant, a boolean indicating whether the variant is installed or - * not. - * Note that in this group the 'versions' property is no longer available. - * - pre-dependencies-load: Callbacks registered in this group are applied - * directly before the library's dependencies are loaded. At this point - * the library contains variant-specific information, if specified. Note - * that in this group the 'variants' property is no longer available. - * - pre-load: Callbacks registered in this group are applied directly after - * the library's dependencies are loaded and before the library itself is - * loaded. - * - post-load: Callbacks registered in this group are applied directly - * after this library is loaded. At this point, the library contains a - * 'loaded' key, which contains the number of files that were loaded. - * Additional top-level properties can be registered as needed. - * - * @see hook_library() - */ -function hook_libraries_info() { - // The following is a full explanation of all properties. See below for more - // concrete example implementations. - - // This array key lets Libraries API search for 'sites/all/libraries/example' - // directory, which should contain the entire, original extracted library. - $libraries['example'] = array( - // Only used in administrative UI of Libraries API. - 'name' => 'Example library', - 'vendor url' => 'http://example.com', - 'download url' => 'http://example.com/download', - // Optional: If, after extraction, the actual library files are contained in - // 'sites/all/libraries/example/lib', specify the relative path here. - 'path' => 'lib', - // Optional: Define a custom version detection callback, if required. - 'version callback' => 'mymodule_get_version', - // Specify arguments for the version callback. By default, - // libraries_get_version() takes a named argument array: - 'version arguments' => array( - 'file' => 'docs/CHANGELOG.txt', - 'pattern' => '@version\s+([0-9a-zA-Z\.-]+)@', - 'lines' => 5, - 'cols' => 20, - ), - // Default list of files of the library to load. Important: Only specify - // third-party files belonging to the library here, not integration files of - // your module. - 'files' => array( - // 'js' and 'css' follow the syntax of hook_library(), but file paths are - // relative to the library path. - 'js' => array( - 'exlib.js', - 'gadgets/foo.js', - ), - 'css' => array( - 'lib_style.css', - 'skin/example.css', - ), - // For PHP libraries, specify include files here, still relative to the - // library path. - 'php' => array( - 'exlib.php', - 'exlib.inc', - ), - ), - // Optional: Specify alternative variants of the library, if available. - 'variants' => array( - // All properties defined for 'minified' override top-level properties. - 'minified' => array( - 'files' => array( - 'js' => array( - 'exlib.min.js', - 'gadgets/foo.min.js', - ), - 'css' => array( - 'lib_style.css', - 'skin/example.css', - ), - ), - 'variant callback' => 'mymodule_check_variant', - 'variant arguments' => array( - 'variant' => 'minified', - ), - ), - ), - // Optional, but usually required: Override top-level properties for later - // versions of the library. The properties of the minimum version that is - // matched override the top-level properties. Note: - // - When registering 'versions', it usually does not make sense to register - // 'files', 'variants', and 'integration files' on the top-level, as most - // of those likely need to be different per version and there are no - // defaults. - // - The array keys have to be strings, as PHP does not support floats for - // array keys. - 'versions' => array( - '2' => array( - 'files' => array( - 'js' => array('exlib.js'), - 'css' => array('exlib_style.css'), - ), - ), - '3.0' => array( - 'files' => array( - 'js' => array('exlib.js'), - 'css' => array('lib_style.css'), - ), - ), - '3.2' => array( - 'files' => array( - 'js' => array( - 'exlib.js', - 'gadgets/foo.js', - ), - 'css' => array( - 'lib_style.css', - 'skin/example.css', - ), - ), - ), - ), - // Optional: Register files to auto-load for your module. All files must be - // keyed by module, and follow the syntax of the 'files' property. - 'integration files' => array( - 'mymodule' => array( - 'js' => array('ex_lib.inc'), - ), - ), - // Optionally register callbacks to apply to the library during different - // stages of its lifetime ('callback groups'). - 'callbacks' => array( - // Used to alter the info associated with the library. - 'info' => array( - 'mymodule_example_libraries_info_callback', - ), - // Called before detecting the given library. - 'pre-detect' => array( - 'mymodule_example_libraries_predetect_callback', - ), - // Called after detecting the library. - 'post-detect' => array( - 'mymodule_example_libraries_postdetect_callback', - ), - // Called before the library's dependencies are loaded. - 'pre-dependencie-load' => array( - 'mymodule_example_libraries_pre_dependencies_load_callback', - ), - // Called before the library is loaded. - 'pre-load' => array( - 'mymodule_example_libraries_preload_callback', - ), - // Called after the library is loaded. - 'post-load' => array( - 'mymodule_example_libraries_postload_callback', - ), - ), - ); - - // A very simple library. No changing APIs (hence, no versions), no variants. - // Expected to be extracted into 'sites/all/libraries/simple'. - $libraries['simple'] = array( - 'name' => 'Simple library', - 'vendor url' => 'http://example.com/simple', - 'download url' => 'http://example.com/simple', - 'version arguments' => array( - 'file' => 'readme.txt', - // Best practice: Document the actual version strings for later reference. - // 1.x: Version 1.0 - 'pattern' => '/Version (\d+)/', - 'lines' => 5, - ), - 'files' => array( - 'js' => array('simple.js'), - ), - ); - - // A library that (naturally) evolves over time with API changes. - $libraries['tinymce'] = array( - 'name' => 'TinyMCE', - 'vendor url' => 'http://tinymce.moxiecode.com', - 'download url' => 'http://tinymce.moxiecode.com/download.php', - 'path' => 'jscripts/tiny_mce', - // The regular expression catches two parts (the major and the minor - // version), which libraries_get_version() doesn't allow. - 'version callback' => 'tinymce_get_version', - 'version arguments' => array( - // It can be easier to parse the first characters of a minified file - // instead of doing a multi-line pattern matching in a source file. See - // 'lines' and 'cols' below. - 'file' => 'jscripts/tiny_mce/tiny_mce.js', - // Best practice: Document the actual version strings for later reference. - // 2.x: this.majorVersion="2";this.minorVersion="1.3" - // 3.x: majorVersion:'3',minorVersion:'2.0.1' - 'pattern' => '@majorVersion[=:]["\'](\d).+?minorVersion[=:]["\']([\d\.]+)@', - 'lines' => 1, - 'cols' => 100, - ), - 'versions' => array( - '2.1' => array( - 'files' => array( - 'js' => array('tiny_mce.js'), - ), - 'variants' => array( - 'source' => array( - 'files' => array( - 'js' => array('tiny_mce_src.js'), - ), - ), - ), - 'integration files' => array( - 'wysiwyg' => array( - 'js' => array('editors/js/tinymce-2.js'), - 'css' => array('editors/js/tinymce-2.css'), - ), - ), - ), - // Definition used if 3.1 or above is detected. - '3.1' => array( - // Does not support JS aggregation. - 'files' => array( - 'js' => array( - 'tiny_mce.js' => array('preprocess' => FALSE), - ), - ), - 'variants' => array( - // New variant leveraging jQuery. Not stable yet; therefore not the - // default variant. - 'jquery' => array( - 'files' => array( - 'js' => array( - 'tiny_mce_jquery.js' => array('preprocess' => FALSE), - ), - ), - ), - 'source' => array( - 'files' => array( - 'js' => array( - 'tiny_mce_src.js' => array('preprocess' => FALSE), - ), - ), - ), - ), - 'integration files' => array( - 'wysiwyg' => array( - 'js' => array('editors/js/tinymce-3.js'), - 'css' => array('editors/js/tinymce-3.css'), - ), - ), - ), - ), - ); - return $libraries; -} - -/** - * Alter the library information before detection and caching takes place. - * - * The library definitions are passed by reference. A common use-case is adding - * a module's integration files to the library array, so that the files are - * loaded whenever the library is. As noted above, it is important to declare - * integration files inside of an array, whose key is the module name. - * - * @see hook_libraries_info() - */ -function hook_libraries_info_alter(&$libraries) { - $files = array( - 'php' => array('example_module.php_spellchecker.inc'), - ); - $libraries['php_spellchecker']['integration files']['example_module'] = $files; -} - -/** - * Specify paths to look for library info files. - * - * Libraries API looks in the following directories for library info files by - * default: - * - libraries - * - profiles/$profile/libraries - * - sites/all/libraries - * - sites/$site/libraries - * This hook allows you to specify additional locations to look for library info - * files. This should only be used for modules that declare many libraries. - * Modules that only implement a few libraries should implement - * hook_libraries_info(). - * - * @return - * An array of paths. - */ -function hook_libraries_paths() { - // Taken from the Libraries test module, which needs to specify the path to - // the test library. - return array(drupal_get_path('module', 'libraries_test') . '/example'); -}
--- a/sites/all/modules/libraries/libraries.drush.inc Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -<?php - -/** - * @file - * Drush integration for Libraries API. - */ - -/** - * Implements hook_drush_command(). - */ -function libraries_drush_command() { - $items['libraries-list'] = array( - 'callback' => 'libraries_drush_list', - 'description' => dt('Lists registered library information.'), - 'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL, - ); - /**$items['libraries-download'] = array( - 'callback' => 'libraries_drush_download', - 'description' => dt('Downloads a registered library into the libraries directory for the active site.'), - 'arguments' => array( - 'name' => dt('The internal name of the registered library.'), - ), - );*/ - return $items; -} - -/** - * Implements hook_drush_help(). - */ -function libraries_drush_help($section) { - switch ($section) { - case 'drush:libraries-list': - return dt('Lists registered library information.'); - - case 'drush:libraries-download': - return dt('Downloads a registered library into the libraries directory for the active site. - -See libraries-list for a list of registered libraries.'); - } -} - -/** - * Lists registered library information. - */ -function libraries_drush_list() { - $libraries = array(); - foreach (libraries_info() as $name => $info) { - $libraries[$name] = libraries_detect($name); - } - ksort($libraries); - - if (empty($libraries)) { - drush_print('There are no registered libraries.'); - } - - else { - $rows = array(); - // drush_print_table() automatically treats the first row as the header, if - // $header is TRUE. - $rows[] = array(dt('Name'), dt('Status'), dt('Version'), dt('Variants'), dt('Dependencies')); - foreach ($libraries as $name => $library) { - $status = ($library['installed'] ? dt('OK') : drupal_ucfirst($library['error'])); - $version = (($library['installed'] && !empty($library['version'])) ? $library['version'] : '-'); - - // Only list installed variants. - $variants = array(); - foreach ($library['variants'] as $variant_name => $variant) { - if ($variant['installed']) { - $variants[] = $variant_name; - } - } - $variants = (empty($variants) ? '-' : implode(', ', $variants)); - - $dependencies = (!empty($library['dependencies']) ? implode(', ', $library['dependencies']) : '-'); - - $rows[] = array($name, $status, $version, $variants, $dependencies); - } - // Make the possible values for the 'Status' column and the 'Version' header - // wrap nicely. - $widths = array(0, 12, 7, 0, 0); - drush_print_table($rows, TRUE, $widths); - } -} - -/** - * Downloads a library. - * - * @param $name - * The internal name of the library to download. - */ -function libraries_drush_download($name) { - return; - - // @todo Looks wonky? - if (!drush_shell_exec('type unzip')) { - return drush_set_error(dt('Missing dependency: unzip. Install it before using this command.')); - } - - // @todo Simply use current drush site. - $args = func_get_args(); - if ($args[0]) { - $path = $args[0]; - } - else { - $path = 'sites/all/libraries'; - } - - // Create the path if it does not exist. - if (!is_dir($path)) { - drush_op('mkdir', $path); - drush_log(dt('Directory @path was created', array('@path' => $path)), 'notice'); - } - - // Set the directory to the download location. - $olddir = getcwd(); - chdir($path); - - $filename = basename(COLORBOX_DOWNLOAD_URI); - $dirname = basename(COLORBOX_DOWNLOAD_URI, '.zip'); - - // Remove any existing Colorbox plugin directory - if (is_dir($dirname)) { - drush_log(dt('A existing Colorbox plugin was overwritten at @path', array('@path' => $path)), 'notice'); - } - // Remove any existing Colorbox plugin zip archive - if (is_file($filename)) { - drush_op('unlink', $filename); - } - - // Download the zip archive - if (!drush_shell_exec('wget '. COLORBOX_DOWNLOAD_URI)) { - drush_shell_exec('curl -O '. COLORBOX_DOWNLOAD_URI); - } - - if (is_file($filename)) { - // Decompress the zip archive - drush_shell_exec('unzip -qq -o '. $filename); - // Remove the zip archive - drush_op('unlink', $filename); - } - - // Set working directory back to the previous working directory. - chdir($olddir); - - if (is_dir($path .'/'. $dirname)) { - drush_log(dt('Colorbox plugin has been downloaded to @path', array('@path' => $path)), 'success'); - } - else { - drush_log(dt('Drush was unable to download the Colorbox plugin to @path', array('@path' => $path)), 'error'); - } -}
--- a/sites/all/modules/libraries/libraries.info Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/libraries/libraries.info Thu Sep 19 10:33:07 2013 +0100 @@ -1,11 +1,11 @@ +; $Id: libraries.info,v 1.4.2.1 2011/01/27 02:31:41 sun Exp $ name = Libraries -description = Allows version-dependent and shared usage of external libraries. +description = Allows version dependent and shared usage of external libraries. core = 7.x -files[] = tests/libraries.test -; Information added by drupal.org packaging script on 2013-03-09 -version = "7.x-2.1" +; Information added by drupal.org packaging script on January 1, 1970 - 00:00 +version = "7.x-1.0" core = "7.x" project = "libraries" -datestamp = "1362848412" +datestamp = "1296096156"
--- a/sites/all/modules/libraries/libraries.install Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -<?php - -/** - * @file - * Install, uninstall, and update functions for libraries.module. - */ - -/** - * Implements hook_schema(). - */ -function libraries_schema() { - $schema['cache_libraries'] = drupal_get_schema_unprocessed('system', 'cache'); - $schema['cache_libraries']['description'] = 'Cache table to store library information.'; - return $schema; -} - -/** - * Create the 'cache_libraries' table. - */ -function libraries_update_7200() { - // Note that previous versions of this function created the table with a - // different table comment. - if (!db_table_exists('cache_libraries')) { - $specs = libraries_schema(); - db_create_table('cache_libraries', $specs['cache_libraries']); - } -}
--- a/sites/all/modules/libraries/libraries.module Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/libraries/libraries.module Thu Sep 19 10:33:07 2013 +0100 @@ -1,4 +1,5 @@ <?php +// $Id: libraries.module,v 1.19.2.1 2011/01/27 02:31:41 sun Exp $ /** * @file @@ -6,18 +7,6 @@ */ /** - * Implements hook_flush_caches(). - */ -function libraries_flush_caches() { - // @todo When upgrading from 1.x, update.php attempts to flush caches before - // the cache table has been created. - // @see http://drupal.org/node/1477932 - if (db_table_exists('cache_libraries')) { - return array('cache_libraries'); - } -} - -/** * Gets the path of a library. * * @param $name @@ -26,7 +15,7 @@ * Whether to prefix the resulting path with base_path(). * * @return - * The path to the specified library or FALSE if the library wasn't found. + * The path to the specified library. * * @ingroup libraries */ @@ -39,7 +28,9 @@ $path = ($base_path ? base_path() : ''); if (!isset($libraries[$name])) { - return FALSE; + // Most often, external libraries can be shared across multiple sites, so + // we return sites/all/libraries as the default path. + $path .= 'sites/all/libraries/' . $name; } else { $path .= $libraries[$name]; @@ -65,27 +56,34 @@ * @ingroup libraries */ function libraries_get_libraries() { + $directory = 'libraries'; $searchdir = array(); - $profile = drupal_get_path('profile', drupal_get_profile()); + $profile = drupal_get_profile(); $config = conf_path(); // Similar to 'modules' and 'themes' directories in the root directory, // certain distributions may want to place libraries into a 'libraries' // directory in Drupal's root directory. - $searchdir[] = 'libraries'; + $searchdir[] = $directory; - // Similar to 'modules' and 'themes' directories inside an installation - // profile, installation profiles may want to place libraries into a - // 'libraries' directory. - $searchdir[] = "$profile/libraries"; + // The 'profiles' directory contains pristine collections of modules and + // themes as organized by a distribution. It is pristine in the same way + // that /modules is pristine for core; users should avoid changing anything + // there in favor of sites/all or sites/<domain> directories. + if (file_exists("profiles/$profile/$directory")) { + $searchdir[] = "profiles/$profile/$directory"; + } - // Always search sites/all/libraries. - $searchdir[] = 'sites/all/libraries'; + // Always search sites/all/*. + $searchdir[] = 'sites/all/' . $directory; // Also search sites/<domain>/*. - $searchdir[] = "$config/libraries"; + if (file_exists("$config/$directory")) { + $searchdir[] = "$config/$directory"; + } // Retrieve list of directories. + // @todo Core: Allow to scan for directories. $directories = array(); $nomask = array('CVS'); foreach ($searchdir as $dir) { @@ -104,662 +102,3 @@ return $directories; } -/** - * Looks for library info files. - * - * This function scans the following directories for info files: - * - libraries - * - profiles/$profilename/libraries - * - sites/all/libraries - * - sites/$sitename/libraries - * - any directories specified via hook_libraries_info_file_paths() - * - * @return - * An array of info files, keyed by library name. The values are the paths of - * the files. - */ -function libraries_scan_info_files() { - $profile = drupal_get_path('profile', drupal_get_profile()); - $config = conf_path(); - - // Build a list of directories. - $directories = module_invoke_all('libraries_info_file_paths'); - $directories[] = 'libraries'; - $directories[] = "$profile/libraries"; - $directories[] = 'sites/all/libraries'; - $directories[] = "$config/libraries"; - - // Scan for info files. - $files = array(); - foreach ($directories as $dir) { - if (file_exists($dir)) { - $files = array_merge($files, file_scan_directory($dir, '@^[a-z0-9._-]+\.libraries\.info$@', array( - 'key' => 'name', - 'recurse' => FALSE, - ))); - } - } - - foreach ($files as $filename => $file) { - $files[basename($filename, '.libraries')] = $file; - unset($files[$filename]); - } - - return $files; -} - -/** - * Invokes library callbacks. - * - * @param $group - * A string containing the group of callbacks that is to be applied. Should be - * either 'info', 'pre-detect', 'post-detect', or 'load'. - * @param $library - * An array of library information, passed by reference. - */ -function libraries_invoke($group, &$library) { - foreach ($library['callbacks'][$group] as $callback) { - libraries_traverse_library($library, $callback); - } -} - -/** - * Helper function to apply a callback to all parts of a library. - * - * Because library declarations can include variants and versions, and those - * version declarations can in turn include variants, modifying e.g. the 'files' - * property everywhere it is declared can be quite cumbersome, in which case - * this helper function is useful. - * - * @param $library - * An array of library information, passed by reference. - * @param $callback - * A string containing the callback to apply to all parts of a library. - */ -function libraries_traverse_library(&$library, $callback) { - // Always apply the callback to the top-level library. - $callback($library, NULL, NULL); - - // Apply the callback to versions. - if (isset($library['versions'])) { - foreach ($library['versions'] as $version_string => &$version) { - $callback($version, $version_string, NULL); - // Versions can include variants as well. - if (isset($version['variants'])) { - foreach ($version['variants'] as $version_variant_name => &$version_variant) { - $callback($version_variant, $version_string, $version_variant_name); - } - } - } - } - - // Apply the callback to variants. - if (isset($library['variants'])) { - foreach ($library['variants'] as $variant_name => &$variant) { - $callback($variant, NULL, $variant_name); - } - } -} - -/** - * Library info callback to make all 'files' properties consistent. - * - * This turns libraries' file information declared as e.g. - * @code - * $library['files']['js'] = array('example_1.js', 'example_2.js'); - * @endcode - * into - * @code - * $library['files']['js'] = array( - * 'example_1.js' => array(), - * 'example_2.js' => array(), - * ); - * @endcode - * It does the same for the 'integration files' property. - * - * @param $library - * An associative array of library information or a part of it, passed by - * reference. - * @param $version - * If the library information belongs to a specific version, the version - * string. NULL otherwise. - * @param $variant - * If the library information belongs to a specific variant, the variant name. - * NULL otherwise. - * - * @see libraries_info() - * @see libraries_invoke() - */ -function libraries_prepare_files(&$library, $version = NULL, $variant = NULL) { - // Both the 'files' property and the 'integration files' property contain file - // declarations, and we want to make both consistent. - $file_types = array(); - if (isset($library['files'])) { - $file_types[] = &$library['files']; - } - if (isset($library['integration files'])) { - // Integration files are additionally keyed by module. - foreach ($library['integration files'] as &$integration_files) { - $file_types[] = &$integration_files; - } - } - foreach ($file_types as &$files) { - // Go through all supported types of files. - foreach (array('js', 'css', 'php') as $type) { - if (isset($files[$type])) { - foreach ($files[$type] as $key => $value) { - // Unset numeric keys and turn the respective values into keys. - if (is_numeric($key)) { - $files[$type][$value] = array(); - unset($files[$type][$key]); - } - } - } - } - } -} - -/** - * Library post-detect callback to process and detect dependencies. - * - * It checks whether each of the dependencies of a library are installed and - * available in a compatible version. - * - * @param $library - * An associative array of library information or a part of it, passed by - * reference. - * @param $version - * If the library information belongs to a specific version, the version - * string. NULL otherwise. - * @param $variant - * If the library information belongs to a specific variant, the variant name. - * NULL otherwise. - * - * @see libraries_info() - * @see libraries_invoke() - */ -function libraries_detect_dependencies(&$library, $version = NULL, $variant = NULL) { - if (isset($library['dependencies'])) { - foreach ($library['dependencies'] as &$dependency_string) { - $dependency_info = drupal_parse_dependency($dependency_string); - $dependency = libraries_detect($dependency_info['name']); - if (!$dependency['installed']) { - $library['installed'] = FALSE; - $library['error'] = 'missing dependency'; - $library['error message'] = t('The %dependency library, which the %library library depends on, is not installed.', array( - '%dependency' => $dependency['name'], - '%library' => $library['name'], - )); - } - elseif (drupal_check_incompatibility($dependency_info, $dependency['version'])) { - $library['installed'] = FALSE; - $library['error'] = 'incompatible dependency'; - $library['error message'] = t('The version %dependency_version of the %dependency library is not compatible with the %library library.', array( - '%dependency_version' => $dependency['version'], - '%dependency' => $dependency['name'], - '%library' => $library['name'], - )); - } - - // Remove the version string from the dependency, so libraries_load() can - // load the libraries directly. - $dependency_string = $dependency_info['name']; - } - } -} - -/** - * Returns information about registered libraries. - * - * The returned information is unprocessed; i.e., as registered by modules. - * - * @param $name - * (optional) The machine name of a library to return registered information - * for. If omitted, information about all registered libraries is returned. - * - * @return array|false - * An associative array containing registered information for all libraries, - * the registered information for the library specified by $name, or FALSE if - * the library $name is not registered. - * - * @see hook_libraries_info() - * - * @todo Re-introduce support for include file plugin system - either by copying - * Wysiwyg's code, or directly switching to CTools. - */ -function &libraries_info($name = NULL) { - // This static cache is re-used by libraries_detect() to save memory. - $libraries = &drupal_static(__FUNCTION__); - - if (!isset($libraries)) { - $libraries = array(); - // Gather information from hook_libraries_info(). - foreach (module_implements('libraries_info') as $module) { - foreach (module_invoke($module, 'libraries_info') as $machine_name => $properties) { - $properties['module'] = $module; - $libraries[$machine_name] = $properties; - } - } - // Gather information from hook_libraries_info() in enabled themes. - // @see drupal_alter() - global $theme, $base_theme_info; - if (isset($theme)) { - $theme_keys = array(); - foreach ($base_theme_info as $base) { - $theme_keys[] = $base->name; - } - $theme_keys[] = $theme; - foreach ($theme_keys as $theme_key) { - $function = $theme_key . '_' . 'libraries_info'; - if (function_exists($function)) { - foreach ($function() as $machine_name => $properties) { - $properties['theme'] = $theme_key; - $libraries[$machine_name] = $properties; - } - } - } - } - - // Gather information from .info files. - // .info files override module definitions. - foreach (libraries_scan_info_files() as $machine_name => $file) { - $properties = drupal_parse_info_file($file->uri); - $properties['info file'] = $file->uri; - $libraries[$machine_name] = $properties; - } - - // Provide defaults. - foreach ($libraries as $machine_name => &$properties) { - libraries_info_defaults($properties, $machine_name); - } - - // Allow modules to alter the registered libraries. - drupal_alter('libraries_info', $libraries); - - // Invoke callbacks in the 'info' group. - foreach ($libraries as &$properties) { - libraries_invoke('info', $properties); - } - } - - if (isset($name)) { - if (!empty($libraries[$name])) { - return $libraries[$name]; - } - else { - $false = FALSE; - return $false; - } - } - return $libraries; -} - -/** - * Applies default properties to a library definition. - * - * @library - * An array of library information, passed by reference. - * @name - * The machine name of the passed-in library. - */ -function libraries_info_defaults(&$library, $name) { - $library += array( - 'machine name' => $name, - 'name' => $name, - 'vendor url' => '', - 'download url' => '', - 'path' => '', - 'library path' => NULL, - 'version callback' => 'libraries_get_version', - 'version arguments' => array(), - 'files' => array(), - 'dependencies' => array(), - 'variants' => array(), - 'versions' => array(), - 'integration files' => array(), - 'callbacks' => array(), - ); - $library['callbacks'] += array( - 'info' => array(), - 'pre-detect' => array(), - 'post-detect' => array(), - 'pre-dependencies-load' => array(), - 'pre-load' => array(), - 'post-load' => array(), - ); - - // Add our own callbacks before any others. - array_unshift($library['callbacks']['info'], 'libraries_prepare_files'); - array_unshift($library['callbacks']['post-detect'], 'libraries_detect_dependencies'); - - return $library; -} - -/** - * Tries to detect a library and its installed version. - * - * @param $name - * The machine name of a library to return registered information for. - * - * @return array|false - * An associative array containing registered information for the library - * specified by $name, or FALSE if the library $name is not registered. - * In addition to the keys returned by libraries_info(), the following keys - * are contained: - * - installed: A boolean indicating whether the library is installed. Note - * that not only the top-level library, but also each variant contains this - * key. - * - version: If the version could be detected, the full version string. - * - error: If an error occurred during library detection, one of the - * following error statuses: "not found", "not detected", "not supported". - * - error message: If an error occurred during library detection, a detailed - * error message. - * - * @see libraries_info() - */ -function libraries_detect($name) { - // Re-use the statically cached value of libraries_info() to save memory. - $library = &libraries_info($name); - - if ($library === FALSE) { - return $library; - } - // If 'installed' is set, library detection ran already. - if (isset($library['installed'])) { - return $library; - } - - $library['installed'] = FALSE; - - // Check whether the library exists. - if (!isset($library['library path'])) { - $library['library path'] = libraries_get_path($library['machine name']); - } - if ($library['library path'] === FALSE || !file_exists($library['library path'])) { - $library['error'] = 'not found'; - $library['error message'] = t('The %library library could not be found.', array( - '%library' => $library['name'], - )); - return $library; - } - - // Invoke callbacks in the 'pre-detect' group. - libraries_invoke('pre-detect', $library); - - // Detect library version, if not hardcoded. - if (!isset($library['version'])) { - // We support both a single parameter, which is an associative array, and an - // indexed array of multiple parameters. - if (isset($library['version arguments'][0])) { - // Add the library as the first argument. - $library['version'] = call_user_func_array($library['version callback'], array_merge(array($library), $library['version arguments'])); - } - else { - $library['version'] = $library['version callback']($library, $library['version arguments']); - } - if (empty($library['version'])) { - $library['error'] = 'not detected'; - $library['error message'] = t('The version of the %library library could not be detected.', array( - '%library' => $library['name'], - )); - return $library; - } - } - - // Determine to which supported version the installed version maps. - if (!empty($library['versions'])) { - ksort($library['versions']); - $version = 0; - foreach ($library['versions'] as $supported_version => $version_properties) { - if (version_compare($library['version'], $supported_version, '>=')) { - $version = $supported_version; - } - } - if (!$version) { - $library['error'] = 'not supported'; - $library['error message'] = t('The installed version %version of the %library library is not supported.', array( - '%version' => $library['version'], - '%library' => $library['name'], - )); - return $library; - } - - // Apply version specific definitions and overrides. - $library = array_merge($library, $library['versions'][$version]); - unset($library['versions']); - } - - // Check each variant if it is installed. - if (!empty($library['variants'])) { - foreach ($library['variants'] as $variant_name => &$variant) { - // If no variant callback has been set, assume the variant to be - // installed. - if (!isset($variant['variant callback'])) { - $variant['installed'] = TRUE; - } - else { - // We support both a single parameter, which is an associative array, - // and an indexed array of multiple parameters. - if (isset($variant['variant arguments'][0])) { - // Add the library as the first argument, and the variant name as the second. - $variant['installed'] = call_user_func_array($variant['variant callback'], array_merge(array($library, $variant_name), $variant['variant arguments'])); - } - else { - $variant['installed'] = $variant['variant callback']($library, $variant_name, $variant['variant arguments']); - } - if (!$variant['installed']) { - $variant['error'] = 'not found'; - $variant['error message'] = t('The %variant variant of the %library library could not be found.', array( - '%variant' => $variant_name, - '%library' => $library['name'], - )); - } - } - } - } - - // If we end up here, the library should be usable. - $library['installed'] = TRUE; - - // Invoke callbacks in the 'post-detect' group. - libraries_invoke('post-detect', $library); - - return $library; -} - -/** - * Loads a library. - * - * @param $name - * The name of the library to load. - * @param $variant - * The name of the variant to load. Note that only one variant of a library - * can be loaded within a single request. The variant that has been passed - * first is used; different variant names in subsequent calls are ignored. - * - * @return - * An associative array of the library information as returned from - * libraries_info(). The top-level properties contain the effective definition - * of the library (variant) that has been loaded. Additionally: - * - installed: Whether the library is installed, as determined by - * libraries_detect_library(). - * - loaded: Either the amount of library files that have been loaded, or - * FALSE if the library could not be loaded. - * See hook_libraries_info() for more information. - */ -function libraries_load($name, $variant = NULL) { - $loaded = &drupal_static(__FUNCTION__, array()); - - if (!isset($loaded[$name])) { - $library = cache_get($name, 'cache_libraries'); - if ($library) { - $library = $library->data; - } - else { - $library = libraries_detect($name); - cache_set($name, $library, 'cache_libraries'); - } - - // If a variant was specified, override the top-level properties with the - // variant properties. - if (isset($variant)) { - // Ensure that the $variant key exists, and if it does not, set its - // 'installed' property to FALSE by default. This will prevent the loading - // of the library files below. - $library['variants'] += array($variant => array('installed' => FALSE)); - $library = array_merge($library, $library['variants'][$variant]); - } - // Regardless of whether a specific variant was requested or not, there can - // only be one variant of a library within a single request. - unset($library['variants']); - - // Invoke callbacks in the 'pre-dependencies-load' group. - libraries_invoke('pre-dependencies-load', $library); - - // If the library (variant) is installed, load it. - $library['loaded'] = FALSE; - if ($library['installed']) { - // Load library dependencies. - if (isset($library['dependencies'])) { - foreach ($library['dependencies'] as $dependency) { - libraries_load($dependency); - } - } - - // Invoke callbacks in the 'pre-load' group. - libraries_invoke('pre-load', $library); - - // Load all the files associated with the library. - $library['loaded'] = libraries_load_files($library); - - // Invoke callbacks in the 'post-load' group. - libraries_invoke('post-load', $library); - } - $loaded[$name] = $library; - } - - return $loaded[$name]; -} - -/** - * Loads a library's files. - * - * @param $library - * An array of library information as returned by libraries_info(). - * - * @return - * The number of loaded files. - */ -function libraries_load_files($library) { - // Load integration files. - if (!empty($library['integration files'])) { - foreach ($library['integration files'] as $module => $files) { - libraries_load_files(array( - 'files' => $files, - 'path' => '', - 'library path' => drupal_get_path('module', $module), - )); - } - } - - // Construct the full path to the library for later use. - $path = $library['library path']; - $path = ($library['path'] !== '' ? $path . '/' . $library['path'] : $path); - - // Count the number of loaded files for the return value. - $count = 0; - - // Load both the JavaScript and the CSS files. - // The parameters for drupal_add_js() and drupal_add_css() require special - // handling. - // @see drupal_process_attached() - foreach (array('js', 'css') as $type) { - if (!empty($library['files'][$type])) { - foreach ($library['files'][$type] as $data => $options) { - // If the value is not an array, it's a filename and passed as first - // (and only) argument. - if (!is_array($options)) { - $data = $options; - $options = array(); - } - // In some cases, the first parameter ($data) is an array. Arrays can't - // be passed as keys in PHP, so we have to get $data from the value - // array. - if (is_numeric($data)) { - $data = $options['data']; - unset($options['data']); - } - // Prepend the library path to the file name. - $data = "$path/$data"; - // Apply the default group if the group isn't explicitly given. - if (!isset($options['group'])) { - $options['group'] = ($type == 'js') ? JS_DEFAULT : CSS_DEFAULT; - } - call_user_func('drupal_add_' . $type, $data, $options); - $count++; - } - } - } - - // Load PHP files. - if (!empty($library['files']['php'])) { - foreach ($library['files']['php'] as $file => $array) { - $file_path = DRUPAL_ROOT . '/' . $path . '/' . $file; - if (file_exists($file_path)) { - require_once $file_path; - $count++; - } - } - } - - return $count; -} - -/** - * Gets the version information from an arbitrary library. - * - * @param $library - * An associative array containing all information about the library. - * @param $options - * An associative array containing with the following keys: - * - file: The filename to parse for the version, relative to the library - * path. For example: 'docs/changelog.txt'. - * - pattern: A string containing a regular expression (PCRE) to match the - * library version. For example: '@version\s+([0-9a-zA-Z\.-]+)@'. Note that - * the returned version is not the match of the entire pattern (i.e. - * '@version 1.2.3' in the above example) but the match of the first - * sub-pattern (i.e. '1.2.3' in the above example). - * - lines: (optional) The maximum number of lines to search the pattern in. - * Defaults to 20. - * - cols: (optional) The maximum number of characters per line to take into - * account. Defaults to 200. In case of minified or compressed files, this - * prevents reading the entire file into memory. - * - * @return - * A string containing the version of the library. - * - * @see libraries_get_path() - */ -function libraries_get_version($library, $options) { - // Provide defaults. - $options += array( - 'file' => '', - 'pattern' => '', - 'lines' => 20, - 'cols' => 200, - ); - - $file = DRUPAL_ROOT . '/' . $library['library path'] . '/' . $options['file']; - if (empty($options['file']) || !file_exists($file)) { - return; - } - $file = fopen($file, 'r'); - while ($options['lines'] && $line = fgets($file, $options['cols'])) { - if (preg_match($options['pattern'], $line, $version)) { - fclose($file); - return $version[1]; - } - $options['lines']--; - } - fclose($file); -}
--- a/sites/all/modules/libraries/tests/example/README.txt Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ - -Example library - -Version 1 - -This file is an example file to test version detection. - -The various other files in this directory are to test the loading of JavaScript, -CSS and PHP files. -- JavaScript: The filenames of the JavaScript files are asserted to be in the - raw HTML via SimpleTest. Since the filename could appear, for instance, in an - error message, this is not very robust. Explicit testing of JavaScript, - though, is not yet possible with SimpleTest. To allow for easier debugging, we - place the following text on the page: - "If this text shows up, no JavaScript test file was loaded." - This text is replaced via JavaScript by a text of the form: - "If this text shows up, [[file] was loaded successfully." - [file] is either 'example_1.js', 'example_2.js', 'example_3.js', - 'example_4.js' or 'libraries_test.js'. If you have SimpleTest's verbose mode - enabled and see the above text in one of the debug pages, the noted JavaScript - file was loaded successfully. -- CSS: The filenames of the CSS files are asserted to be in the raw HTML via - SimpleTest. Since the filename could appear, for instance, in an error - message, this is not very robust. Explicit testing of CSS, though, is not yet - possible with SimpleTest. Hence, the CSS files, if loaded, make the following - text a certain color: - "If one of the CSS test files has been loaded, this text will be colored: - - example_1: red - - example_2: green - - example_3: orange - - example_4: blue - - libraries_test: purple" - If you have SimpleTest's verbose mode enabled, and see the above text in a - certain color (i.e. not in black), a CSS file was loaded successfully. Which - file depends on the color as referenced in the text above. -- PHP: The loading of PHP files is tested by defining a dummy function in the - PHP files and then checking whether this function was defined using - function_exists(). This can be checked programatically with SimpleTest. -The loading of integration files is tested with the same method. The integration -files are libraries_test.js, libraries_test.css, libraries_test.inc and are -located in the tests directory alongside libraries_test.module (i.e. they are -not in the same directory as this file).
--- a/sites/all/modules/libraries/tests/example/example_1.css Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - -/** - * @file - * Test CSS file for Libraries loading. - * - * Color the 'libraries-test-css' div red. See README.txt for more information. - */ - -.libraries-test-css { - color: red; -}
--- a/sites/all/modules/libraries/tests/example/example_1.js Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - -/** - * @file - * Test JavaScript file for Libraries loading. - * - * Replace the text in the 'libraries-test-javascript' div. See README.txt for - * more information. - */ - -(function ($) { - -Drupal.behaviors.librariesTest = { - attach: function(context, settings) { - $('.libraries-test-javascript').text('If this text shows up, example_1.js was loaded successfully.') - } -}; - -})(jQuery);
--- a/sites/all/modules/libraries/tests/example/example_1.php Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -<?php - -/** - * @file - * Test PHP file for Libraries loading. - */ - -/** - * Dummy function to see if this file was loaded. - */ -function _libraries_test_example_1() { -}
--- a/sites/all/modules/libraries/tests/example/example_2.css Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - -/** - * @file - * Test CSS file for Libraries loading. - * - * Color the 'libraries-test-css' div green. See README.txt for more information. - */ - -.libraries-test-css { - color: green; -}
--- a/sites/all/modules/libraries/tests/example/example_2.js Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - -/** - * @file - * Test JavaScript file for Libraries loading. - * - * Replace the text in the 'libraries-test-javascript' div. See README.txt for - * more information. - */ - -(function ($) { - -Drupal.behaviors.librariesTest = { - attach: function(context, settings) { - $('.libraries-test-javascript').text('If this text shows up, example_2.js was loaded successfully.') - } -}; - -})(jQuery);
--- a/sites/all/modules/libraries/tests/example/example_2.php Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -<?php - -/** - * @file - * Test PHP file for Libraries loading. - */ - -/** - * Dummy function to see if this file was loaded. - */ -function _libraries_test_example_2() { -}
--- a/sites/all/modules/libraries/tests/example/example_3.css Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - -/** - * @file - * Test CSS file for Libraries loading. - * - * Color the 'libraries-test-css' div orange. See README.txt for more information. - */ - -.libraries-test-css { - color: orange; -}
--- a/sites/all/modules/libraries/tests/example/example_3.js Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - -/** - * @file - * Test JavaScript file for Libraries loading. - * - * Replace the text in the 'libraries-test-javascript' div. See README.txt for - * more information. - */ - -(function ($) { - -Drupal.behaviors.librariesTest = { - attach: function(context, settings) { - $('.libraries-test-javascript').text('If this text shows up, example_3.js was loaded successfully.') - } -}; - -})(jQuery);
--- a/sites/all/modules/libraries/tests/example/example_3.php Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -<?php - -/** - * @file - * Test PHP file for Libraries loading. - */ - -/** - * Dummy function to see if this file was loaded. - */ -function _libraries_test_example_3() { -}
--- a/sites/all/modules/libraries/tests/example/example_4.css Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - -/** - * @file - * Test CSS file for Libraries loading. - * - * Color the 'libraries-test-css' div blue. See README.txt for more information. - */ - -.libraries-test-css { - color: blue; -}
--- a/sites/all/modules/libraries/tests/example/example_4.js Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - -/** - * @file - * Test JavaScript file for Libraries loading. - * - * Replace the text in the 'libraries-test-javascript' div. See README.txt for - * more information. - */ - -(function ($) { - -Drupal.behaviors.librariesTest = { - attach: function(context, settings) { - $('.libraries-test-javascript').text('If this text shows up, example_4.js was loaded successfully.') - } -}; - -})(jQuery);
--- a/sites/all/modules/libraries/tests/example/example_4.php Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -<?php - -/** - * @file - * Test PHP file for Libraries loading. - */ - -/** - * Dummy function to see if this file was loaded. - */ -function _libraries_test_example_4() { -}
--- a/sites/all/modules/libraries/tests/example/example_info_file.libraries.info Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - -; This is an example info file of a library used for testing purposes. -name = Example info file - - -; Information added by drupal.org packaging script on 2013-03-09 -version = "7.x-2.1" -core = "7.x" -project = "libraries" -datestamp = "1362848412" -
--- a/sites/all/modules/libraries/tests/libraries.test Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,537 +0,0 @@ -<?php - -/** - * @file - * Tests for Libraries API. - */ - -/** - * Tests basic Libraries API functions. - */ -class LibrariesUnitTestCase extends DrupalUnitTestCase { - public static function getInfo() { - return array( - 'name' => 'Libraries API unit tests', - 'description' => 'Tests basic functions provided by Libraries API.', - 'group' => 'Libraries API', - ); - } - - function setUp() { - drupal_load('module', 'libraries'); - parent::setUp(); - } - - /** - * Tests libraries_get_path(). - */ - function testLibrariesGetPath() { - // Note that, even though libraries_get_path() doesn't find the 'example' - // library, we are able to make it 'installed' by specifying the 'library - // path' up-front. This is only used for testing purposed and is strongly - // discouraged as it defeats the purpose of Libraries API in the first - // place. - $this->assertEqual(libraries_get_path('example'), FALSE, 'libraries_get_path() returns FALSE for a missing library.'); - } - - /** - * Tests libraries_prepare_files(). - */ - function testLibrariesPrepareFiles() { - $expected = array( - 'files' => array( - 'js' => array('example.js' => array()), - 'css' => array('example.css' => array()), - 'php' => array('example.php' => array()), - ), - ); - $library = array( - 'files' => array( - 'js' => array('example.js'), - 'css' => array('example.css'), - 'php' => array('example.php'), - ), - ); - libraries_prepare_files($library, NULL, NULL); - $this->assertEqual($expected, $library, 'libraries_prepare_files() works correctly.'); - } -} - -/** - * Tests basic detection and loading of libraries. - */ -class LibrariesTestCase extends DrupalWebTestCase { - protected $profile = 'testing'; - - public static function getInfo() { - return array( - 'name' => 'Libraries detection and loading', - 'description' => 'Tests detection and loading of libraries.', - 'group' => 'Libraries API', - ); - } - - function setUp() { - parent::setUp('libraries', 'libraries_test'); - } - - /** - * Tests libraries_detect_dependencies(). - */ - function testLibrariesDetectDependencies() { - $library = array( - 'name' => 'Example', - 'dependencies' => array('example_missing'), - ); - libraries_detect_dependencies($library); - $this->assertEqual($library['error'], 'missing dependency', 'libraries_detect_dependencies() detects missing dependency'); - $error_message = t('The %dependency library, which the %library library depends on, is not installed.', array( - '%dependency' => 'Example missing', - '%library' => $library['name'], - )); - $this->verbose("Expected:<br>$error_message"); - $this->verbose('Actual:<br>' . $library['error message']); - $this->assertEqual($library['error message'], $error_message, 'Correct error message for a missing dependency'); - // Test versioned dependencies. - $version = '1.1'; - $compatible = array( - '1.1', - '<=1.1', - '>=1.1', - '<1.2', - '<2.0', - '>1.0', - '>1.0-rc1', - '>1.0-beta2', - '>1.0-alpha3', - '>0.1', - '<1.2, >1.0', - '>0.1, <=1.1', - ); - $incompatible = array( - '1.2', - '2.0', - '<1.1', - '>1.1', - '<=1.0', - '<=1.0-rc1', - '<=1.0-beta2', - '<=1.0-alpha3', - '>=1.2', - '<1.1, >0.9', - '>=0.1, <1.1', - ); - $library = array( - 'name' => 'Example', - ); - foreach ($compatible as $version_string) { - $library['dependencies'][0] = "example_dependency ($version_string)"; - // libraries_detect_dependencies() is a post-detect callback, so - // 'installed' is already set, when it is called. It sets the value to - // FALSE for missing or incompatible dependencies. - $library['installed'] = TRUE; - libraries_detect_dependencies($library); - $this->assertTrue($library['installed'], "libraries_detect_dependencies() detects compatible version string: '$version_string' is compatible with '$version'"); - } - foreach ($incompatible as $version_string) { - $library['dependencies'][0] = "example_dependency ($version_string)"; - $library['installed'] = TRUE; - unset($library['error'], $library['error message']); - libraries_detect_dependencies($library); - $this->assertEqual($library['error'], 'incompatible dependency', "libraries_detect_dependencies() detects incompatible version strings: '$version_string' is incompatible with '$version'"); - } - // Instead of repeating this assertion for each version string, we just - // re-use the $library variable from the foreach loop. - $error_message = t('The version %dependency_version of the %dependency library is not compatible with the %library library.', array( - '%dependency_version' => $version, - '%dependency' => 'Example dependency', - '%library' => $library['name'], - )); - $this->verbose("Expected:<br>$error_message"); - $this->verbose('Actual:<br>' . $library['error message']); - $this->assertEqual($library['error message'], $error_message, 'Correct error message for an incompatible dependency'); - } - - /** - * Tests libraries_scan_info_files(). - */ - function testLibrariesScanInfoFiles() { - $expected = array('example_info_file' => (object) array( - 'uri' => drupal_get_path('module', 'libraries') . '/tests/example/example_info_file.libraries.info', - 'filename' => 'example_info_file.libraries.info', - 'name' => 'example_info_file.libraries', - )); - $this->assertEqual(libraries_scan_info_files(), $expected, 'libraries_scan_info_files() correctly finds the example info file.'); - $this->verbose('<pre>' . var_export(libraries_scan_info_files(), TRUE) . '</pre>'); - } - - /** - * Tests libraries_info(). - */ - function testLibrariesInfo() { - // Test that library information is found correctly. - $expected = array( - 'name' => 'Example files', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'files' => array( - 'js' => array('example_1.js' => array()), - 'css' => array('example_1.css' => array()), - 'php' => array('example_1.php' => array()), - ), - 'module' => 'libraries_test', - ); - libraries_info_defaults($expected, 'example_files'); - $library = libraries_info('example_files'); - $this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>'); - $this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library, $expected, 'Library information is correctly gathered.'); - - // Test a library specified with an .info file gets detected. - $expected = array( - 'name' => 'Example info file', - 'info file' => drupal_get_path('module', 'libraries_test') . '/example/example_info_file.libraries.info', - ); - libraries_info_defaults($expected, 'example_info_file'); - $library = libraries_info('example_info_file'); - // If this module was downloaded from Drupal.org, the Drupal.org packaging - // system has corrupted the test info file. - // @see http://drupal.org/node/1606606 - unset($library['core'], $library['datestamp'], $library['project'], $library['version']); - $this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>'); - $this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library, $expected, 'Library specified with an .info file found'); - } - - /** - * Tests libraries_detect(). - */ - function testLibrariesDetect() { - // Test missing library. - $library = libraries_detect('example_missing'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['error'], 'not found', 'Missing library not found.'); - $error_message = t('The %library library could not be found.', array( - '%library' => $library['name'], - )); - $this->assertEqual($library['error message'], $error_message, 'Correct error message for a missing library.'); - - // Test unknown library version. - $library = libraries_detect('example_undetected_version'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['error'], 'not detected', 'Undetected version detected as such.'); - $error_message = t('The version of the %library library could not be detected.', array( - '%library' => $library['name'], - )); - $this->assertEqual($library['error message'], $error_message, 'Correct error message for a library with an undetected version.'); - - // Test unsupported library version. - $library = libraries_detect('example_unsupported_version'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['error'], 'not supported', 'Unsupported version detected as such.'); - $error_message = t('The installed version %version of the %library library is not supported.', array( - '%version' => $library['version'], - '%library' => $library['name'], - )); - $this->assertEqual($library['error message'], $error_message, 'Correct error message for a library with an unsupported version.'); - - // Test supported library version. - $library = libraries_detect('example_supported_version'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['installed'], TRUE, 'Supported library version found.'); - - // Test libraries_get_version(). - $library = libraries_detect('example_default_version_callback'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['version'], '1', 'Expected version returned by default version callback.'); - - // Test a multiple-parameter version callback. - $library = libraries_detect('example_multiple_parameter_version_callback'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['version'], '1', 'Expected version returned by multiple parameter version callback.'); - - // Test a top-level files property. - $library = libraries_detect('example_files'); - $files = array( - 'js' => array('example_1.js' => array()), - 'css' => array('example_1.css' => array()), - 'php' => array('example_1.php' => array()), - ); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['files'], $files, 'Top-level files property works.'); - - // Test version-specific library files. - $library = libraries_detect('example_versions'); - $files = array( - 'js' => array('example_2.js' => array()), - 'css' => array('example_2.css' => array()), - 'php' => array('example_2.php' => array()), - ); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['files'], $files, 'Version-specific library files found.'); - - // Test missing variant. - $library = libraries_detect('example_variant_missing'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['variants']['example_variant']['error'], 'not found', 'Missing variant not found'); - $error_message = t('The %variant variant of the %library library could not be found.', array( - '%variant' => 'example_variant', - '%library' => 'Example variant missing', - )); - $this->assertEqual($library['variants']['example_variant']['error message'], $error_message, 'Correct error message for a missing variant.'); - - // Test existing variant. - $library = libraries_detect('example_variant'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['variants']['example_variant']['installed'], TRUE, 'Existing variant found.'); - } - - /** - * Tests libraries_load(). - */ - function testLibrariesLoad() { - // Test dependencies. - $library = libraries_load('example_dependency_missing'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertFalse($library['loaded'], 'Library with missing dependency cannot be loaded'); - $library = libraries_load('example_dependency_incompatible'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertFalse($library['loaded'], 'Library with incompatible dependency cannot be loaded'); - $library = libraries_load('example_dependency_compatible'); - $this->verbose('<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library['loaded'], 1, 'Library with compatible dependency is loaded'); - $loaded = &drupal_static('libraries_load'); - $this->verbose('<pre>' . var_export($loaded, TRUE) . '</pre>'); - $this->assertEqual($loaded['example_dependency']['loaded'], 1, 'Dependency library is also loaded'); - } - - /** - * Tests the applying of callbacks. - */ - function testCallbacks() { - $expected = array( - 'name' => 'Example callback', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'versions' => array( - '1' => array( - 'variants' => array( - 'example_variant' => array( - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ), - ), - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ), - ), - 'variants' => array( - 'example_variant' => array( - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ), - ), - 'callbacks' => array( - 'info' => array('_libraries_test_info_callback'), - 'pre-detect' => array('_libraries_test_pre_detect_callback'), - 'post-detect' => array('_libraries_test_post_detect_callback'), - 'pre-dependencies-load' => array('_libraries_test_pre_dependencies_load_callback'), - 'pre-load' => array('_libraries_test_pre_load_callback'), - 'post-load' => array('_libraries_test_post_load_callback'), - ), - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - 'module' => 'libraries_test', - ); - libraries_info_defaults($expected, 'example_callback'); - - // Test a callback in the 'info' group. - $expected['info callback'] = 'applied (top-level)'; - $expected['versions']['1']['info callback'] = 'applied (version 1)'; - $expected['versions']['1']['variants']['example_variant']['info callback'] = 'applied (version 1, variant example_variant)'; - $expected['variants']['example_variant']['info callback'] = 'applied (variant example_variant)'; - $library = libraries_info('example_callback'); - $this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>'); - $this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library, $expected, 'Prepare callback was applied correctly.'); - - // Test a callback in the 'pre-detect' and 'post-detect' phases. - // Successfully detected libraries should only contain version information - // for the detected version and thus, be marked as installed. - unset($expected['versions']); - $expected['installed'] = TRUE; - // Additionally, version-specific properties of the detected version are - // supposed to override the corresponding top-level properties. - $expected['info callback'] = 'applied (version 1)'; - $expected['variants']['example_variant']['installed'] = TRUE; - $expected['variants']['example_variant']['info callback'] = 'applied (version 1, variant example_variant)'; - // Version-overloading takes place after the 'pre-detect' callbacks have - // been applied. - $expected['pre-detect callback'] = 'applied (version 1)'; - $expected['post-detect callback'] = 'applied (top-level)'; - $expected['variants']['example_variant']['pre-detect callback'] = 'applied (version 1, variant example_variant)'; - $expected['variants']['example_variant']['post-detect callback'] = 'applied (variant example_variant)'; - $library = libraries_detect('example_callback'); - $this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>'); - $this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library, $expected, 'Detect callback was applied correctly.'); - - // Test a callback in the 'pre-dependencies-load', 'pre-load' and - // 'post-load' phases. - // Successfully loaded libraries should only contain information about the - // already loaded variant. - unset($expected['variants']); - $expected['loaded'] = 0; - $expected['pre-dependencies-load callback'] = 'applied (top-level)'; - $expected['pre-load callback'] = 'applied (top-level)'; - $expected['post-load callback'] = 'applied (top-level)'; - $library = libraries_load('example_callback'); - $this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>'); - $this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library, $expected, 'Pre-load and post-load callbacks were applied correctly.'); - // This is not recommended usually and is only used for testing purposes. - drupal_static_reset('libraries_load'); - // Successfully loaded library variants are supposed to contain the specific - // variant information only. - $expected['info callback'] = 'applied (version 1, variant example_variant)'; - $expected['pre-detect callback'] = 'applied (version 1, variant example_variant)'; - $expected['post-detect callback'] = 'applied (variant example_variant)'; - $library = libraries_load('example_callback', 'example_variant'); - $this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>'); - $this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>'); - $this->assertEqual($library, $expected, 'Pre-detect and post-detect callbacks were applied correctly to a variant.'); - } - - /** - * Tests that library files are properly added to the page output. - * - * We check for JavaScript and CSS files directly in the DOM and add a list of - * included PHP files manually to the page output. - * - * @see _libraries_test_load() - */ - function testLibrariesOutput() { - // Test loading of a simple library with a top-level files property. - $this->drupalGet('libraries_test/files'); - $this->assertLibraryFiles('example_1', 'File loading'); - - // Test loading of integration files. - $this->drupalGet('libraries_test/integration_files'); - $this->assertRaw('libraries_test.js', 'Integration file loading: libraries_test.js found'); - $this->assertRaw('libraries_test.css', 'Integration file loading: libraries_test.css found'); - $this->assertRaw('libraries_test.inc', 'Integration file loading: libraries_test.inc found'); - - // Test version overloading. - $this->drupalGet('libraries_test/versions'); - $this->assertLibraryFiles('example_2', 'Version overloading'); - - // Test variant loading. - $this->drupalGet('libraries_test/variant'); - $this->assertLibraryFiles('example_3', 'Variant loading'); - - // Test version overloading and variant loading. - $this->drupalGet('libraries_test/versions_and_variants'); - $this->assertLibraryFiles('example_4', 'Concurrent version and variant overloading'); - - // Test caching. - variable_set('libraries_test_cache', TRUE); - cache_clear_all('example_callback', 'cache_libraries'); - // When the library information is not cached, all callback groups should be - // invoked. - $this->drupalGet('libraries_test/cache'); - $this->assertRaw('The <em>info</em> callback group was invoked.', 'Info callback invoked for uncached libraries.'); - $this->assertRaw('The <em>pre-detect</em> callback group was invoked.', 'Pre-detect callback invoked for uncached libraries.'); - $this->assertRaw('The <em>post-detect</em> callback group was invoked.', 'Post-detect callback invoked for uncached libraries.'); - $this->assertRaw('The <em>pre-load</em> callback group was invoked.', 'Pre-load callback invoked for uncached libraries.'); - $this->assertRaw('The <em>post-load</em> callback group was invoked.', 'Post-load callback invoked for uncached libraries.'); - // When the library information is cached only the 'pre-load' and - // 'post-load' callback groups should be invoked. - $this->drupalGet('libraries_test/cache'); - $this->assertNoRaw('The <em>info</em> callback group was not invoked.', 'Info callback not invoked for cached libraries.'); - $this->assertNoRaw('The <em>pre-detect</em> callback group was not invoked.', 'Pre-detect callback not invoked for cached libraries.'); - $this->assertNoRaw('The <em>post-detect</em> callback group was not invoked.', 'Post-detect callback not invoked for cached libraries.'); - $this->assertRaw('The <em>pre-load</em> callback group was invoked.', 'Pre-load callback invoked for cached libraries.'); - $this->assertRaw('The <em>post-load</em> callback group was invoked.', 'Post-load callback invoked for cached libraries.'); - variable_set('libraries_test_cache', FALSE); - } - - /** - * Helper function to assert that a library was correctly loaded. - * - * Asserts that all the correct files were loaded and all the incorrect ones - * were not. - * - * @param $name - * The name of the files that should be loaded. The current testing system - * knows of 'example_1', 'example_2', 'example_3' and 'example_4'. Each name - * has an associated JavaScript, CSS and PHP file that will be asserted. All - * other files will be asserted to not be loaded. See - * tests/example/README.txt for more information on how the loading of the - * files is tested. - * @param $label - * (optional) A label to prepend to the assertion messages, to make them - * less ambiguous. - * @param $extensions - * (optional) The expected file extensions of $name. Defaults to - * array('js', 'css', 'php'). - */ - function assertLibraryFiles($name, $label = '', $extensions = array('js', 'css', 'php')) { - $label = ($label !== '' ? "$label: " : ''); - - // Test that the wrong files are not loaded... - $names = array( - 'example_1' => FALSE, - 'example_2' => FALSE, - 'example_3' => FALSE, - 'example_4' => FALSE, - ); - // ...and the correct ones are. - $names[$name] = TRUE; - - // Test for the specific HTML that the different file types appear as in the - // DOM. - $html = array( - 'js' => array('<script type="text/javascript" src="', '"></script>'), - 'css' => array('@import url("', '");'), - // PHP files do not get added to the DOM directly. - // @see _libraries_test_load() - 'php' => array('<li>', '</li>'), - ); - - foreach ($names as $name => $expected) { - foreach ($extensions as $extension) { - $filepath = drupal_get_path('module', 'libraries_test') . "/example/$name.$extension"; - // JavaScript and CSS files appear as full URLs and with an appended - // query string. - if (in_array($extension, array('js', 'css'))) { - $filepath = url('', array('absolute' => TRUE)) . $filepath . '?' . variable_get('css_js_query_string'); - } - $raw = $html[$extension][0] . $filepath . $html[$extension][1]; - if ($expected) { - $this->assertRaw($raw, "$label$name.$extension found."); - } - else { - $this->assertNoRaw($raw, "$label$name.$extension not found."); - } - } - } - } - -} -
--- a/sites/all/modules/libraries/tests/libraries_test.css Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - -/** - * @file - * Test CSS file for Libraries loading. - * - * Color the 'libraries-test-css' div purple. See README.txt for more - * information. - */ - -.libraries-test-css { - color: purple; -}
--- a/sites/all/modules/libraries/tests/libraries_test.inc Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -<?php - -/** - * @file - * Test PHP file for Libraries loading. - -/** - * Dummy function to see if this file was loaded. - */ -function _libraries_test_integration_file() { -}
--- a/sites/all/modules/libraries/tests/libraries_test.info Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -name = Libraries test module -description = Tests library detection and loading. -core = 7.x -dependencies[] = libraries -hidden = TRUE - -; Information added by drupal.org packaging script on 2013-03-09 -version = "7.x-2.1" -core = "7.x" -project = "libraries" -datestamp = "1362848412" -
--- a/sites/all/modules/libraries/tests/libraries_test.js Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - -/** - * @file - * Test JavaScript file for Libraries loading. - * - * Replace the text in the 'libraries-test-javascript' div. See README.txt for - * more information. - */ - -(function ($) { - -Drupal.behaviors.librariesTest = { - attach: function(context, settings) { - $('.libraries-test-javascript').text('If this text shows up, libraries_test.js was loaded successfully.') - } -}; - -})(jQuery);
--- a/sites/all/modules/libraries/tests/libraries_test.module Thu Aug 22 17:22:54 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,569 +0,0 @@ -<?php - -/** - * @file - * Tests the library detection and loading. - */ - -/** - * Implements hook_libraries_info(). - */ -function libraries_test_libraries_info() { - // Test library detection. - $libraries['example_missing'] = array( - 'name' => 'Example missing', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/missing', - ); - $libraries['example_undetected_version'] = array( - 'name' => 'Example undetected version', - 'library path' => drupal_get_path('module', 'libraries') . '/tests', - 'version callback' => '_libraries_test_return_version', - 'version arguments' => array(FALSE), - ); - $libraries['example_unsupported_version'] = array( - 'name' => 'Example unsupported version', - 'library path' => drupal_get_path('module', 'libraries') . '/tests', - 'version callback' => '_libraries_test_return_version', - 'version arguments' => array('1'), - 'versions' => array( - '2' => array(), - ), - ); - - $libraries['example_supported_version'] = array( - 'name' => 'Example supported version', - 'library path' => drupal_get_path('module', 'libraries') . '/tests', - 'version callback' => '_libraries_test_return_version', - 'version arguments' => array('1'), - 'versions' => array( - '1' => array(), - ), - ); - - // Test the default version callback. - $libraries['example_default_version_callback'] = array( - 'name' => 'Example default version callback', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version arguments' => array( - 'file' => 'README.txt', - // Version 1 - 'pattern' => '/Version (\d+)/', - 'lines' => 5, - ), - ); - - // Test a multiple-parameter version callback. - $libraries['example_multiple_parameter_version_callback'] = array( - 'name' => 'Example multiple parameter version callback', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - // Version 1 - 'version callback' => '_libraries_test_get_version', - 'version arguments' => array('README.txt', '/Version (\d+)/', 5), - ); - - // Test a top-level files property. - $libraries['example_files'] = array( - 'name' => 'Example files', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'files' => array( - 'js' => array('example_1.js'), - 'css' => array('example_1.css'), - 'php' => array('example_1.php'), - ), - ); - - // Test loading of integration files. - // Normally added by the corresponding module via hook_libraries_info_alter(), - // these files should be automatically loaded when the library is loaded. - $libraries['example_integration_files'] = array( - 'name' => 'Example integration files', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'integration files' => array( - 'libraries_test' => array( - 'js' => array('libraries_test.js'), - 'css' => array('libraries_test.css'), - 'php' => array('libraries_test.inc'), - ), - ), - ); - - // Test version overloading. - $libraries['example_versions'] = array( - 'name' => 'Example versions', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '2', - 'versions' => array( - '1' => array( - 'files' => array( - 'js' => array('example_1.js'), - 'css' => array('example_1.css'), - 'php' => array('example_1.php'), - ), - ), - '2' => array( - 'files' => array( - 'js' => array('example_2.js'), - 'css' => array('example_2.css'), - 'php' => array('example_2.php'), - ), - ), - ), - ); - - // Test variant detection. - $libraries['example_variant_missing'] = array( - 'name' => 'Example variant missing', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'variants' => array( - 'example_variant' => array( - 'files' => array( - 'js' => array('example_3.js'), - 'css' => array('example_3.css'), - 'php' => array('example_3.php'), - ), - 'variant callback' => '_libraries_test_return_installed', - 'variant arguments' => array(FALSE), - ), - ), - ); - - $libraries['example_variant'] = array( - 'name' => 'Example variant', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'variants' => array( - 'example_variant' => array( - 'files' => array( - 'js' => array('example_3.js'), - 'css' => array('example_3.css'), - 'php' => array('example_3.php'), - ), - 'variant callback' => '_libraries_test_return_installed', - 'variant arguments' => array(TRUE), - ), - ), - ); - - // Test correct behaviour with multiple versions and multiple variants. - $libraries['example_versions_and_variants'] = array( - 'name' => 'Example versions and variants', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '2', - 'versions' => array( - '1' => array( - 'variants' => array( - 'example_variant_1' => array( - 'files' => array( - 'js' => array('example_1.js'), - 'css' => array('example_1.css'), - 'php' => array('example_1.php'), - ), - 'variant callback' => '_libraries_test_return_installed', - 'variant arguments' => array(TRUE), - ), - 'example_variant_2' => array( - 'files' => array( - 'js' => array('example_2.js'), - 'css' => array('example_2.css'), - 'php' => array('example_2.php'), - ), - 'variant callback' => '_libraries_test_return_installed', - 'variant arguments' => array(TRUE), - ), - ), - ), - '2' => array( - 'variants' => array( - 'example_variant_1' => array( - 'files' => array( - 'js' => array('example_3.js'), - 'css' => array('example_3.css'), - 'php' => array('example_3.php'), - ), - 'variant callback' => '_libraries_test_return_installed', - 'variant arguments' => array(TRUE), - ), - 'example_variant_2' => array( - 'files' => array( - 'js' => array('example_4.js'), - 'css' => array('example_4.css'), - 'php' => array('example_4.php'), - ), - 'variant callback' => '_libraries_test_return_installed', - 'variant arguments' => array(TRUE), - ), - ), - ), - ), - ); - - // Test dependency loading. - // We add one file to each library to be able to verify if it was loaded with - // libraries_load(). - // This library acts as a dependency for the libraries below. - $libraries['example_dependency'] = array( - 'name' => 'Example dependency', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1.1', - 'files' => array('js' => array('example_1.js')), - ); - $libraries['example_dependency_missing'] = array( - 'name' => 'Example dependency missing', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'dependencies' => array('example_missing'), - 'files' => array('js' => array('example_1.js')), - ); - $libraries['example_dependency_incompatible'] = array( - 'name' => 'Example dependency incompatible', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'dependencies' => array('example_dependency (>1.1)'), - 'files' => array('js' => array('example_1.js')), - ); - $libraries['example_dependency_compatible'] = array( - 'name' => 'Example dependency compatible', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'dependencies' => array('example_dependency (>=1.1)'), - 'files' => array('js' => array('example_1.js')), - ); - - // Test the applying of callbacks. - $libraries['example_callback'] = array( - 'name' => 'Example callback', - 'library path' => drupal_get_path('module', 'libraries') . '/tests/example', - 'version' => '1', - 'versions' => array( - '1' => array( - 'variants' => array( - 'example_variant' => array( - // These keys are for testing purposes only. - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ), - ), - // These keys are for testing purposes only. - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ), - ), - 'variants' => array( - 'example_variant' => array( - // These keys are for testing purposes only. - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ), - ), - 'callbacks' => array( - 'info' => array('_libraries_test_info_callback'), - 'pre-detect' => array('_libraries_test_pre_detect_callback'), - 'post-detect' => array('_libraries_test_post_detect_callback'), - 'pre-dependencies-load' => array('_libraries_test_pre_dependencies_load_callback'), - 'pre-load' => array('_libraries_test_pre_load_callback'), - 'post-load' => array('_libraries_test_post_load_callback'), - ), - // These keys are for testing purposes only. - 'info callback' => 'not applied', - 'pre-detect callback' => 'not applied', - 'post-detect callback' => 'not applied', - 'pre-dependencies-load callback' => 'not applied', - 'pre-load callback' => 'not applied', - 'post-load callback' => 'not applied', - ); - - return $libraries; -} - -/** - * Implements hook_libraries_info_file_paths() - */ -function libraries_test_libraries_info_file_paths() { - return array(drupal_get_path('module', 'libraries_test') . '/example'); -} - -/** - * Gets the version of an example library. - * - * Returns exactly the version string entered as the $version parameter. This - * function cannot be collapsed with _libraries_test_return_installed(), because - * of the different arguments that are passed automatically. - */ -function _libraries_test_return_version($library, $version) { - return $version; -} - -/** - * Gets the version information from an arbitrary library. - * - * Test function for a version callback with multiple arguments. This is an - * exact copy of libraries_get_version(), which uses a single $option argument, - * except for the fact that it uses multiple arguments. Since we support both - * type of version callbacks, detecting the version of a test library with this - * function ensures that the arguments are passed correctly. This function might - * be a useful reference for a custom version callback that uses multiple - * parameters. - * - * @param $library - * An associative array containing all information about the library. - * @param $file - * The filename to parse for the version, relative to the library path. For - * example: 'docs/changelog.txt'. - * @param pattern - * A string containing a regular expression (PCRE) to match the library - * version. For example: '/@version (\d+)\.(\d+)/'. - * @param lines - * (optional) The maximum number of lines to search the pattern in. Defaults - * to 20. - * @param cols - * (optional) The maximum number of characters per line to take into account. - * Defaults to 200. In case of minified or compressed files, this prevents - * reading the entire file into memory. - * - * @return - * A string containing the version of the library. - * - * @see libraries_get_version() - */ -function _libraries_test_get_version($library, $file, $pattern, $lines = 20, $cols = 200) { - - $file = DRUPAL_ROOT . '/' . $library['library path'] . '/' . $file; - if (!file_exists($file)) { - return; - } - $file = fopen($file, 'r'); - while ($lines && $line = fgets($file, $cols)) { - if (preg_match($pattern, $line, $version)) { - fclose($file); - return $version[1]; - } - $lines--; - } - fclose($file); -} - -/** - * Detects the variant of an example library. - * - * Returns exactly the value of $installed, either TRUE or FALSE. This function - * cannot be collapsed with _libraries_test_return_version(), because of the - * different arguments that are passed automatically. - */ -function _libraries_test_return_installed($library, $name, $installed) { - return $installed; -} - -/** - * Sets the 'info callback' key. - * - * This function is used as a test callback for the 'info' callback group. - * - * @see _libraries_test_callback() - */ -function _libraries_test_info_callback(&$library, $version, $variant) { - _libraries_test_callback($library, $version, $variant, 'info'); -} - -/** - * Sets the 'pre-detect callback' key. - * - * This function is used as a test callback for the 'pre-detect' callback group. - * - * @see _libraries_test_callback() - */ -function _libraries_test_pre_detect_callback(&$library, $version, $variant) { - _libraries_test_callback($library, $version, $variant, 'pre-detect'); -} - -/** - * Sets the 'post-detect callback' key. - * - * This function is used as a test callback for the 'post-detect callback group. - * - * @see _libraries_test_callback() - */ -function _libraries_test_post_detect_callback(&$library, $version, $variant) { - _libraries_test_callback($library, $version, $variant, 'post-detect'); -} - -/** - * Sets the 'pre-dependencies-load callback' key. - * - * This function is used as a test callback for the 'pre-dependencies-load' - * callback group. - * - * @see _libraries_test_callback() - */ -function _libraries_test_pre_dependencies_load_callback(&$library, $version, $variant) { - _libraries_test_callback($library, $version, $variant, 'pre-dependencies-load'); -} - -/** - * Sets the 'pre-load callback' key. - * - * This function is used as a test callback for the 'pre-load' callback group. - * - * @see _libraries_test_callback() - */ -function _libraries_test_pre_load_callback(&$library, $version, $variant) { - _libraries_test_callback($library, $version, $variant, 'pre-load'); -} - -/** - * Sets the 'post-load callback' key. - * - * This function is used as a test callback for the 'post-load' callback group. - * - * @see _libraries_test_callback() - */ -function _libraries_test_post_load_callback(&$library, $version, $variant) { - _libraries_test_callback($library, $version, $variant, 'post-load'); -} - -/** - * Sets the '[group] callback' key, where [group] is prepare, detect, or load. - * - * This function is used as a test callback for the all callback groups. - * - * It sets the '[group] callback' (see above) key to 'applied ([part])' where - * [part] is either 'top-level', 'version x.y' (where x.y is the passed-in - * version string), 'variant example' (where example is the passed-in variant - * name), or 'version x.y, variant example' (see above), depending on the part - * of the library the passed-in library information belongs to. - * - * @param $library - * An array of library information, which may be version- or variant-specific. - * Passed by reference. - * @param $version - * The version the library information passed in $library belongs to, or NULL - * if the passed library information is not version-specific. - * @param $variant - * The variant the library information passed in $library belongs to, or NULL - * if the passed library information is not variant-specific. - */ -function _libraries_test_callback(&$library, $version, $variant, $group) { - $string = 'applied'; - if (isset($version) && isset($variant)) { - $string .= " (version $version, variant $variant)"; - } - elseif (isset($version)) { - $string .= " (version $version)"; - } - elseif (isset($variant)) { - $string .= " (variant $variant)"; - } - else { - $string .= ' (top-level)'; - } - $library["$group callback"] = $string; - - // The following is used to test caching of library information. - // Only set the message for the top-level library to prevent confusing, - // duplicate messages. - if (!isset($version) && !isset($variant) && variable_get('libraries_test_cache', FALSE)) { - drupal_set_message("The <em>$group</em> callback group was invoked."); - } -} - -/** - * Implements hook_menu(). - */ -function libraries_test_menu() { - $base = array( - 'page callback' => '_libraries_test_load', - 'access callback' => TRUE, - ); - $items['libraries_test/files'] = $base + array( - 'title' => 'Test files', - 'page arguments' => array('example_files'), - ); - $items['libraries_test/integration_files'] = $base + array( - 'title' => 'Test integration files', - 'page arguments' => array('example_integration_files'), - ); - $items['libraries_test/versions'] = $base + array( - 'title' => 'Test version loading', - 'page arguments' => array('example_versions'), - ); - $items['libraries_test/variant'] = $base + array( - 'title' => 'Test variant loading', - 'page arguments' => array('example_variant', 'example_variant'), - ); - $items['libraries_test/versions_and_variants'] = $base + array( - 'title' => 'Test concurrent version and variant loading', - 'page arguments' => array('example_versions_and_variants', 'example_variant_2'), - ); - $items['libraries_test/cache'] = $base + array( - 'title' => 'Test caching of library information', - 'page arguments' => array('example_callback'), - ); - return $items; -} - -/** - * Loads a specified library (variant) for testing. - * - * JavaScript and CSS files can be checked directly by SimpleTest, so we only - * need to manually check for PHP files. We provide information about the loaded - * JavaScript and CSS files for easier debugging. See example/README.txt for - * more information. - */ -function _libraries_test_load($library, $variant = NULL) { - libraries_load($library, $variant); - // JavaScript and CSS files can be checked directly by SimpleTest, so we only - // need to manually check for PHP files. - $output = ''; - - // For easer debugging of JS loading, a text is shown that the JavaScript will - // replace. - $output .= '<h2>JavaScript</h2>'; - $output .= '<div class="libraries-test-javascript">'; - $output .= 'If this text shows up, no JavaScript test file was loaded.'; - $output .= '</div>'; - - // For easier debugging of CSS loading, the loaded CSS files will color the - // following text. - $output .= '<h2>CSS</h2>'; - $output .= '<div class="libraries-test-css">'; - $output .= 'If one of the CSS test files has been loaded, this text will be colored:'; - $output .= '<ul>'; - // Do not reference the actual CSS files (i.e. including '.css'), because that - // breaks testing. - $output .= '<li>example_1: red</li>'; - $output .= '<li>example_2: green</li>'; - $output .= '<li>example_3: orange</li>'; - $output .= '<li>example_4: blue</li>'; - $output .= '<li>libraries_test: purple</li>'; - $output .= '</ul>'; - $output .= '</div>'; - - $output .= '<h2>PHP</h2>'; - $output .= '<div class="libraries-test-php">'; - $output .= 'The following is a list of all loaded test PHP files:'; - $output .= '<ul>'; - $files = get_included_files(); - foreach ($files as $file) { - if (strpos($file, 'libraries/test') && !strpos($file, 'libraries_test.module')) { - $output .= '<li>' . str_replace(DRUPAL_ROOT . '/', '', $file) . '</li>'; - } - } - $output .= '</ul>'; - $output .= '</div>'; - - return $output; -}
--- a/sites/all/modules/recaptcha/README.txt Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/recaptcha/README.txt Thu Sep 19 10:33:07 2013 +0100 @@ -7,18 +7,20 @@ https://www.google.com/recaptcha -INSTALLATION +DEPENDENCIES ------------ -1. Extract the reCAPTCHA module to your local favourite - modules directory (sites/all/modules). +* reCAPTCHA depends on the CAPTCHA module. + https://drupal.org/project/captcha +* Some people have found that they also need to use jQuery Update module. + https://drupal.org/project/jquery_update CONFIGURATION ------------- 1. Enable reCAPTCHA and CAPTCHA modules in: - admin/build/modules + admin/modules 2. You'll now find a reCAPTCHA tab in the CAPTCHA administration page available at: @@ -32,7 +34,7 @@ 5. Visit the Captcha administration page and set where you want the reCAPTCHA form to be presented: - admin/user/captcha + admin/config/people/captcha MAILHIDE INPUT FORMAT @@ -44,10 +46,10 @@ you use that input filter: 1. Enable the reCAPTCHA Mailhide module: - admin/build/modules + admin/modules -2. Head over to your input format settings: - admin/settings/filters +2. Head over to your text format settings: + admin/config/content/formats 3. Edit your default input format and add the reCAPTCHA Mailhide filter.
--- a/sites/all/modules/recaptcha/recaptcha.admin.inc Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/recaptcha/recaptcha.admin.inc Thu Sep 19 10:33:07 2013 +0100 @@ -9,8 +9,11 @@ * Form callback; administrative settings for reCaptcha. */ function recaptcha_admin_settings() { - // Load the recaptcha library. - _recaptcha_load_library(); + // Load the recaptcha library. Error if library does not load. + if (!_recaptcha_load_library()) { + drupal_set_message(t('Error loading recaptchalib.'), 'error'); + return FALSE; + } $form = array(); $form['recaptcha_public_key'] = array( @@ -18,7 +21,7 @@ '#title' => t('Public Key'), '#default_value' => variable_get('recaptcha_public_key', ''), '#maxlength' => 40, - '#description' => t('The public key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))), + '#description' => t('The public key given to you when you <a href="@url" target="_blank">register for reCAPTCHA</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))), '#required' => TRUE, ); $form['recaptcha_private_key'] = array( @@ -26,7 +29,7 @@ '#title' => t('Private Key'), '#default_value' => variable_get('recaptcha_private_key', ''), '#maxlength' => 40, - '#description' => t('The private key given to you when you <a href="@url" target="_blank">registered at reCAPTCHA.net</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))), + '#description' => t('The private key given to you when you <a href="@url" target="_blank">register for reCAPTCHA</a>.', array('@url' => url(recaptcha_get_signup_url($_SERVER['SERVER_NAME'], variable_get('site_name', ''))))), '#required' => TRUE, ); $form['recaptcha_ajax_api'] = array(
--- a/sites/all/modules/recaptcha/recaptcha.info Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/recaptcha/recaptcha.info Thu Sep 19 10:33:07 2013 +0100 @@ -8,9 +8,9 @@ files[] = recaptcha.module files[] = recaptcha.install -; Information added by drupal.org packaging script on 2013-02-04 -version = "7.x-1.9" +; Information added by drupal.org packaging script on 2013-08-29 +version = "7.x-1.10" core = "7.x" project = "recaptcha" -datestamp = "1359998293" +datestamp = "1377803514"
--- a/sites/all/modules/recaptcha/recaptcha.js Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/recaptcha/recaptcha.js Thu Sep 19 10:33:07 2013 +0100 @@ -1,8 +1,8 @@ (function ($) { - Drupal.behaviors.recapcha = { - attach: function (context) { - $(document).ready(Recaptcha.create(Drupal.settings.recaptcha.public_key, Drupal.settings.recaptcha.container, {theme: Drupal.settings.recaptcha.theme})); - }, - detach: function (context) {} - }; + Drupal.behaviors.recaptcha = { + attach: function (context) { + $(document).ready(Recaptcha.create(Drupal.settings.recaptcha.public_key, Drupal.settings.recaptcha.container, {theme: Drupal.settings.recaptcha.theme})); + }, + detach: function (context) {} + }; }(jQuery));
--- a/sites/all/modules/recaptcha/recaptcha.module Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/recaptcha/recaptcha.module Thu Sep 19 10:33:07 2013 +0100 @@ -74,25 +74,15 @@ $captcha_type = array_shift($args); $captcha = array(); if ($captcha_type == 'reCAPTCHA') { - // Load the recaptcha library. - _recaptcha_load_library(); - - // Check if reCAPTCHA is available and show Math if not. - $connect = @fsockopen(RECAPTCHA_VERIFY_SERVER, 80); - if (!$connect) { - return captcha_captcha('generate', 'Math', $args); - } - fclose($connect); - // Retrieve configuration variables. $recaptcha_theme = variable_get('recaptcha_theme', 'red'); $recaptcha_tabindex = variable_get('recaptcha_tabindex', NULL); $recaptcha_public_key = variable_get('recaptcha_public_key', FALSE); - $recaptcha_form_value = NULL; $recaptcha_ajax_api = variable_get('recaptcha_ajax_api', FALSE); - // Fallback to Math if reCAPTCHA is not configured. - if (!$recaptcha_public_key) { + // Test if reCAPTCHA can be used, falling back to Math if it is not + // configured, the library won't load, or the server is down. + if (!$recaptcha_public_key || !_recaptcha_load_library() || !_recaptcha_test_recaptcha_server()) { return captcha_captcha('generate', 'Math', $args); } @@ -124,7 +114,6 @@ // Add support to display the custom theme. if ($recaptcha_theme == 'custom') { $recaptcha_options['custom_theme_widget'] = 'recaptcha_custom_theme_widget'; - $recaptcha_form_value = theme('recaptcha_custom_widget'); } // Set the default tab index. @@ -144,26 +133,31 @@ $recaptcha_public_key .= '&nocookie=1'; } - $html = recaptcha_get_html($recaptcha_public_key, NULL, TRUE); $captcha['form']['captcha_response'] = array( '#type' => 'hidden', '#value' => 'reCAPTCHA', ); // Expose the form, either straight HTML, or using the AJAX API. + // Build the custom theme HTML if necessary. + $recaptcha_custom_html = ($recaptcha_theme == 'custom') ? theme('recaptcha_custom_widget') : ''; if ($recaptcha_ajax_api == FALSE) { + // Only generate recaptcha_get_html() if we're not using the AJAX API. + $html = recaptcha_get_html($recaptcha_public_key, NULL, TRUE); $captcha['form']['captcha_form'] = array( '#type' => 'item', - '#markup' => ($recaptcha_form_value ? '<div id="recaptcha_custom_theme_widget">' . $recaptcha_form_value . '</div>' : '') . $html, + '#markup' => (!empty($recaptcha_custom_html) ? '<div id="recaptcha_custom_theme_widget">' . $recaptcha_custom_html . '</div>' : '') . $html, ); } else { - $html = ($recaptcha_theme == 'custom') ? theme('recaptcha_custom_widget') : ''; $captcha['form']['captcha_form'] = array( '#type' => 'item', - '#markup' => '<div id="recaptcha_ajax_api_container">' . $html . '</div>', + // Create the destination container, inserting any custom theme HTML + // necessary ($recaptcha_custom_html will be empty if we are not + // using custom theme). + '#markup' => '<div id="recaptcha_ajax_api_container">' . $recaptcha_custom_html . '</div>', ); - drupal_add_js('https://www.google.com/recaptcha/api/js/recaptcha.js', array('type' => 'external')); + drupal_add_js('https://www.google.com/recaptcha/api/js/recaptcha_ajax.js', array('type' => 'external')); $recaptcha_options['public_key'] = $recaptcha_public_key; $recaptcha_options['container'] = 'recaptcha_ajax_api_container'; drupal_add_js(array('recaptcha' => $recaptcha_options), 'setting'); @@ -253,5 +247,5 @@ * Load the recaptcha library. */ function _recaptcha_load_library() { - module_load_include('php', 'recaptcha', 'recaptcha-php-1.11/recaptchalib'); + return module_load_include('php', 'recaptcha', 'recaptcha-php-1.11/recaptchalib'); }
--- a/sites/all/modules/recaptcha/recaptcha_mailhide.info Thu Aug 22 17:22:54 2013 +0100 +++ b/sites/all/modules/recaptcha/recaptcha_mailhide.info Thu Sep 19 10:33:07 2013 +0100 @@ -5,9 +5,9 @@ files[] = recaptcha_mailhide.module -; Information added by drupal.org packaging script on 2013-02-04 -version = "7.x-1.9" +; Information added by drupal.org packaging script on 2013-08-29 +version = "7.x-1.10" core = "7.x" project = "recaptcha" -datestamp = "1359998293" +datestamp = "1377803514"